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

Choferes.init({
    title: 'Choferes',
    icon: 'fa-id-card',
    idSingular: 'Chofer',
    idField: 'id_chofer',
    endpoint: '/choferes',
    sortDefault: 'nombre',
    limite: 50,
    searchPlaceholder: 'Buscar por código, nombre o documento...',
    filtroEstado: true,
    showEstado: true,
    exportFileName: 'Choferes',
    elementId: 'pageChoferes',
    menuPage: 'Choferes',
    columnFilters: {},
    columns: [
        { field: 'cod_chofer', label: 'Código', sortable: true, filterable: true, width: '110px' },
        { field: 'nombre', label: 'Nombre', sortable: true, filterable: true },
        { field: 'tipo_documento_nombre', label: 'Tipo Doc.', sortable: false, filterable: true, width: '120px' },
        { field: 'num_documento', label: 'N° Documento', sortable: true, filterable: false, width: '140px' },
        { field: 'email', label: 'Email', sortable: true, filterable: false },
        { field: 'telefono', label: 'Teléfono', sortable: true, filterable: false, width: '120px' },
        { field: 'licencia_conducir', label: 'Licencia', sortable: true, filterable: false, width: '120px' },
        { field: 'categoria_licencia', label: 'Cat. Lic.', sortable: true, filterable: true, width: '80px' },
        { 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 html = '<div style="display:grid;grid-template-columns:1fr 1fr;gap:16px">';
        html += '<div class="prov-field"><label>Código <span class="req">*</span></label><input type="text" id="choFormCod" class="prov-input" maxlength="10" required></div>';
        html += '<div class="prov-field"><label>Tipo Documento</label><select id="choFormTipoDoc" class="prov-input"></select></div>';
        html += '<div class="prov-field"><label>Nombre <span class="req">*</span></label><input type="text" id="choFormNombre" class="prov-input" maxlength="200" required></div>';
        html += '<div class="prov-field"><label>N° Documento</label><input type="text" id="choFormNumDoc" class="prov-input" maxlength="20"></div>';
        html += '<div class="prov-field"><label>Email</label><input type="email" id="choFormEmail" class="prov-input" maxlength="100"></div>';
        html += '<div class="prov-field"><label>Teléfono</label><input type="text" id="choFormTelefono" class="prov-input" maxlength="20"></div>';
        html += '<div class="prov-field"><label>Licencia Conducir</label><input type="text" id="choFormLicencia" class="prov-input" maxlength="20"></div>';
        html += '<div class="prov-field"><label>Categoría Licencia</label><input type="text" id="choFormCatLic" class="prov-input" maxlength="10"></div>';
        html += '<div class="prov-field"><label>Dirección</label><input type="text" id="choFormDireccion" class="prov-input" maxlength="200"></div>';
        html += '<div class="prov-field"><label>Fecha Nacimiento</label><input type="date" id="choFormFecNac" class="prov-input"></div>';
        html += '<div class="prov-field"><label>Vence Licencia</label><input type="date" id="choFormFecVence" class="prov-input"></div>';
        html += '<div class="prov-field"><label>Estado</label><select id="choFormEstado" 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('choFormTipoDoc');
        fetch(this.API_URL + '/tipo-documento?limit=0&id_empresa=' + (this.sesion ? this.sesion.id_empresa : '') + '&estado=1')
            .then(function(r) { return r.json(); })
            .then(function(res) {
                if (!res.ok) return;
                var html = '<option value="">-- Seleccione --</option>';
                res.data.forEach(function(td) {
                    if (!td.activo) return;
                    var s = (data && td.codigo === data.tipo_documento) ? ' selected' : '';
                    html += '<option value="' + td.codigo + '"' + s + '>' + td.descripcion + '</option>';
                });
                sel.innerHTML = html;
            });

        if (!data) {
            document.getElementById('choFormCod').value = '';
            document.getElementById('choFormNombre').value = '';
            document.getElementById('choFormNumDoc').value = '';
            document.getElementById('choFormEmail').value = '';
            document.getElementById('choFormTelefono').value = '';
            document.getElementById('choFormLicencia').value = '';
            document.getElementById('choFormCatLic').value = '';
            document.getElementById('choFormDireccion').value = '';
            document.getElementById('choFormFecNac').value = '';
            document.getElementById('choFormFecVence').value = '';
            document.getElementById('choFormEstado').value = '1';
            return;
        }
        document.getElementById('choFormCod').value = data.cod_chofer || '';
        document.getElementById('choFormTipoDoc').value = data.tipo_documento || '';
        document.getElementById('choFormNombre').value = data.nombre || '';
        document.getElementById('choFormNumDoc').value = data.num_documento || '';
        document.getElementById('choFormEmail').value = data.email || '';
        document.getElementById('choFormTelefono').value = data.telefono || '';
        document.getElementById('choFormLicencia').value = data.licencia_conducir || '';
        document.getElementById('choFormCatLic').value = data.categoria_licencia || '';
        document.getElementById('choFormDireccion').value = data.direccion || '';
        document.getElementById('choFormFecNac').value = data.fecha_nacimiento ? data.fecha_nacimiento.substring(0, 10) : '';
        document.getElementById('choFormFecVence').value = data.fecha_vencimiento_licencia ? data.fecha_vencimiento_licencia.substring(0, 10) : '';
        document.getElementById('choFormEstado').value = data.estado ? '1' : '0';
    },
    onGuardar: function() {
        var id = document.getElementById('pageChoferesFormId')?.value;
        var cod = document.getElementById('choFormCod').value.trim().toUpperCase();
        var nombre = document.getElementById('choFormNombre').value.trim().toUpperCase();
        var tipoDoc = document.getElementById('choFormTipoDoc').value;
        var numDoc = document.getElementById('choFormNumDoc').value.trim().toUpperCase();
        var email = document.getElementById('choFormEmail').value.trim();
        var telefono = document.getElementById('choFormTelefono').value.trim();
        var licencia = document.getElementById('choFormLicencia').value.trim().toUpperCase();
        var catLic = document.getElementById('choFormCatLic').value.trim().toUpperCase();
        var direccion = document.getElementById('choFormDireccion').value.trim().toUpperCase();
        var fecNac = document.getElementById('choFormFecNac').value;
        var fecVence = document.getElementById('choFormFecVence').value;
        var est = document.getElementById('choFormEstado').value === '1';

        if (!cod) { Mensaje.error({ titulo: 'Validación', texto: 'El código es requerido' }); return; }
        if (!nombre) { Mensaje.error({ titulo: 'Validación', texto: 'El nombre es requerido' }); return; }
        if (!this.sesion || !this.sesion.id_empresa) { Mensaje.error({ titulo: 'Error', texto: 'Sesión no disponible' }); return; }

        var body = { id_empresa: this.sesion.id_empresa, id_sucursal: this.sesion.id_sucursal || null, cod_chofer: cod, nombre: nombre, tipo_documento: tipoDoc, num_documento: numDoc, email: email, telefono: telefono, licencia_conducir: licencia, categoria_licencia: catLic, direccion: direccion, fecha_nacimiento: fecNac || null, fecha_vencimiento_licencia: fecVence || null, 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 chofer' });
        });
    }
});
