var Empresas = Object.assign({}, TablaGenerica);

Empresas.init({
    title: 'Empresas',
    icon: 'fa-building',
    idSingular: 'Empresa',
    idField: 'id_empresa',
    endpoint: '/empresas',
    sortDefault: 'razon_social',
    limite: 50,
    searchPlaceholder: 'Buscar por RUC, razón social o nombre comercial...',
    filtroEstado: true,
    showEstado: true,
    exportFileName: 'Empresas',
    elementId: 'pageEmpresas',
    menuPage: 'Empresas',
    columnFilters: {},
    columns: [
        { field: 'ruc', label: 'RUC', sortable: true, filterable: true, width: '130px' },
        { field: 'razon_social', label: 'Razón Social', sortable: true, filterable: true },
        { field: 'nombre_comercial', label: 'Nombre Comercial', sortable: true, filterable: true },
        { field: 'telefono', label: 'Teléfono', sortable: true, filterable: false, width: '120px' },
        { field: 'email', label: 'Email', sortable: true, filterable: false },
        { field: 'estado', label: 'Estado', sortable: true, filterable: true, width: '100px',
            render: function(row) {
                return row.estado
                    ? '<span class="prov-badge prov-badge-activo"><span class="prov-badge-dot"></span>Activo</span>'
                    : '<span class="prov-badge prov-badge-inactivo"><span class="prov-badge-dot"></span>Inactivo</span>';
            }
        }
    ],
    renderFormulario: function(data) {
        var esEdicion = data && data.id_empresa;
        var html = '<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">';
        html += '<div class="prov-field"><label>RUC <span class="req">*</span></label><input type="text" id="empFormRuc" class="prov-input" maxlength="20" required></div>';
        html += '<div class="prov-field"><label>Razón Social <span class="req">*</span></label><input type="text" id="empFormRazon" class="prov-input" maxlength="150" required></div>';
        html += '<div class="prov-field"><label>Nombre Comercial</label><input type="text" id="empFormNombre" class="prov-input" maxlength="100"></div>';
        html += '<div class="prov-field"><label>Teléfono</label><input type="text" id="empFormTelefono" class="prov-input" maxlength="30"></div>';
        html += '<div class="prov-field"><label>Email</label><input type="email" id="empFormEmail" class="prov-input" maxlength="150"></div>';
        html += '<div class="prov-field"><label>Dirección</label><input type="text" id="empFormDireccion" class="prov-input" maxlength="200"></div>';
        html += '<div class="prov-field"><label>Moneda Principal</label><select id="empFormMoneda" class="prov-input"><option value="SOLES">Soles</option><option value="DOLARES">Dólares</option></select></div>';
        html += '<div class="prov-field"><label>Estado</label><select id="empFormEstado" class="prov-input"><option value="1">Activo</option><option value="0">Inactivo</option></select></div>';
        html += '</div>';
        if (esEdicion) {
            html += '<div style="margin-top:16px;padding-top:16px;border-top:1px solid var(--gris-200)">';
            html += '<label style="font-family:\'Plus Jakarta Sans\',sans-serif;font-size:0.72rem;font-weight:600;color:var(--gris-600);display:block;margin-bottom:8px">Logo de Empresa</label>';
            html += '<div style="display:flex;align-items:center;gap:12px">';
            html += '<img id="empFormLogoPreview" src="' + (data.logo || '') + '" style="width:60px;height:60px;object-fit:contain;border:1px solid var(--gris-200);border-radius:6px;background:#FFF;display:' + (data.logo ? 'block' : 'none') + '">';
            html += '<input type="file" id="empFormLogoFile" accept="image/png,image/jpeg,image/gif,image/webp" style="display:none">';
            html += '<button type="button" class="btn-prov btn-prov-primario" id="empFormLogoBtn" style="font-family:\'Plus Jakarta Sans\',sans-serif;font-size:0.72rem;padding:6px 14px">Seleccionar archivo</button>';
            html += '<span style="font-family:\'Plus Jakarta Sans\',sans-serif;font-size:0.65rem;color:var(--gris-400)">Máx 2 MB. PNG, JPG, GIF, WebP</span>';
            html += '<button type="button" class="btn-prov btn-prov-secundario" id="empFormLogoRemove" style="font-family:\'Plus Jakarta Sans\',sans-serif;font-size:0.72rem;padding:6px 10px;color:#DC2626;border-color:#DC2626;display:' + (data.logo ? 'inline-flex' : 'none') + '" title="Quitar logo"><i class="fas fa-trash"></i></button>';
            html += '</div></div>';
        }
        return html;
    },
    onCargarFormulario: function(data) {
        if (!data) {
            document.getElementById('empFormRuc').value = '';
            document.getElementById('empFormRazon').value = '';
            document.getElementById('empFormNombre').value = '';
            document.getElementById('empFormTelefono').value = '';
            document.getElementById('empFormEmail').value = '';
            document.getElementById('empFormDireccion').value = '';
            document.getElementById('empFormMoneda').value = 'SOLES';
            document.getElementById('empFormEstado').value = '1';
            return;
        }
        document.getElementById('empFormRuc').value = data.ruc || '';
        document.getElementById('empFormRazon').value = data.razon_social || '';
        document.getElementById('empFormNombre').value = data.nombre_comercial || '';
        document.getElementById('empFormTelefono').value = data.telefono || '';
        document.getElementById('empFormEmail').value = data.email || '';
        document.getElementById('empFormDireccion').value = data.direccion || '';
        document.getElementById('empFormMoneda').value = data.moneda_principal || 'SOLES';
        document.getElementById('empFormEstado').value = data.estado ? '1' : '0';
        var preview = document.getElementById('empFormLogoPreview');
        var rmBtn = document.getElementById('empFormLogoRemove');
        if (preview) {
            if (data.logo) {
                preview.src = data.logo;
                preview.style.display = 'block';
                if (rmBtn) rmBtn.style.display = 'inline-flex';
            } else {
                preview.style.display = 'none';
                if (rmBtn) rmBtn.style.display = 'none';
            }
        }
    },
    abrirModal: function(id) {
        var self = this;
        var titulo = id ? 'Editar ' + this.idSingular : 'Nuevo ' + this.idSingular;
        var esNuevo = !id;

        var contenido = '<div class="prov-modal-form" id="' + this.elementId + 'Form">';
        contenido += '<input type="hidden" id="' + this.elementId + 'FormId" value="' + (id || '') + '">';
        contenido += this.renderFormulario(id ? { id_empresa: id } : null);
        contenido += '</div>';

        Modal.abrir({
            titulo: titulo,
            ancho: '680px',
            contenido: contenido,
            botones: [
                { texto: 'Cancelar', tipo: 'secundario', accion: function() { Modal.cerrar(); } },
                { texto: 'Guardar', tipo: 'primario', accion: function() { self.onGuardar(); } }
            ]
        });

        if (esNuevo) {
            this.onCargarFormulario(null);
        } else {
            this.cargarDatos(id);
        }

        // Logo upload handler
        setTimeout(function() {
            var fileInput = document.getElementById('empFormLogoFile');
            var logoBtn = document.getElementById('empFormLogoBtn');
            if (fileInput && logoBtn) {
                logoBtn.addEventListener('click', function() { fileInput.click(); });
                fileInput.addEventListener('change', function() {
                    var file = fileInput.files[0];
                    if (!file) return;
                    if (file.size > 2 * 1024 * 1024) {
                        Mensaje.error({ titulo: 'Error', texto: 'La imagen no debe superar 2 MB' });
                        fileInput.value = '';
                        return;
                    }
                    var reader = new FileReader();
                    reader.onload = function(e) {
                        var preview = document.getElementById('empFormLogoPreview');
                        var rmBtn = document.getElementById('empFormLogoRemove');
                        if (preview) { preview.src = e.target.result; preview.style.display = 'block'; }
                        if (rmBtn) rmBtn.style.display = 'inline-flex';
                    };
                    reader.readAsDataURL(file);
                });
            }
            var rmBtn = document.getElementById('empFormLogoRemove');
            if (rmBtn) {
                rmBtn.addEventListener('click', function(ev) {
                    ev.preventDefault();
                    var preview = document.getElementById('empFormLogoPreview');
                    if (preview) { preview.src = ''; preview.style.display = 'none'; }
                    document.getElementById('empFormLogoFile').value = '';
                    rmBtn.style.display = 'none';
                    var empresaId = document.getElementById('pageEmpresasFormId')?.value;
                    if (empresaId) {
                        rmBtn.disabled = true;
                        fetch(self.API_URL + '/empresas/' + empresaId + '/logo', { method: 'DELETE' })
                            .then(function(r) { return r.json(); })
                            .then(function(res) {
                                rmBtn.disabled = false;
                                if (res.ok) {
                                    try {
                                        var sesion = JSON.parse(localStorage.getItem('erp_session') || sessionStorage.getItem('erp_session'));
                                        if (sesion && sesion.id_empresa == empresaId) {
                                            sesion.empresa_logo = null;
                                            localStorage.setItem('erp_session', JSON.stringify(sesion));
                                        }
                                    } catch(e) {}
                                } else {
                                    Mensaje.error({ titulo: 'Error', texto: res.mensaje || 'Error al quitar logo' });
                                }
                            }).catch(function(e) {
                                rmBtn.disabled = false;
                                console.warn('Error al quitar logo:', e);
                                Mensaje.error({ titulo: 'Error', texto: 'Error de conexión al quitar logo' });
                            });
                    }
                });
            }
        }, 100);
    },
    onGuardar: function() {
        var id = document.getElementById('pageEmpresasFormId')?.value;
        var ruc = document.getElementById('empFormRuc').value.trim().toUpperCase();
        var razon = document.getElementById('empFormRazon').value.trim().toUpperCase();
        var nombre = document.getElementById('empFormNombre').value.trim().toUpperCase();
        var telefono = document.getElementById('empFormTelefono').value.trim();
        var email = document.getElementById('empFormEmail').value.trim();
        var direccion = document.getElementById('empFormDireccion').value.trim().toUpperCase();
        var moneda = document.getElementById('empFormMoneda').value;
        var est = document.getElementById('empFormEstado').value === '1';

        if (!ruc) { Mensaje.error({ titulo: 'Validación', texto: 'El RUC es requerido' }); return; }
        if (!razon) { Mensaje.error({ titulo: 'Validación', texto: 'La razón social es requerida' }); return; }

        var body = { ruc: ruc, razon_social: razon, nombre_comercial: nombre, direccion: direccion, telefono: telefono, email_empresa: email, moneda_principal: moneda, estado: est };

        var metodo = id ? 'PUT' : 'POST';
        var url = this.API_URL + this.endpoint + (id ? '/' + id : '');

        fetch(url, {
            method: metodo,
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify(body)
        })
        .then(function(r) { return r.json(); })
        .then(function(res) {
            if (res.ok) {
                var empresaId = res.data ? res.data.id_empresa || res.data.id : id;
                var fileInput = document.getElementById('empFormLogoFile');
                if (fileInput && fileInput.files && fileInput.files[0] && empresaId) {
                    var formData = new FormData();
                    formData.append('logo', fileInput.files[0]);
                    fetch(this.API_URL + '/empresas/' + empresaId + '/logo', {
                        method: 'POST',
                        body: formData
                    }).then(function(r2) { return r2.json(); }).then(function(res2) {
                        if (res2.ok) {
                            try {
                                var sesion = JSON.parse(localStorage.getItem('erp_session') || sessionStorage.getItem('erp_session'));
                                if (sesion && sesion.id_empresa == empresaId) {
                                    sesion.empresa_logo = res2.data.logo;
                                    localStorage.setItem('erp_session', JSON.stringify(sesion));
                                }
                            } catch(e) {}
                        }
                    }).catch(function(e) { console.warn('Error subiendo logo:', e); });
                }
                Mensaje.exito({ titulo: 'Guardado', texto: res.mensaje });
                Modal.cerrar();
                this.paginaActual = 1;
                this.cargarTabla();
            } else {
                Mensaje.error({ titulo: 'Error', texto: res.mensaje });
            }
        }.bind(this))
        .catch(function() {
            Mensaje.error({ titulo: 'Error', texto: 'Error al guardar empresa' });
        });
    }
});
