<?php
session_start();

// =================================================================
// BLOQUE 1: Verificación de Sesión y Roles (SEGURIDAD CRÍTICA)
// =================================================================

// 1. Verificar si el usuario ha iniciado sesión
if (!isset($_SESSION['autenticado']) || $_SESSION['autenticado'] !== true) {
    header('Location: login.php'); // Redirige al login si no está logueado
    exit;
}

// Asegúrate de que tu login.php guarda el nombre de usuario. Si no existe, usa 'Sistema'.
$usuario_actual = $_SESSION['usuario'] ?? 'Sistema';

// 2. Definir los roles permitidos para ver esta página
$roles_permitidos = ['admin', 'director'];

// 3. Verificar que el rol del usuario esté permitido
if (!in_array($_SESSION['rol'], $roles_permitidos)) {
    http_response_code(403); // Error 403: Prohibido
    die("<h1>Acceso Denegado (403)</h1><p>Tu rol ({$_SESSION['rol']}) no tiene permiso para ver la gestión de reclamos.</p>");
}

// =================================================================
// BLOQUE 2: Conexión y Configuración
// =================================================================

$db_host = 'localhost:3306';
$db_user = 'ssrlaagu_contactos';
$db_pass = 'Redhat2025...'; // ¡Asegúrate que esta contraseña sea exacta!
$db_name = 'ssrlaagu_contactos';

$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
if ($mysqli->connect_error) {
    die("<div style='color:red;'>Error conexión BD: " . htmlspecialchars($mysqli->connect_error) . "</div>");
}

// =================================================================
// BLOQUE 3: Procesar Acciones POST (Actualizar Estado y Trazabilidad)
// =================================================================

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $id = intval($_POST['id'] ?? 0);
    $accion = $_POST['accion'] ?? '';
    
    // Valores de Trazabilidad
    $usuario_gestion = $usuario_actual; 
    $fecha_gestion = date('Y-m-d H:i:s');
    $mensaje_log = '';

    // --- 3.1: Actualizar estado con Trazabilidad ---
    if ($accion === 'actualizar_estado' && isset($_POST['nuevo_estado'])) {
        $nuevo_estado = $_POST['nuevo_estado'];
        $estados_validos = ['No gestionado', 'Gestionado']; 

        if (in_array($nuevo_estado, $estados_validos)) {
            // Sentencia con campos de Trazabilidad
            $stmt = $mysqli->prepare("UPDATE contactos SET estado=?, ultima_gestion_por=?, fecha_ultima_gestion=? WHERE id=?");
            if ($stmt) {
                $stmt->bind_param('sssi', $nuevo_estado, $usuario_gestion, $fecha_gestion, $id);
                $stmt->execute();
                $stmt->close();
                $mensaje_log = "✅ Estado del reclamo #$id actualizado a $nuevo_estado por $usuario_gestion.";
            }
        } else {
            $mensaje_log = "⚠️ Estado no válido.";
        }
    }
    
    // --- 3.2: Subir PDF con Trazabilidad ---
    elseif ($accion === 'subir_pdf' && isset($_FILES['archivo']) && $_FILES['archivo']['error'] === 0) {
        $dir = __DIR__ . '/respuestas/';
        if (!is_dir($dir)) mkdir($dir, 0755, true);

        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $tipo = finfo_file($finfo, $_FILES['archivo']['tmp_name']);
        finfo_close($finfo);
        
        if ($tipo === 'application/pdf') {
            $ext = pathinfo($_FILES['archivo']['name'], PATHINFO_EXTENSION);
            $nombreArchivo = "reclamo_{$id}_" . time() . '.' . $ext;
            $rutaArchivo = $dir . $nombreArchivo;

            if (move_uploaded_file($_FILES['archivo']['tmp_name'], $rutaArchivo)) {
                // Sentencia con campos de Trazabilidad
                $stmt = $mysqli->prepare("UPDATE contactos SET respuesta_pdf=?, ultima_gestion_por=?, fecha_ultima_gestion=? WHERE id=?");
                if ($stmt) {
                    $stmt->bind_param('sssi', $nombreArchivo, $usuario_gestion, $fecha_gestion, $id);
                    $stmt->execute();
                    $stmt->close();
                    $mensaje_log = "📁 PDF de respuesta para reclamo #$id subido por $usuario_gestion.";
                }
            } else {
                 $mensaje_log = "Error al mover el archivo subido.";
            }
        } else {
            $mensaje_log = "¡Solo se permiten archivos PDF!";
        }
    }
    
    // Redirigir y guardar mensaje en sesión (Patrón PRG)
    if (!empty($mensaje_log)) {
        $_SESSION['mensaje_log'] = $mensaje_log;
    }
    header('Location: gestor_contactos.php?view=' . ($_GET['view'] ?? 'pending')); // Mantiene el filtro actual
    exit;
}

