from PIL import Image
import os

def convert_images_to_pdf(folder_path, output_pdf):
    # Obtener la lista de archivos JPG en la carpeta
    image_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.jpg')]

    if not image_files:
        print(f"No se encontraron archivos JPG en la carpeta: {folder_path}")
        return

    # Ordenar los archivos alfabéticamente (opcional)
    image_files.sort()

    # Abrir las imágenes y convertirlas a objetos de Pillow
    images = []
    for image_file in image_files:
        file_path = os.path.join(folder_path, image_file)
        try:
            img = Image.open(file_path)
            if img.mode != 'RGB':
                img = img.convert('RGB')  # Convertir a RGB si no lo está
            images.append(img)
        except Exception as e:
            print(f"Error al procesar {file_path}: {e}")

    # Guardar las imágenes como un solo PDF
    if images:
        images[0].save(
            output_pdf,
            save_all=True,
            append_images=images[1:]
        )
        print(f"PDF generado exitosamente: {output_pdf}")
    else:
        print(f"No se pudieron procesar las imágenes en: {folder_path}")

def process_subfolders(base_folder):
    # Recorrer todas las subcarpetas
    for root, dirs, files in os.walk(base_folder):
        # Ignorar la carpeta base si no contiene JPG directamente
        if root == base_folder:
            continue

        # Definir el nombre del archivo PDF de salida
        folder_name = os.path.basename(root)
        output_pdf = os.path.join(root, f"{folder_name}.pdf")

        # Convertir las imágenes de esta subcarpeta a PDF
        print(f"Procesando carpeta: {root}")
        convert_images_to_pdf(root, output_pdf)

# Carpeta base donde se encuentran las subcarpetas
base_folder = os.path.dirname(os.path.abspath(__file__))  # Carpeta donde está el script

# Llamar a la función para procesar todas las subcarpetas
process_subfolders(base_folder)