import os
import zipfile
import shutil
import subprocess
import sys

def procesar_archivos(carpeta):
    """
    Procesa los archivos .zip de una carpeta, convirtiéndolos en .cso.
    Omite archivos .zip corruptos y solo elimina los que han sido procesados exitosamente.
    """
    # Recorre todos los archivos de la carpeta
    for archivo in os.listdir(carpeta):
        if archivo.endswith('.zip'):
            ruta_zip = os.path.join(carpeta, archivo)
            
            # Crear una carpeta temporal para descomprimir
            carpeta_temporal = os.path.join(carpeta, 'temp')
            os.makedirs(carpeta_temporal, exist_ok=True)
            
            try:
                # Intentar descomprimir el archivo .zip
                with zipfile.ZipFile(ruta_zip, 'r') as zip_ref:
                    zip_ref.extractall(carpeta_temporal)
            except zipfile.BadZipFile:
                print(f'Archivo corrupto, no se puede procesar: {ruta_zip}')
                continue  # Saltar al siguiente archivo

            # Procesar cada archivo descomprimido en la carpeta temporal
            for archivo_salida in os.listdir(carpeta_temporal):
                ruta_archivo_salida = os.path.join(carpeta_temporal, archivo_salida)
                ruta_cso = os.path.join(carpeta, os.path.splitext(archivo_salida)[0] + '.cso')
                
                # Comprimir con "ciso 9"
                comando = ['ciso', '9', ruta_archivo_salida, ruta_cso]
                resultado = subprocess.run(comando)
                
                # Si la compresión fue exitosa, eliminar el fichero zip original
                if resultado.returncode == 0:
                    os.remove(ruta_zip)
                    print(f'Archivo comprimido y .zip original eliminado: {ruta_zip}')
                else:
                    print(f'Error al comprimir: {ruta_archivo_salida}')

            # Eliminar la carpeta temporal
            shutil.rmtree(carpeta_temporal)
            print(f'Procesado: {ruta_zip}')

if __name__ == "__main__":
    # Verificar que se pase la ruta como parámetro
    if len(sys.argv) < 2:
        print("Uso: python script.py <ruta_de_la_carpeta>")
        sys.exit(1)
    
    # Obtener la ruta desde los argumentos del programa
    carpeta = sys.argv[1]

    # Comprobar si la carpeta existe
    if not os.path.isdir(carpeta):
        print(f'Error: La carpeta especificada no existe: {carpeta}')
        sys.exit(1)
    
    # Llamar a la función para procesar archivos
    procesar_archivos(carpeta)

