import { supabase } from "./supabase";

/**
 * Registra el cliente/proyecto de un carnet descargado en la tabla
 * "carnet_empleados_creados_glm".
 *
 * @param {string} employeeNumber   - Número de cédula limpio (sin guiones/espacios)
 * @param {string} clienteProyecto  - Nombre del cliente/proyecto seleccionado
 * @returns {Promise<void>}
 */
export async function saveClienteProyecto(employeeNumber, clienteProyecto) {
    const cleanCedula = String(employeeNumber || '').replace(/[-\s]/g, '');
    const valorCliente = clienteProyecto || 'Generico';

    if (!cleanCedula) {
        throw new Error('Cédula vacía, no se puede guardar.');
    }

    const { error } = await supabase.rpc('upsert_carnet_cliente', {
        p_cedula: cleanCedula,
        p_cliente_proyecto: valorCliente
    });

    if (error) {
        throw error;
    }
}

/**
 * Sube la foto de un empleado al bucket "foto_empleados".
 *
 * El nombre del archivo sigue el patrón:
 *   <cedula>_<cliente>.jpg          — primera foto
 *   <cedula>_<cliente>1.jpg         — segunda foto del mismo empleado+cliente
 *   <cedula>_<cliente>2.jpg         — tercera, etc.
 *
 * @param {string} employeeNumber  - Número de cédula limpio (sin guiones/espacios)
 * @param {File}   file            - Archivo de imagen a subir
 * @param {string} [clientKey='']  - Nombre del cliente/proyecto (p.ej. "claro", "nestle")
 * @returns {Promise<string>}      - URL pública del archivo subido
 */
export async function uploadEmployeePhoto(employeeNumber, file, clientKey = '') {
    const extension = file.name.split('.').pop() || 'jpg';

    // Normalizar el nombre del cliente: minúsculas, sin espacios ni caracteres especiales
    const safeClient = clientKey
        ? '_' + clientKey.toLowerCase().replace(/[^a-z0-9]/g, '')
        : '';

    const baseName = `${employeeNumber}${safeClient}`;

    // Buscar archivos existentes con el mismo prefijo para elegir el sufijo correcto
    const { data: existingFiles } = await supabase.storage
        .from('foto_empleados')
        .list('', { search: baseName });

    // Filtrar exactamente los archivos que tengan el mismo baseName base
    const pattern = new RegExp(`^${baseName}(\\d*)\\.${extension}$`);
    const matches = (existingFiles || []).filter(f => pattern.test(f.name));

    let fileName;
    if (matches.length === 0) {
        // No existe ninguno: usar el nombre base sin sufijo numérico
        fileName = `${baseName}.${extension}`;
    } else {
        // Extraer los sufijos numéricos usados y elegir el siguiente
        const usedSuffixes = matches.map(f => {
            const m = f.name.match(pattern);
            return m ? parseInt(m[1] || '0', 10) : 0;
        });
        const nextSuffix = Math.max(...usedSuffixes) + 1;
        fileName = `${baseName}${nextSuffix}.${extension}`;
    }

    const { error } = await supabase.storage
        .from('foto_empleados')
        .upload(fileName, file, { upsert: false });

    if (error) throw error;

    const { data } = supabase.storage
        .from('foto_empleados')
        .getPublicUrl(fileName);

    return data.publicUrl;
}