import os
import re
import sys

def organize_files(base_path):
    # Expresión regular para buscar específicamente '(Disc X)' donde X es un único dígito
    disc_pattern = re.compile(r'\(Disc \d\)')

    print(f"Iniciando organización y renombrado de archivos en: {base_path}")

    # Obtiene una lista de archivos que coincidan exactamente con el formato esperado
    files = [f for f in os.listdir(base_path) if disc_pattern.search(f)]
    print(f"Archivos detectados con '(Disc X)': {len(files)} encontrados")

    # Diccionario para agrupar por nombre base
    groups = {}

    # Organiza los archivos según el nombre base (todo antes de "(Disc X)")
    for file in files:
        base_name = disc_pattern.split(file)[0].strip()
        if base_name not in groups:
            groups[base_name] = []
        groups[base_name].append(file)

    print(f"Grupos formados: {len(groups)} grupos identificados")

    # Renombrar archivos y generar archivos .m3u
    for base_name, group_files in groups.items():
        print(f"Procesando grupo: {base_name}")

        # Renombrar los archivos
        for file in sorted(group_files):  # Ordenar los archivos por disco
            original_path = os.path.join(base_path, file)
            new_path = os.path.join(base_path, file + '.disc')
            os.rename(original_path, new_path)
            print(f"Archivo renombrado: {original_path} → {new_path}")

        # Crear el archivo .m3u
        m3u_path = os.path.join(base_path, f'{base_name}.m3u')
        with open(m3u_path, 'w') as m3u_file:
            for file in sorted(group_files):  # Asegura que estén en orden
                new_filename = file + '.disc'  # El nombre con la nueva extensión
                m3u_file.write(new_filename + '\n')
            print(f"Archivo .m3u creado: {m3u_path}")

    print("Organización y renombrado completados.")

if __name__ == "__main__":
    # Comprobamos que se pase un argumento con la ruta base
    if len(sys.argv) != 2:
        print("Uso: python script.py <ruta_base>")
        sys.exit(1)

    # Obtenemos la ruta base desde los argumentos
    base_path = sys.argv[1]

    # Verificamos que la ruta exista
    if not os.path.exists(base_path):
        print(f"Error: La ruta especificada '{base_path}' no existe.")
        sys.exit(1)

    organize_files(base_path)
