<?php
// vista/bastoneras/asistencia.php

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

$db = new clsbdd(); 

$fecha_filtro = $_POST['fecha_asistencia'] ?? date('Y-m-d');
$fecha_limpia = $db->esc($fecha_filtro);

// Contador rápido de cuántas justificaciones están pendientes de revisión por los padres
$sql_count = "SELECT COUNT(*) as total FROM bas_asistencia WHERE asi_justificada = 1 AND asi_justificacion_estado = 'PENDIENTE'";
$res_count = $db->ejecutar($sql_count);
$cant_pendientes = ($res_count) ? $res_count->fetch_assoc()['total'] : 0;

// 1. IDENTIFICACIÓN DEL PROFESOR Y SU CATEGORÍA/NIVEL AUTOMÁTICO
$usuario_id = $_SESSION['usu_id'] ?? 0;
$usuario_rol = strtoupper($_SESSION['usu_rol'] ?? '');

$cla_id_profesor = null;
$nombre_completo_clasificacion = "";

if ($usuario_rol === 'PROFESOR' || $usuario_rol === 'DOCENTE') {
    $sql_prof = "SELECT p.cla_id, CONCAT(c.cla_categoria, ' - ', c.cla_nivel) AS clasificacion_completa 
                 FROM bas_profesores p 
                 INNER JOIN bas_clasificaciones c ON p.cla_id = c.cla_id 
                 WHERE p.usu_id = " . (int)$usuario_id;
    $res_prof = $db->ejecutar($sql_prof);
    
    if ($res_prof && $row_prof = $res_prof->fetch_assoc()) {
        $cla_id_profesor = $row_prof['cla_id'];
        $nombre_completo_clasificacion = $row_prof['clasificacion_completa'];
    }
}

$categoria_filtro = $_POST['categoria_filtro'] ?? '';
if ($cla_id_profesor !== null) {
    $categoria_filtro = $cla_id_profesor;
}

// 2. CONSTRUCCIÓN DE LA CONSULTA DE ALUMNAS CON FILTRO DINÁMICO
$where_clauses = ["b.bas_estado = 1"];
if (!empty($categoria_filtro)) {
    $where_clauses[] = "b.cla_id = " . (int)$categoria_filtro;
}
$where_string = implode(" AND ", $where_clauses);

$query = "SELECT b.bas_id, b.bas_cedula, b.bas_nombres, b.bas_apellidos, 
                 CONCAT(c.cla_categoria, ' - ', c.cla_nivel) AS clasificacion_completa, 
                 a.asi_estado, a.asi_observaciones 
          FROM bas_bastoneras b
          LEFT JOIN bas_clasificaciones c ON b.cla_id = c.cla_id
          LEFT JOIN bas_asistencia a ON b.bas_id = a.bas_id AND a.asi_fecha = '$fecha_limpia'
          WHERE $where_string
          ORDER BY b.bas_apellidos ASC, b.bas_nombres ASC";

$result_alumnas = $db->ejecutar($query);

// 3. OBTENER LISTADO GENERAL DE CATEGORÍAS (Para Administradores)
$categorias_sistema = [];
if ($cla_id_profesor === null) {
    $res_cat = $db->ejecutar("SELECT cla_id, cla_categoria, cla_nivel FROM bas_clasificaciones ORDER BY cla_categoria ASC, cla_nivel ASC");
    if ($res_cat) {
        while ($r = $res_cat->fetch_assoc()) {
            $categorias_sistema[] = $r;
        }
    }
}
?>

