/**
 * modals.js — Add product modal logic
 */

const Modals = {
    init() {
        const overlay = document.getElementById('modalOverlay');
        const btnOpen = document.getElementById('btnAddProduct');
        const btnClose = document.getElementById('modalClose');
        const btnCancel = document.getElementById('btnCancelProduct');
        const btnSave = document.getElementById('btnSaveProduct');

        btnOpen.addEventListener('click', () => this.open());
        btnClose.addEventListener('click', () => this.close());
        btnCancel.addEventListener('click', () => this.close());
        overlay.addEventListener('click', (e) => {
            if (e.target === overlay) this.close();
        });
        btnSave.addEventListener('click', () => this.save());

        // Cost auto-calculation
        document.getElementById('fCostoBase').addEventListener('input', () => this.calcCost());
        document.getElementById('fCostoPresentacion').addEventListener('change', () => this.calcCost());
        document.getElementById('fUnidadesCaja').addEventListener('input', () => this.calcCost());
        document.getElementById('fUnidadesBlister').addEventListener('input', () => this.calcCost());
    },

    open() {
        document.getElementById('modalOverlay').style.display = 'flex';
        this._populateLocations();
        document.getElementById('addProductForm').reset();
        document.getElementById('fCostoPreview').innerHTML = '<i class="fas fa-pills"></i> Q <strong>0.00</strong>';
    },

    close() {
        document.getElementById('modalOverlay').style.display = 'none';
    },

    async _populateLocations() {
        const select = document.getElementById('fLugarCompra');
        select.innerHTML = '<option value="">Seleccionar...</option>';
        try {
            const res = await API.getLocations();
            if (res && res.data) {
                res.data.forEach(l => {
                    select.innerHTML += `<option value="${l.id}">${escapeHtml(l.nombre)}</option>`;
                });
            }
        } catch (err) {
            console.error('Error loading locations', err);
        }
    },

    calcCost() {
        const costoBase = parseFloat(document.getElementById('fCostoBase').value) || 0;
        const pres = document.getElementById('fCostoPresentacion').value;
        const unidsCaja = parseInt(document.getElementById('fUnidadesCaja').value) || 1;
        const unidsBlister = parseInt(document.getElementById('fUnidadesBlister').value) || 1;

        let costoUnidad = 0;
        if (pres === 'caja') {
            costoUnidad = unidsCaja > 0 ? costoBase / unidsCaja : 0;
        } else if (pres === 'blister') {
            costoUnidad = unidsBlister > 0 ? costoBase / unidsBlister : 0;
        } else {
            costoUnidad = costoBase;
        }

        document.getElementById('fCostoPreview').innerHTML = `<i class="fas fa-pills"></i> Q <strong>${formatCurrency(costoUnidad)}</strong>`;
    },

    async save() {
        const nombre = document.getElementById('fNombreComercial').value.trim();
        const generico = document.getElementById('fNombreGenerico').value.trim();
        const lab = document.getElementById('fLaboratorio').value.trim();

        if (!nombre || !generico || !lab) {
            showToast('Completa los campos obligatorios', 'warning');
            return;
        }

        const data = {
            NombreComercial: nombre,
            NombreGenerico: generico,
            laboratorio: lab,
            CodigoBarra: document.getElementById('fCodigoBarra').value.trim(),
            FuncionMedica: document.getElementById('fFuncionMedica').value.trim(),
            id_lugarCompra: null,
            CostoUnidad: 0,
            CostoBlister: 0,
            CostoMayor: 0,
            CostoMixto: 0,
            PrecioVentaUnidad: parseFloat(document.getElementById('fPrecioUnidad').value) || 0,
            PrecioVentaBlister: parseFloat(document.getElementById('fPrecioBlister').value) || 0,
            PrecioVentaMayor: parseFloat(document.getElementById('fPrecioMayor').value) || 0,
            PrecioVentaMixto: parseFloat(document.getElementById('fPrecioMixto').value) || 0,
            FechaVencimiento: null,
            existencia: 0,
            con_factura: false,
            exento_iva: document.getElementById('fExentoIva').checked,
            unidades_por_caja: parseInt(document.getElementById('fUnidadesCaja').value) || 0,
            unidades_por_blister: parseInt(document.getElementById('fUnidadesBlister').value) || 0,
        };

        const btn = document.getElementById('btnSaveProduct');
        btn.disabled = true;
        btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Guardando...';

        try {
            const res = await API.createProduct(data);
            showToast(`Producto creado: ${res.data.CodigoInterno}`, 'success');
            this.close();
            App.loadProducts();
        } catch (err) {
            showToast('Error: ' + err.message, 'error');
        } finally {
            btn.disabled = false;
            btn.innerHTML = '<i class="fas fa-save"></i> Guardar Producto';
        }
    },
};
