<?php
// Habilitar reporte de errores para debugging (solo en desarrollo)
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 1);

// Incluir verificación de administrador (usa tu archivo existente)
include 'verificar_admin.php';

// Función para enviar respuesta JSON
function sendJsonResponse($data, $httpCode = 200) {
    http_response_code($httpCode);
    header('Content-Type: application/json; charset=utf-8');
    echo json_encode($data, JSON_UNESCAPED_UNICODE);
    exit;
}

// Función para logging de errores
function logError($message) {
    error_log("[SIAPOL ERROR] " . date('Y-m-d H:i:s') . " - " . $message);
}

try {
    // La verificación ya se hizo en verificar_admin.php
    // Solo agregamos una verificación adicional por seguridad
    if (!isset($_SESSION['usuario']) || $_SESSION['tipo_acceso'] !== 'ADMIN') {
        logError("Error de verificación admin para usuario: " . ($_SESSION['usuario'] ?? 'no_definido'));
        sendJsonResponse(['error' => 'Acceso no autorizado'], 403);
    }

    $host = "localhost";
    $user = "ascensof_Admin1";
    $password = "3DS0NCH4115H4CK3R+";
    $db = "ascensof_BDsimulador";
    
    //$host = "localhost";
    //$user = "root";
    //$password = "";
    //$db = "siapolco_BDsimulador";

    // Intentar conexión a base de datos
    $conn = new mysqli($host, $user, $password, $db);
    
    if ($conn->connect_error) {
        logError("Error de conexión MySQL: " . $conn->connect_error);
        sendJsonResponse(['error' => 'Error de conexión a base de datos'], 500);
    }

    // Configurar charset
    $conn->set_charset("utf8");

    // Inicializar array de estadísticas
    $estadisticas = [
        'total_usuarios' => 0,
        'total_preguntas' => 0,
        'total_materias' => 0,
        'total_accesos' => 0,
        'usuarios_por_acceso' => [],
        'preguntas_por_materia' => [],
        'registros_por_mes' => [],
        'estado_usuarios' => [],
        'materias_por_acceso' => [],
        'ultima_actualizacion' => date('Y-m-d H:i:s')
    ];

    // 1. Total de usuarios
    $sql = "SELECT COUNT(*) as total FROM Usuarios";
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query usuarios: " . $conn->error);
        throw new Exception("Error al consultar usuarios: " . $conn->error);
    }
    $row = $result->fetch_assoc();
    $estadisticas['total_usuarios'] = (int)$row['total'];

    // 2. Total de preguntas
    $sql = "SELECT COUNT(*) as total FROM Preguntas";
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query preguntas: " . $conn->error);
        throw new Exception("Error al consultar preguntas: " . $conn->error);
    }
    $row = $result->fetch_assoc();
    $estadisticas['total_preguntas'] = (int)$row['total'];

    // 3. Total de materias
    $sql = "SELECT COUNT(*) as total FROM Materias";
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query materias: " . $conn->error);
        throw new Exception("Error al consultar materias: " . $conn->error);
    }
    $row = $result->fetch_assoc();
    $estadisticas['total_materias'] = (int)$row['total'];

    // 4. Total de tipos de acceso
    $sql = "SELECT COUNT(*) as total FROM Accesos";
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query accesos: " . $conn->error);
        throw new Exception("Error al consultar accesos: " . $conn->error);
    }
    $row = $result->fetch_assoc();
    $estadisticas['total_accesos'] = (int)$row['total'];

    // 5. Usuarios por tipo de acceso
    $sql = "SELECT 
                a.cod_acceso,
                a.tipo_acceso,
                COUNT(u.Id) as total_usuarios,
                SUM(CASE WHEN u.habilitado = 1 THEN 1 ELSE 0 END) as usuarios_habilitados,
                SUM(CASE WHEN u.habilitado = 0 THEN 1 ELSE 0 END) as usuarios_deshabilitados
            FROM Accesos a
            LEFT JOIN Usuarios u ON a.cod_acceso = u.acceso_id
            GROUP BY a.Id, a.cod_acceso, a.tipo_acceso
            ORDER BY a.cod_acceso";
    
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query usuarios por acceso: " . $conn->error);
        throw new Exception("Error al consultar usuarios por acceso: " . $conn->error);
    }
    
    while ($row = $result->fetch_assoc()) {
        $estadisticas['usuarios_por_acceso'][] = [
            'cod_acceso' => $row['cod_acceso'] ?: '-',
            'tipo_acceso' => $row['tipo_acceso'] ?: '-',
            'total_usuarios' => (int)($row['total_usuarios'] ?: 0),
            'usuarios_habilitados' => (int)($row['usuarios_habilitados'] ?: 0),
            'usuarios_deshabilitados' => (int)($row['usuarios_deshabilitados'] ?: 0)
        ];
    }

    // 6. Preguntas por materia
    $sql = "SELECT 
                m.cod_materia,
                m.nom_materia,
                m.cant_pregunta,
                m.acceso_id,
                COUNT(p.Id) as total_preguntas_reales
            FROM Materias m
            LEFT JOIN Preguntas p ON m.cod_materia = p.materia_id
            GROUP BY m.Id, m.cod_materia, m.nom_materia, m.cant_pregunta, m.acceso_id
            ORDER BY m.cod_materia";
    
    $result = $conn->query($sql);
    if ($result === false) {
        logError("Error en query preguntas por materia: " . $conn->error);
        throw new Exception("Error al consultar preguntas por materia: " . $conn->error);
    }
    
    while ($row = $result->fetch_assoc()) {
        $estadisticas['preguntas_por_materia'][] = [
            'cod_materia' => $row['cod_materia'] ?: '-',
            'nom_materia' => $row['nom_materia'] ?: '-',
            'cant_pregunta' => (int)($row['cant_pregunta'] ?: 0),
            'total_preguntas_reales' => (int)($row['total_preguntas_reales'] ?: 0),
            'acceso_id' => $row['acceso_id'] ?: '-'
        ];
    }

    // 7. Eliminar consulta de fecha_registro ya que no existe esa columna
    // Los usuarios no tienen fecha de registro en tu estructura actual

    // 8. Estado de usuarios (habilitados vs deshabilitados)
    $sql = "SELECT 
                habilitado,
                COUNT(*) as cantidad
            FROM Usuarios 
            GROUP BY habilitado";
    
    $result = $conn->query($sql);
    if ($result !== false) {
        while ($row = $result->fetch_assoc()) {
            $estadisticas['estado_usuarios'][] = [
                'estado' => $row['habilitado'] == 1 ? 'Habilitados' : 'Deshabilitados',
                'cantidad' => (int)$row['cantidad']
            ];
        }
    }

    // 9. Materias por tipo de acceso
    $sql = "SELECT 
                acceso_id,
                COUNT(*) as total_materias
            FROM Materias 
            GROUP BY acceso_id
            ORDER BY acceso_id";
    
    $result = $conn->query($sql);
    if ($result !== false) {
        while ($row = $result->fetch_assoc()) {
            $estadisticas['materias_por_acceso'][] = [
                'acceso_id' => $row['acceso_id'],
                'total_materias' => (int)$row['total_materias']
            ];
        }
    }

    // Cerrar conexión
    $conn->close();
    
    // Enviar respuesta exitosa
    sendJsonResponse($estadisticas, 200);

} catch (Exception $e) {
    logError("Excepción capturada: " . $e->getMessage() . " en " . $e->getFile() . ":" . $e->getLine());
    
    // Cerrar conexión si existe
    if (isset($conn) && $conn) {
        $conn->close();
    }
    
    sendJsonResponse([
        'error' => 'Error interno del servidor: ' . $e->getMessage(),
        'details' => 'Revisa los logs del servidor para más información'
    ], 500);
}
?>