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

Sucursales._empresas = [];

Sucursales._cargarEmpresas = function(cb) {
    if (Sucursales._empresas.length > 0) { if (cb) cb(); return; }
    fetch(Sucursales.API_URL + '/empresas?limit=0&estado=1')
        .then(function(r) { return r.json(); })
        .then(function(res) {
            if (res.ok && res.data) Sucursales._empresas = res.data;
            if (cb) cb();
        })
        .catch(function() { if (cb) cb(); });
};

Sucursales._llenarSelectEmpresa = function(sel, selectedId) {
    sel.innerHTML = '<option value="">Seleccione...</option>';
    Sucursales._empresas.forEach(function(emp) {
        var opt = document.createElement('option');
        opt.value = emp.id_empresa;
        opt.textContent = emp.razon_social;
        if (selectedId && Number(emp.id_empresa) === Number(selectedId)) opt.selected = true;
        sel.appendChild(opt);
    });
};

Sucursales.init({
    title: 'Sucursales',
    icon: 'fa-store',
    idSingular: 'Sucursal',
    idField: 'id_sucursal',
    endpoint: '/sucursales',
    sortDefault: 'codigo',
    limite: 50,
    searchPlaceholder: 'Buscar por código o nombre...',
    filtroEstado: true,
    showEstado: true,
    exportFileName: 'Sucursales',
    elementId: 'pageSucursales',
    menuPage: 'Sucursales',
    columnFilters: {},
    columns: [
        { field: 'codigo', label: 'Código', sortable: true, filterable: true, width: '70px' },
        { field: 'empresa_razon', label: 'Empresa', sortable: true, filterable: true, width: '20%' },
        { field: 'nombre', label: 'Nombre', sortable: true, filterable: true, width: '25%' },
        { field: 'direccion', label: 'Dirección', sortable: true, filterable: true, width: '30%' },
        { field: 'telefono', label: 'Teléfono', sortable: true, filterable: true, width: '110px' },
        { field: 'estado', label: 'Estado', sortable: true, filterable: true,
            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 html = '<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">';
        html += '<div class="prov-field"><label>Empresa <span class="req">*</span></label><select id="sucFormEmpresa" class="prov-input" required><option value="">Cargando...</option></select></div>';
        html += '<div class="prov-field"><label>Nombre <span class="req">*</span></label><input type="text" id="sucFormNombre" class="prov-input" maxlength="200" required></div>';
        html += '<div class="prov-field"><label>Dirección</label><input type="text" id="sucFormDireccion" class="prov-input" maxlength="255"></div>';
        html += '<div class="prov-field"><label>Teléfono</label><input type="text" id="sucFormTelefono" class="prov-input" maxlength="20"></div>';
        html += '<div class="prov-field"><label>Estado</label><select id="sucFormEstado" class="prov-input"><option value="1">Activo</option><option value="0">Inactivo</option></select></div>';
        html += '</div>';
        return html;
    },
    onCargarFormulario: function(data) {
        var sel = document.getElementById('sucFormEmpresa');
        if (!sel) return;
        var selectedId = data ? data.id_empresa : null;
        if (Sucursales._empresas.length > 0) {
            Sucursales._llenarSelectEmpresa(sel, selectedId);
        } else {
            sel.innerHTML = '<option value="">Cargando...</option>';
            Sucursales._cargarEmpresas(function() {
                var sel2 = document.getElementById('sucFormEmpresa');
                if (sel2) Sucursales._llenarSelectEmpresa(sel2, selectedId);
            });
        }
        if (!data) {
            document.getElementById('sucFormNombre').value = '';
            document.getElementById('sucFormDireccion').value = '';
            document.getElementById('sucFormTelefono').value = '';
            document.getElementById('sucFormEstado').value = '1';
            return;
        }
        document.getElementById('sucFormNombre').value = data.nombre || '';
        document.getElementById('sucFormDireccion').value = data.direccion || '';
        document.getElementById('sucFormTelefono').value = data.telefono || '';
        document.getElementById('sucFormEstado').value = data.estado ? '1' : '0';
    },
    onGuardar: function() {
        var id = document.getElementById('pageSucursalesFormId')?.value;
        var idEmpresa = parseInt(document.getElementById('sucFormEmpresa').value);
        var nom = document.getElementById('sucFormNombre').value.trim().toUpperCase();
        var dir = document.getElementById('sucFormDireccion').value.trim().toUpperCase();
        var tel = document.getElementById('sucFormTelefono').value.trim();
        var est = document.getElementById('sucFormEstado').value === '1';

        if (!idEmpresa) { Mensaje.error({ titulo: 'Validación', texto: 'Seleccione una empresa' }); return; }
        if (!nom) { Mensaje.error({ titulo: 'Validación', texto: 'El nombre es requerido' }); return; }

        var body = { id_empresa: idEmpresa, nombre: nom, direccion: dir, telefono: tel, 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) {
                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 sucursal' });
        });
    },
});

Sucursales._cargarEmpresas();
