import os
import shutil
import re

def load_pokemon_names(pbs_file_path):
    # Crear un diccionario para almacenar la relación ID -> InternalName
    id_to_name = {}
    with open(pbs_file_path, 'r', encoding='utf-8-sig') as file:
        pokemon_id = None
        for line in file:
            line = line.strip()
            # Buscar líneas con el formato de ID, como [1], [2], etc.
            id_match = re.match(r'^\[(\d+)\]$', line)
            if id_match:
                # Si encuentra un nuevo ID, lo almacena temporalmente
                pokemon_id = id_match.group(1)
            elif line.startswith("InternalName=") and pokemon_id:
                # Extraer el nombre después de "InternalName=" y almacenarlo
                pokemon_name = line.split("=")[1].strip().upper()
                id_to_name[pokemon_id] = pokemon_name
                pokemon_id = None  # Resetear para el siguiente Pokémon

    return id_to_name

def rename_and_copy_sprites(input_folder, base_output_folder, id_to_name):
    # Definir las carpetas de destino para cada tipo de sprite
    folders = {
        "s": "Front Shiny Test",
        "b": "Back Test",
        "sb": "Shiny Back Test",
        "": "Front Test"
    }

    # Crear las carpetas de destino si no existen
    for folder in folders.values():
        os.makedirs(os.path.join(base_output_folder, folder), exist_ok=True)

    # Recorrer todos los archivos en la carpeta de entrada
    for filename in os.listdir(input_folder):
        # Separar el nombre base del archivo y su extensión
        pokemon_id, extension = os.path.splitext(filename)
        
        # Identificar el tipo de sprite por el sufijo
        suffix = ""
        if pokemon_id.endswith("sb"):
            suffix = "sb"
            pokemon_id = pokemon_id[:-2]  # Remover el sufijo "sb" del ID
        elif pokemon_id.endswith("s"):
            suffix = "s"
            pokemon_id = pokemon_id[:-1]  # Remover el sufijo "s" del ID
        elif pokemon_id.endswith("b"):
            suffix = "b"
            pokemon_id = pokemon_id[:-1]  # Remover el sufijo "b" del ID

        # Verificar si el nombre base (sin sufijo) está en el PBS
        if pokemon_id in id_to_name:
            # Obtener el nombre en mayúsculas correspondiente
            new_name = id_to_name[pokemon_id]
            # Ruta del archivo fuente
            src_path = os.path.join(input_folder, filename)
            # Ruta de la carpeta de destino basada en el sufijo
            dest_folder = os.path.join(base_output_folder, folders[suffix])
            # Ruta del archivo de destino
            dest_path = os.path.join(dest_folder, f"{new_name}{extension}")

            # Copiar y renombrar el archivo
            shutil.copy2(src_path, dest_path)
            print(f"Copiado {filename} como {new_name}{extension} en {dest_folder}")
        else:
            print(f"ID {pokemon_id} no encontrado en el archivo PBS.")

# Rutas de los archivos y carpetas
pbs_file_path = r"D:\Pokemon_Armonia\PBS\pokemon.txt"
input_folder = r"D:\Github\Test-Cuantico\Graphics\Pokemon\Future additions\Battler"
base_output_folder = r"D:\Github\Test-Cuantico\Graphics\Pokemon\Future additions\CON_NOMBRES"

# Cargar los nombres de los Pokémon desde el archivo PBS
id_to_name = load_pokemon_names(pbs_file_path)
# Copiar y renombrar los sprites
rename_and_copy_sprites(input_folder, base_output_folder, id_to_name)