<style>
    .btn-asistencia-tamanio {
        padding: 0.6rem 0.9rem !important;
        font-weight: 800 !important;
        font-size: 1.05rem !important;
        min-width: 44px;
        text-align: center;
    }
    
    /* Estilos para filas ya procesadas (Bloqueo Visual) */
    .fila-tomada-lista {
        background-color: #f8f9fa !important;
    }
    .fila-tomada-lista .btn-check:not(:checked) + .btn {
        opacity: 0.25 !important; /* Opaca los botones no seleccionados */
        pointer-events: none;     /* Evita clics accidentales */
    }
    .fila-tomada-lista .form-control {
        background-color: #f1f3f5 !important;
        pointer-events: none;
    }

    @media (max-width: 767.98px) {
        .tabla-responsiva-movil, .tabla-responsiva-movil thead, .tabla-responsiva-movil tbody, .tabla-responsiva-movil th, .tabla-responsiva-movil td, .tabla-responsiva-movil tr { 
            display: block !important; 
        }
        .tabla-responsiva-movil thead { display: none !important; }
        .tabla-responsiva-movil tr {
            margin-bottom: 1rem;
            border: 1px solid #e3e6f0;
            border-radius: 0.5rem;
            background: #fff;
            padding: 1rem;
            box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.04);
        }
        .tabla-responsiva-movil td { text-align: left !important; padding: 0.4rem 0 !important; border: none !important; }
        .tabla-responsiva-movil td:nth-child(2) { border-bottom: 1px dashed #eaecf4 !important; padding-bottom: 0.6rem !important; margin-bottom: 0.6rem; }
    }
</style>

<div class="row">
    <div class="col-12">
        <!-- Alerta superior si existen justificaciones pendientes enviadas por los padres -->
        <?php if ($cant_pendientes > 0 && $usuario_rol !== 'PADRE'): ?>
            <div class="alert alert-warning border-0 shadow-sm rounded-3 d-flex justify-content-between align-items-center p-3 mb-3">
                <div>
                    <i class="fas fa-exclamation-circle text-warning fa-lg me-2"></i>
                    <span class="text-dark">Hay <strong><?php echo $cant_pendientes; ?></strong> justificaciones de inasistencia pendientes de revisión.</span>
                </div>
                <a href="index.php?page=bastoneras/justificaciones" class="btn btn-warning btn-sm rounded-pill fw-bold px-3">
                    Revisar Ahora <i class="fas fa-arrow-right ms-1"></i>
                </a>
            </div>
        <?php endif; ?>

        <div class="card border-0 shadow-sm rounded-3 mb-3">
            <div class="card-body p-3 p-md-4">
                <div class="d-flex justify-content-between align-items-center flex-wrap gap-2">
                    <div>
                        <h5 class="fw-bold text-secondary mb-1">
                            <i class="fas fa-calendar-check text-pink me-2" style="color: var(--stage-pink, #e60073);"></i>Control de Asistencia
                        </h5>
                        <p class="text-muted small mb-0"><i class="fas fa-lock text-secondary me-1"></i> Bloqueo inteligente: Las filas se aseguran al ser guardadas.</p>
                    </div>
                    <div id="status-global-asistencia" class="badge bg-success-subtle text-success px-3 py-2 rounded-pill d-none">
                        <i class="fas fa-cloud-upload-alt me-1"></i> Sincronizado
                    </div>
                </div>
                
                <hr class="my-3 text-black-50">

                <form method="POST" action="index.php?page=bastoneras/asistencia" class="row g-2 align-items-end">
                    <div class="col-md-3 col-sm-6">
                        <label for="fecha_asistencia" class="form-label small fw-bold text-muted mb-1">Fecha de Control</label>
                        <input type="date" class="form-control" id="fecha_asistencia" name="fecha_asistencia" value="<?= htmlspecialchars($fecha_filtro) ?>" onchange="this.form.submit()">
                    </div>

                    <div class="col-md-6 col-sm-6">
                        <label class="form-label small fw-bold text-muted mb-1">Clasificación (Categoría - Nivel)</label>
                        <?php if ($cla_id_profesor !== null): ?>
                            <input type="text" class="form-control bg-light text-secondary fw-bold" value="<?= htmlspecialchars($nombre_completo_clasificacion) ?>" readonly>
                            <input type="hidden" id="categoria_filtro_val" value="<?= $cla_id_profesor ?>">
                        <?php else: ?>
                            <select name="categoria_filtro" id="categoria_filtro_val" class="form-select" onchange="this.form.submit()">
                                <option value="">-- Ver todas las clasificaciones --</option>
                                <?php foreach ($categorias_sistema as $cat): ?>
                                    <option value="<?= $cat['cla_id'] ?>" <?= $categoria_filtro == $cat['cla_id'] ? 'selected' : '' ?>>
                                        <?= htmlspecialchars($cat['cla_categoria'] . ' - ' . $cat['cla_nivel']) ?>
                                    </option>
                                <?php endforeach; ?>
                            </select>
                        <?php endif; ?>
                    </div>
                    <div class="col-md-3 col-12">
                        <button type="submit" class="btn btn-outline-secondary w-100"><i class="fas fa-filter me-1"></i> Filtrar</button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>