// =================================================================
// BLOQUE 4: Obtener Datos y Filtro Dinámico (NUEVO)
// =================================================================

$filter_view = $_GET['view'] ?? 'pending'; // 'pending' por defecto

if ($filter_view === 'all') {
    // 1. Historial Completo: Muestra TODOS los contactos.
    $query = "SELECT * FROM contactos ORDER BY fecha DESC";
    $titulo_tabla = "Historial Completo de Contactos (Incluye Gestionados)";
} else {
    // 2. Pendientes (Default): Muestra todos excepto los 'Gestionado'.
    // Esto incluye 'No gestionado' y cualquier otro estado no 'Gestionado'.
    $query = "SELECT * FROM contactos WHERE estado != 'Gestionado' ORDER BY fecha DESC";
    $titulo_tabla = "Contactos Pendientes de Gestión";
}

$result = $mysqli->query($query);
?>

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8" />
    <title>Gestión de Reclamos - SSR La Aguada</title>
    <style>
        /* Estilos CSS */
        body { font-family: Arial, sans-serif; padding: 20px; }
        table { width: 100%; border-collapse: collapse; margin-top: 15px;}
        table, th, td { border: 1px solid #ddd; }
        th, td { padding: 8px; text-align: left; vertical-align: top; }
        .mensaje-log { padding: 10px; margin-bottom: 10px; border-radius: 5px; font-weight: bold; background-color: #e6ffe6; border: 1px solid #b3ffb3; }
        
        /* Estilos para Alertas de Antigüedad */
        .alerta-roja { 
            background-color: #ffdddd !important; /* Fondo rojo pálido */
            border-left: 5px solid red;
            font-weight: bold;
        }
        .alerta-amarilla {
            background-color: #fffacd !important; /* Fondo amarillo pálido */
            border-left: 5px solid gold;
        }
        .filter-btn {
            padding: 8px 12px;
            color: white;
            border-radius: 4px;
            text-decoration: none;
            display: inline-block;
            margin-right: 5px;
        }
    </style>
</head>
<body>

<h1>Gestión de Reclamos Recibidos</h1>

<div style="background-color: #e3f2fd; border-left: 5px solid #2196f3; padding: 10px; margin-bottom: 20px;">
    <strong>NOTA REGLAMENTARIA (SISS):</strong> El plazo máximo de respuesta de reclamos y contactos por norma es de **10 días hábiles**. 
    El color rojo indica que este plazo está próximo a vencer (más de 4 días naturales sin gestión).
</div>

<p>
    Usuario: <b><?php echo htmlspecialchars($usuario_actual); ?></b> | 
    Rol: <b><?php echo htmlspecialchars($_SESSION['rol']); ?></b> 
    <?php if ($_SESSION['rol'] === 'admin'): ?>
        | <a href='gestor_usuarios.php'>Gestionar Usuarios (Admin)</a>
    <?php endif; ?>
    | <a href='logout.php'>Cerrar sesión</a>
</p>

<?php 
// Mostrar el mensaje de log (desde la sesión)
if (isset($_SESSION['mensaje_log'])) {
    echo "<div class='mensaje-log'>{$_SESSION['mensaje_log']}</div>";
    unset($_SESSION['mensaje_log']);
}
?>

<div style="margin-bottom: 15px;">
    <h2><?php echo $titulo_tabla; ?></h2>
    <a href="?view=pending" class="filter-btn" style="background: <?php echo ($filter_view === 'pending') ? '#ff9800' : '#ffa726'; ?>;">Ver Pendientes</a>
    <a href="?view=all" class="filter-btn" style="background: <?php echo ($filter_view === 'all') ? '#607d8b' : '#78909c'; ?>;">Ver Historial Completo</a>
</div>


<table>
<thead>
<tr>
    <th>ID Atención</th>
    <th>Nombre</th>
    <th>Email</th>
    <th>Tipo</th>
    <th>Fecha</th>
    <th>Mensaje</th>
    <th>Días</th>
    <th>Estado</th>
    <th>Respuesta PDF</th>
    <th>Última Gestión Por</th> <th>Fecha Gestión</th> <th>Gestión Estado</th>
    <th>Subir Respuesta PDF</th>
</tr>
</thead>
<tbody>
<?php
$popup_mostrado = false;
if ($result && $result->num_rows > 0) {
    while ($fila = $result->fetch_assoc()) {
        $fecha_reclamo = new DateTime($fila['fecha']);
        $dias = (new DateTime())->diff($fecha_reclamo)->days;
        $pdfLink = $fila['respuesta_pdf'] ? "<a href='respuestas/" . htmlspecialchars($fila['respuesta_pdf']) . "' target='_blank'>Ver PDF</a>" : "No disponible";
        
        $claseAlerta = '';
        
        // LÓGICA DE ALERTA DE 10 DÍAS HÁBILES
        if ($fila['estado'] === 'No gestionado') {
            if ($dias >= 4) { // 4 días naturales para mayor seguridad
                $claseAlerta = 'alerta-roja'; 
                if (!$popup_mostrado && $filter_view === 'pending') {
                    // Mostrar Pop-up solo una vez y solo en la vista 'Pendientes'
                    echo '<script>alert("⚠️ ¡ATENCIÓN! Hay reclamos No Gestionados con más de 4 días hábiles pendientes de revisión.");</script>';
                    $popup_mostrado = true; 
                }
            } elseif ($dias >= 6) {
                $claseAlerta = 'alerta-amarilla'; // Alerta temprana
            }
        }

        echo "<tr class='estado-" . strtolower(str_replace(' ', '-', $fila['estado'])) . " $claseAlerta'>";
        echo "<td>" . htmlspecialchars($fila['atencion']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['nombre']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['email']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['tipo']) . "</td>";
        echo "<td>" . htmlspecialchars($fila['fecha']) . "</td>";
        echo "<td>" . nl2br(htmlspecialchars($fila['mensaje'])) . "</td>";
        echo "<td>$dias</td>";
        echo "<td>" . htmlspecialchars($fila['estado']) . "</td>";
        echo "<td>$pdfLink</td>";
        echo "<td>" . htmlspecialchars($fila['ultima_gestion_por'] ?? 'N/A') . "</td>"; // Trazabilidad
        echo "<td>" . htmlspecialchars($fila['fecha_ultima_gestion'] ?? 'N/A') . "</td>"; // Trazabilidad
        
        // La gestión de estado y subida de PDF solo deben ser visibles para roles autorizados
        echo "<td>
            <form method='post' style='display:inline; margin-bottom:4px;'>
                <input type='hidden' name='id' value='" . intval($fila['id']) . "' />
                <input type='hidden' name='accion' value='actualizar_estado' />
                <select name='nuevo_estado'>
                    <option value='No gestionado'" . ($fila['estado'] == 'No gestionado' ? ' selected' : '') . ">No gestionado</option>
                    <option value='Gestionado'" . ($fila['estado'] == 'Gestionado' ? ' selected' : '') . ">Gestionado</option>
                </select>
                <button type='submit'>Guardar</button>
            </form>
        </td>";
        echo "<td>
            <form method='post' enctype='multipart/form-data' style='display:inline;'>
                <input type='hidden' name='id' value='" . intval($fila['id']) . "' />
                <input type='hidden' name='accion' value='subir_pdf' />
                <input type='file' name='archivo' accept='application/pdf' />
                <button type='submit'>Subir</button>
            </form>
        </td>";
        echo "</tr>";
    }
} else {
    $mensaje_vacio = ($filter_view === 'all') ? "No hay reclamos registrados." : "¡No hay reclamos pendientes! (Todos están 'Gestionado').";
    echo "<tr><td colspan='13'>$mensaje_vacio</td></tr>";
}
?>
</tbody>
</table>

</body>
</html>

<?php
$mysqli->close();
?>