import os
from datetime import datetime
from werkzeug.utils import secure_filename
from PIL import Image, ImageOps

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

UPLOAD_FOLDER = os.path.join(BASE_DIR, 'static', 'uploads')
PERFILES_FOLDER = os.path.join(UPLOAD_FOLDER, 'perfiles')
DOCUMENTOS_FOLDER = os.path.join(UPLOAD_FOLDER, 'documentos')
FIRMAS_FOLDER = os.path.join(UPLOAD_FOLDER, 'firmas')

for folder in [PERFILES_FOLDER, DOCUMENTOS_FOLDER, FIRMAS_FOLDER]:
    os.makedirs(folder, exist_ok=True)

def guardar_archivo(archivo, tipo_archivo, alias_usuario):
    if not archivo or archivo.filename == '':
        return None

    extension = os.path.splitext(archivo.filename)[1].lower()
    fecha_str = datetime.now().strftime('%Y%m%d%H%M%S')
    nombre_limpio = secure_filename(f"{tipo_archivo}_{alias_usuario}_{fecha_str}{extension}")

    if tipo_archivo == 'FOTO':
        ruta_destino = os.path.join(PERFILES_FOLDER, nombre_limpio)
        ruta_bd = f"/static/uploads/perfiles/{nombre_limpio}"
    elif tipo_archivo in ['CI_FRENTE', 'CI_ATRAS']:
        ruta_destino = os.path.join(DOCUMENTOS_FOLDER, nombre_limpio)
        ruta_bd = f"/static/uploads/documentos/{nombre_limpio}"
    elif tipo_archivo == 'FIRMA':
        ruta_destino = os.path.join(FIRMAS_FOLDER, nombre_limpio)
        ruta_bd = f"/static/uploads/firmas/{nombre_limpio}"
    else:
        ruta_destino = os.path.join(UPLOAD_FOLDER, nombre_limpio)
        ruta_bd = f"/static/uploads/{nombre_limpio}"

    try:
        archivo.save(ruta_destino) 
        return ruta_bd             
    except Exception as e:
        print(f"Error al guardar archivo en disco: {e}")
        return None

def procesar_firma_transparente(ruta_relativa_bd):
    if not ruta_relativa_bd:
        return None

    partes_ruta = ruta_relativa_bd.strip("/").split("/")
    ruta_fisica = os.path.join(BASE_DIR, *partes_ruta)
    
    try:
        img = Image.open(ruta_fisica)
        img = ImageOps.exif_transpose(img)
        img = img.convert("RGBA")
        datas = img.getdata()

        nuevo_data = []
        for item in datas:
            luminosidad = (item[0] + item[1] + item[2]) // 3
            if luminosidad > 110:
                nuevo_data.append((255, 255, 255, 0)) 
            else:
                nuevo_data.append((20, 30, 80, 255)) 

        img.putdata(nuevo_data)
        
        nombre_base = os.path.splitext(os.path.basename(ruta_fisica))[0]
        nombre_transparente = nombre_base.replace('FIRMA_', 'FIRMA_TRANSPARENTE_') + '.png'
        ruta_destino_fisica = os.path.join(FIRMAS_FOLDER, nombre_transparente)
        
        img.save(ruta_destino_fisica, "PNG")
        
        return f"/static/uploads/firmas/{nombre_transparente}"
        
    except Exception as e:
        print(f"Error procesando firma transparente: {e}")
        return None