<div class="card border-0 shadow-sm rounded-3">
    <div class="card-header bg-white py-3 d-flex justify-content-between align-items-center border-0">
        <span class="text-muted small fw-bold text-uppercase">Alumnas (<?= $result_alumnas ? $result_alumnas->num_rows : 0 ?>)</span>
        <span class="badge rounded-pill bg-light text-dark border p-2 small text-muted"><i class="fas fa-calendar-alt me-1"></i> <?= date('d/m/Y', strtotime($fecha_filtro)) ?></span>
    </div>
    
    <div class="table-responsive p-2 p-md-0">
        <table class="table table-hover align-middle mb-0 tabla-responsiva-movil">
            <thead class="table-light text-secondary small text-uppercase">
                <tr>
                    <th style="width: 15%;">Identificación</th>
                    <th style="width: 30%;">Alumna</th>
                    <th style="width: 20%;">Clasificación</th>
                    <th style="width: 23%; text-align: center;">Asistencia</th>
                    <th style="width: 12%;">Observaciones</th>
                </tr>
            </thead>
            <tbody>
                <?php if (!$result_alumnas || $result_alumnas->num_rows == 0): ?>
                    <tr>
                        <td colspan="5" class="text-center text-muted py-4">
                            <i class="fas fa-users-slash d-block fs-3 mb-2 text-black-50"></i> No hay alumnas registradas.
                        </td>
                    </tr>
                <?php else: ?>
                    <?php 
                    while ($alumna = $result_alumnas->fetch_assoc()): 
                        $estado_actual = $alumna['asi_estado'];
                        $row_id = $alumna['bas_id'];
                        $clase_bloqueo = (!empty($estado_actual)) ? 'fila-tomada-lista' : '';
                        $estado_defecto = $estado_actual ?? 'ASISTIO';
                    ?>
                        <tr id="fila_<?= $row_id ?>" class="<?= $clase_bloqueo ?>">
                            <td>
                                <span class="d-inline-block d-md-none text-muted small fw-bold me-1">CI:</span>
                                <span class="small text-muted fw-bold"><?= htmlspecialchars($alumna['bas_cedula']) ?></span>
                            </td>
                            <td>
                                <div class="fw-bold text-dark fs-6"><?= htmlspecialchars($alumna['bas_apellidos'] . ' ' . $alumna['bas_nombres']) ?></div>
                            </td>
                            <td>
                                <span class="d-inline-block d-md-none text-muted small fw-bold me-1">Grupo:</span>
                                <span class="badge bg-secondary-subtle text-secondary px-2 py-1 rounded-2 small">
                                    <?= htmlspecialchars($alumna['clasificacion_completa'] ?? 'SIN ASIGNAR') ?>
                                </span>
                            </td>
                            <td class="text-md-center">
                                <div class="d-flex justify-content-start justify-content-md-center align-items-center gap-2 my-1">
                                    <input type="radio" class="btn-check" name="asistencia[<?= $row_id ?>]" id="asistio_<?= $row_id ?>" value="ASISTIO" <?= $estado_defecto === 'ASISTIO' ? 'checked' : '' ?> onchange="guardarFilaAsistencial(<?= $row_id ?>)">
                                    <label class="btn btn-outline-success btn-asistencia-tamanio flex-fill flex-md-grow-0" for="asistio_<?= $row_id ?>">Asiste</label>

                                    <input type="radio" class="btn-check" name="asistencia[<?= $row_id ?>]" id="atraso_<?= $row_id ?>" value="ATRASO" <?= $estado_defecto === 'ATRASO' ? 'checked' : '' ?> onchange="guardarFilaAsistencial(<?= $row_id ?>)">
                                    <label class="btn btn-outline-warning btn-asistencia-tamanio flex-fill flex-md-grow-0" for="atraso_<?= $row_id ?>">Atraso</label>

                                    <input type="radio" class="btn-check" name="asistencia[<?= $row_id ?>]" id="falta_<?= $row_id ?>" value="FALTA" <?= $estado_defecto === 'FALTA' ? 'checked' : '' ?> onchange="guardarFilaAsistencial(<?= $row_id ?>)">
                                    <label class="btn btn-outline-danger btn-asistencia-tamanio flex-fill flex-md-grow-0" for="falta_<?= $row_id ?>">Falta</label>

                                    <input type="radio" class="btn-check" name="asistencia[<?= $row_id ?>]" id="justificado_<?= $row_id ?>" value="JUSTIFICADO" <?= $estado_defecto === 'JUSTIFICADO' ? 'checked' : '' ?> onchange="guardarFilaAsistencial(<?= $row_id ?>)">
                                    <label class="btn btn-outline-info btn-asistencia-tamanio flex-fill flex-md-grow-0" for="justificado_<?= $row_id ?>">Justifica</label>
                                    
                                    <button type="button" class="btn btn-sm btn-light text-muted border-0 ms-1 p-2" id="btn_lock_<?= $row_id ?>" onclick="desbloquearFilaManual(<?= $row_id ?>)" title="Editar registro">
                                        <i class="fas <?= (!empty($estado_actual)) ? 'fa-lock text-warning' : 'fa-lock-open text-muted' ?>"></i>
                                    </button>
                                </div>
                            </td>
                            <td>
                                <div class="input-group input-group-sm mt-1 mt-md-0">
                                    <span class="input-group-text d-md-none bg-light"><i class="fas fa-comment-alt text-muted"></i></span>
                                    <input type="text" class="form-control form-control-sm" id="obs_<?= $row_id ?>" value="<?= htmlspecialchars($alumna['asi_observaciones'] ?? '') ?>" placeholder="Novedad..." oninput="guardarFilaAsistencialConRetraso(<?= $row_id ?>)">
                                </div>
                            </td>
                        </tr>
                    <?php endwhile; ?>
                <?php endif; ?>
            </tbody>
        </table>
    </div>
