/**
 * DESCUENTOS MODULE - JAVASCRIPT UTILITIES
 * Sistema de Descuentos Especiales
 */

// ============================================
// CONFIGURATION
// ============================================

const DescuentosConfig = {
    apiBasePath: 'api/descuentos/',
    descuentosActuales: null,
    tipoDescuentoActual: 'ninguno',
    codigoEmpleadoValidado: null
};

// ============================================
// API CALLS
// ============================================

/**
 * Cargar configuración de descuentos
 */
async function cargarConfigDescuentos() {
    try {
        const response = await fetch(DescuentosConfig.apiBasePath + 'obtener_config.php');
        const data = await response.json();

        if (data.success) {
            DescuentosConfig.descuentosActuales = data.descuentos;
            return data.descuentos;
        } else {
            console.error('Error al cargar descuentos:', data.error);
            return null;
        }
    } catch (error) {
        console.error('Error de conexión:', error);
        return null;
    }
}

/**
 * Actualizar configuración de un descuento
 */
async function actualizarConfigDescuento(tipoDescuento, porcentaje, activo, condicionMinima = null) {
    try {
        const response = await fetch(DescuentosConfig.apiBasePath + 'actualizar_config.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                tipo_descuento: tipoDescuento,
                porcentaje_descuento: porcentaje,
                activo: activo,
                condicion_minima: condicionMinima
            })
        });

        const data = await response.json();
        return data;
    } catch (error) {
        console.error('Error al actualizar descuento:', error);
        return { success: false, error: error.message };
    }
}

/**
 * Calcular precio con descuento
 */
async function calcularPrecioConDescuento(precioOriginal, tipoDescuento, codigoEmpleado = null, costoProducto = 0, totalVenta = 0) {
    try {
        const response = await fetch(DescuentosConfig.apiBasePath + 'calcular_precio.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                precio_original: precioOriginal,
                tipo_descuento: tipoDescuento,
                codigo_empleado: codigoEmpleado,
                costo_producto: costoProducto,
                total_venta: totalVenta
            })
        });

        const data = await response.json();
        return data;
    } catch (error) {
        console.error('Error al calcular precio:', error);
        return { success: false, error: error.message };
    }
}

/**
 * Validar código de empleado
 */
async function validarCodigoEmpleado(codigo) {
    try {
        const response = await fetch(DescuentosConfig.apiBasePath + 'validar_empleado.php', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({
                codigo_empleado: codigo
            })
        });

        const data = await response.json();
        return data;
    } catch (error) {
        console.error('Error al validar empleado:', error);
        return { success: false, error: error.message };
    }
}

// ============================================
// UI UTILITIES
// ============================================

/**
 * Formatear precio con descuento para mostrar
 */
function formatearPrecioConDescuento(precioOriginal, precioFinal, porcentaje) {
    if (porcentaje === 0 || precioOriginal === precioFinal) {
        return `<span class="precio">Q${precioOriginal.toFixed(2)}</span>`;
    }

    return `
        <div class="precio-con-descuento">
            <span class="precio-original">Q${precioOriginal.toFixed(2)}</span>
            <span class="precio-descuento">Q${precioFinal.toFixed(2)}</span>
            <span class="badge-descuento">-${porcentaje}%</span>
        </div>
    `;
}

/**
 * Mostrar modal de validación de empleado
 */
function mostrarModalEmpleado() {
    const modal = document.getElementById('modal-empleado');
    if (modal) {
        modal.style.display = 'flex';
        document.getElementById('codigo-empleado-input').focus();
    }
}

/**
 * Cerrar modal de empleado
 */
function cerrarModalEmpleado() {
    const modal = document.getElementById('modal-empleado');
    if (modal) {
        modal.style.display = 'none';
        document.getElementById('codigo-empleado-input').value = '';
    }
}

/**
 * Validar y aplicar descuento de empleado
 */
async function validarYAplicarDescuentoEmpleado() {
    const codigo = document.getElementById('codigo-empleado-input').value.trim();

    if (!codigo) {
        alert('Por favor ingresa un código de empleado');
        return;
    }

    const resultado = await validarCodigoEmpleado(codigo);

    if (resultado.success && resultado.valido) {
        DescuentosConfig.codigoEmpleadoValidado = resultado.empleado;
        DescuentosConfig.tipoDescuentoActual = 'empleado';

        // Mostrar mensaje de éxito
        alert(`Empleado validado: ${resultado.empleado.nombre}\nDescuento de empleado aplicado`);

        cerrarModalEmpleado();

        // Recalcular precios del carrito
        if (typeof cart !== 'undefined') {
            await cart.render();
        }
    } else {
        alert('Código de empleado inválido o inactivo');
    }
}

/**
 * Cambiar tipo de descuento
 */
async function cambiarTipoDescuento(nuevoTipo) {
    if (nuevoTipo === 'empleado') {
        mostrarModalEmpleado();
    } else {
        DescuentosConfig.tipoDescuentoActual = nuevoTipo;
        DescuentosConfig.codigoEmpleadoValidado = null;

        // Recalcular precios del carrito
        if (typeof cart !== 'undefined') {
            await cart.render();
        }
    }
}

/**
 * Obtener tipo de descuento actual
 */
function obtenerTipoDescuentoActual() {
    return DescuentosConfig.tipoDescuentoActual;
}

/**
 * Obtener código de empleado validado
 */
function obtenerCodigoEmpleadoValidado() {
    return DescuentosConfig.codigoEmpleadoValidado ? DescuentosConfig.codigoEmpleadoValidado.codigo : null;
}

/**
 * Resetear descuento
 */
function resetearDescuento() {
    DescuentosConfig.tipoDescuentoActual = 'ninguno';
    DescuentosConfig.codigoEmpleadoValidado = null;

    const selector = document.getElementById('tipo-descuento-select');
    if (selector) {
        selector.value = 'ninguno';
    }
}

// ============================================
// INITIALIZATION
// ============================================

console.log('Descuentos Module JS Loaded ✓');