</div>

<script>
let timeoutsAsistencia = {};

function guardarFilaAsistencial(basId) {
    const fecha = document.getElementById('fecha_asistencia').value;
    const fila = document.getElementById('fila_' + basId);
    let observacionInput = document.getElementById('obs_' + basId);
    const iconoCandado = document.querySelector(`#btn_lock_${basId} i`);
    
    const radioSeleccionado = document.querySelector(`input[name="asistencia[${basId}]"]:checked`);
    if (!radioSeleccionado) return;
    
    const estado = radioSeleccionado.value;

    // LLENADO AUTOMÁTICO: Si es falta, ponemos "Enviado por WhatsApp" en el input antes de mandar la petición
    if (estado === 'FALTA' && (observacionInput.value.trim() === '' || observacionInput.value === 'Enviado por WhatsApp')) {
        observacionInput.value = 'Enviado por WhatsApp';
    }
    
    const observacion = observacionInput.value;
    fila.style.opacity = '0.6';
    
    const globalStatus = document.getElementById('status-global-asistencia');
    globalStatus.classList.remove('d-none', 'bg-success-subtle', 'text-success', 'bg-danger-subtle', 'text-danger');
    globalStatus.classList.add('bg-warning-subtle', 'text-warning');
    globalStatus.innerHTML = '<i class="fas fa-spinner fa-spin me-1"></i> Guardando...';

    const formData = new FormData();
    formData.append('fecha', fecha);
    formData.append('bas_id', basId);
    formData.append('estado', estado);
    formData.append('observacion', observacion);

    const urlBase = window.location.origin + window.location.pathname.substring(0, window.location.pathname.lastIndexOf('/') + 1);
    const urlDestino = urlBase + 'controlador/asistencia_ajax.php';

    fetch(urlDestino, {
        method: 'POST',
        body: formData
    })
    .then(response => {
        if (!response.ok) {
            return response.text().then(text => { throw new Error(text) });
        }
        return response.json();
    })
    .then(data => {
        fila.style.opacity = '1';
        
        if (data.status === 'success') {
            fila.classList.add('fila-tomada-lista');
            if(iconoCandado) {
                iconoCandado.classList.remove('fa-lock-open', 'text-muted');
                iconoCandado.classList.add('fa-lock', 'text-warning');
            }

            fila.style.transition = 'background-color 0.35s ease';
            fila.style.backgroundColor = '#d1e7dd';
            setTimeout(() => { fila.style.backgroundColor = ''; }, 500);

            globalStatus.className = 'badge bg-success-subtle text-success px-3 py-2 rounded-pill';
            globalStatus.innerHTML = '<i class="fas fa-check-circle me-1"></i> Guardado';
            setTimeout(() => { globalStatus.classList.add('d-none'); }, 1500);

            // Redirección directa a WhatsApp
            if (data.estado === 'FALTA' && data.rep_telefono !== '') {
                let telefono = data.rep_telefono;
                
                if (telefono.length === 9 && telefono.startsWith('9')) {
                    telefono = '593' + telefono;
                } else if (telefono.length === 10 && telefono.startsWith('09')) {
                    telefono = '593' + telefono.substring(1);
                }

                let parts = fecha.split('-');
                let fechaFormateada = parts[2] + '/' + parts[1] + '/' + parts[0];

                let texto = `📢 *NOTIFICACIÓN DE INASISTENCIA*\n\nEstimado/a *${data.rep_nombre}*,\nLe informamos que su representada *${data.alumna}* no asistió al entrenamiento programado el día de hoy, *${fechaFormateada}*.\n`;
                texto += `\nPor favor, recuerde justificar la falta con la administración.\n_Stage Dance_`;

                let urlWhatsapp = `https://api.whatsapp.com/send?phone=${telefono}&text=${encodeURIComponent(texto)}`;
                window.open(urlWhatsapp, '_blank');
            }

        } else {
            fila.style.backgroundColor = '#f8d7da';
            globalStatus.className = 'badge bg-danger-subtle text-danger px-3 py-2 rounded-pill';
            globalStatus.innerHTML = '<i class="fas fa-exclamation-circle me-1"></i> Error';
            alert('Error devuelto por el servidor: ' + data.message);
        }
    })
    .catch(error => {
        fila.style.opacity = '1';
        globalStatus.className = 'badge bg-danger-subtle text-danger px-3 py-2 rounded-pill';
        globalStatus.innerHTML = '<i class="fas fa-wifi me-1"></i> Error de Respuesta';
        console.error('LOG DE DIAGNÓSTICO DEL SERVIDOR:', error.message);
    });
}

function desbloquearFilaManual(basId) {
    const fila = document.getElementById('fila_' + basId);
    const iconoCandado = document.querySelector(`#btn_lock_${basId} i`);
    
    if (fila.classList.contains('fila-tomada-lista')) {
        fila.classList.remove('fila-tomada-lista');
        if(iconoCandado) {
            iconoCandado.classList.remove('fa-lock', 'text-warning');
            iconoCandado.classList.add('fa-lock-open', 'text-muted');
        }
    }
}

function guardarFilaAsistencialConRetraso(basId) {
    clearTimeout(timeoutsAsistencia[basId]);
    timeoutsAsistencia[basId] = setTimeout(() => {
        guardarFilaAsistencial(basId);
    }, 700);
}
</script>