<?php
require_once __DIR__ . '/../helpers/session.php';
require_once __DIR__ . '/../../config/database.php';
require_once __DIR__ . '/../helpers/crypto.php';

function index()
{
    // Asegúrate de tener conexión
    $conn = getConnection();

    // CORRIGIDO: Cambiar id_usuario por usuario_id (consistente con login.php)
    if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
        die("Usuario no autenticado.");
    }

    $id_usuario = $_SESSION['usuario_id']; // CORRIGIDO

    // Obtener correos
    $correos = obtenerCorreos($conn, $id_usuario);

    // Cargar vista y pasar datos
    include __DIR__ . '/../../views/seguridad/dashboard_seguridad.php';
}

function opciones()
{
    $conn = getConnection();
    $id_usuario = $_SESSION['usuario_id'] ?? null;

    // Asegúrate de que el usuario está autenticado
    if (!$id_usuario) {
        die("Usuario no autenticado.");
    }

    // Obtener correos
    $correos = obtenerCorreos($conn, $id_usuario);

    include __DIR__ . '/../../views/seguridad/agregar.php';
}

// Función para obtener el estado actual (para mostrar en la vista)
function obtenerEstadoDosFactores()
{
    $conn = getConnection();
    
    // CORRIGIDO: Cambiar id_usuario por usuario_id
    $id_usuario = $_SESSION['usuario_id'] ?? null;
    if (!$id_usuario) {
        return 0; // valor por defecto si no hay sesión
    }

    $sql_dos_factores = "SELECT dos_factores FROM usuarios_sistema WHERE id_usuario = ?";
    $params = [$id_usuario];
    $stmt_dos_factores = sqlsrv_prepare($conn, $sql_dos_factores, $params);

    $dos_factores_estado = 0; // valor por defecto

    if ($stmt_dos_factores && sqlsrv_execute($stmt_dos_factores)) {
        if ($row = sqlsrv_fetch_array($stmt_dos_factores, SQLSRV_FETCH_ASSOC)) {
            $dos_factores_estado = (int)$row['dos_factores'];
        }
    }

    sqlsrv_free_stmt($stmt_dos_factores);
    sqlsrv_close($conn);
    
    return $dos_factores_estado;
}

// Función para actualizar el estado (cuando se envía el formulario)
function autenticacionDosFactores()
{
    // Solo ejecutar si es una petición POST
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        header('Location: /IMPORTADORES/seguridad/index');
        exit;
    }

    $conn = getConnection();

    // CORRIGIDO: Cambiar id_usuario por usuario_id
    $id_usuario = $_SESSION['usuario_id'] ?? null;
    if (!$id_usuario) {
        die("No autorizado - Sesión inválida");
    }

    // CORRIGIDO: Verificar también que no esté pendiente de confirmación
    if ($_SESSION['pendiente_confirmacion'] ?? false) {
        die("No autorizado - Confirmación pendiente");
    }

    $dos_factores = isset($_POST['dos_factores']) ? 1 : 0;

    $sql = "UPDATE usuarios_sistema SET dos_factores = ? WHERE id_usuario = ?";
    $params = [$dos_factores, $id_usuario];
    $stmt = sqlsrv_prepare($conn, $sql, $params);

    if (!$stmt) {
        die("Error en la preparación: " . print_r(sqlsrv_errors(), true));
    }

    $result = sqlsrv_execute($stmt);

    if ($result === false) {
        die("Error al actualizar: " . print_r(sqlsrv_errors(), true));
    }

    sqlsrv_free_stmt($stmt);
    sqlsrv_close($conn);

    // MEJORADO: Agregar mensaje de éxito
    $_SESSION['config_success'] = $dos_factores ? 
        'Autenticación de dos factores activada correctamente.' : 
        'Autenticación de dos factores desactivada correctamente.';

    header('Location: /IMPORTADORES/seguridad/index');
    exit;
}

function correoExtra()
{
    // CORRIGIDO: Cambiar id_usuario por usuario_id y verificar confirmación
    if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
        echo "Error: no se ha iniciado sesión o sesión incompleta.";
        exit;
    }

    $id_usuario = $_SESSION['usuario_id']; // CORRIGIDO
    $conn = getConnection();

    $sql_check = "SELECT COUNT(*) AS total FROM correo_extra WHERE id_usuario = ?";
    $stmt_check = sqlsrv_query($conn, $sql_check, [$id_usuario]);
    $row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);

    if ($row['total'] > 0) {
        echo "Ya tienes un correo adicional registrado.";
        return;
    }

    $correo = $_POST['email-extra'] ?? '';

    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
        echo "Correo inválido.";
        return;
    }

    $query = "INSERT INTO correo_extra (id_usuario, correo) VALUES (?, ?)";
    $stmt = sqlsrv_prepare($conn, $query, [$id_usuario, $correo]);

    if ($stmt && sqlsrv_execute($stmt)) {
        $_SESSION['config_success'] = 'Correo adicional registrado correctamente.';
        header('Location: /IMPORTADORES/seguridad/index');
        exit;
    } else {
        echo "Error al registrar el correo extra.";
    }
}

function modificarCorreoExtra()
{
    if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
        echo "Error: no se ha iniciado sesión o sesión incompleta.";
        exit;
    }

    $id_usuario = $_SESSION['usuario_id'];
    $conn = getConnection();

    $correo = $_POST['email-extra'] ?? '';

    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
        echo "Correo inválido.";
        return;
    }

    $query = "UPDATE correo_extra SET correo = ? WHERE id_usuario = ?";
    $stmt = sqlsrv_prepare($conn, $query, [$correo, $id_usuario]);

    if ($stmt && sqlsrv_execute($stmt)) {
        $_SESSION['config_success'] = 'Correo adicional actualizado correctamente.';
        header('Location: /IMPORTADORES/seguridad/index');
        exit;
    } else {
        echo "Error al actualizar el correo extra.";
    }
}

function correoRespaldo()
{
    // CORRIGIDO: Cambiar id_usuario por usuario_id y verificar confirmación
    if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
        echo "Error: no se ha iniciado sesión o sesión incompleta.";
        exit;
    }

    $id_usuario = $_SESSION['usuario_id']; // CORRIGIDO
    $conn = getConnection();

    $sql_check = "SELECT COUNT(*) AS total FROM correo_respaldo WHERE id_usuario = ?";
    $stmt_check = sqlsrv_query($conn, $sql_check, [$id_usuario]);
    $row = sqlsrv_fetch_array($stmt_check, SQLSRV_FETCH_ASSOC);

    if ($row['total'] > 0) {
        echo "Ya tienes un correo de respaldo registrado.";
        return;
    }

    $correo = $_POST['email-respaldo'] ?? '';

    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
        echo "Correo inválido.";
        return;
    }

    $query = "INSERT INTO correo_respaldo (id_usuario, correo) VALUES (?, ?)";
    $stmt = sqlsrv_prepare($conn, $query, [$id_usuario, $correo]);

    if ($stmt && sqlsrv_execute($stmt)) {
        $_SESSION['config_success'] = 'Correo de respaldo registrado correctamente.';
        header('Location: /IMPORTADORES/seguridad/index');
        exit;
    } else {
        echo "Error al registrar el correo de respaldo.";
    }
}

function modificarCorreoRspaldo()
{
    if (!isset($_SESSION['usuario_id']) || ($_SESSION['pendiente_confirmacion'] ?? false)) {
        echo "Error: no se ha iniciado sesión o sesión incompleta.";
        exit;
    }

    $id_usuario = $_SESSION['usuario_id'];
    $conn = getConnection();

    $correo = $_POST['email-respaldo'] ?? '';

    if (!filter_var($correo, FILTER_VALIDATE_EMAIL)) {
        echo "Correo inválido.";
        return;
    }

    $query = "UPDATE correo_respaldo SET correo = ? WHERE id_usuario = ?";
    $stmt = sqlsrv_prepare($conn, $query, [$correo, $id_usuario]);

    if ($stmt && sqlsrv_execute($stmt)) {
        $_SESSION['config_success'] = 'Correo de respaldo actualizado correctamente.';
        header('Location: /IMPORTADORES/seguridad/index');
        exit;
    } else {
        echo "Error al actualizar el correo de respaldo.";
    }
}

function obtenerCorreos($conn, $id_usuario)
{
    $correos = [
        'dos_factores' => 0,
        'correo_extra' => '',
        'correo_respaldo' => ''
    ];

    // Obtener estado dos_factores
    $sql_dos_factores = "SELECT dos_factores FROM usuarios_sistema WHERE id_usuario = ?";
    $params = [$id_usuario];
    $stmt_dos_factores = sqlsrv_prepare($conn, $sql_dos_factores, $params);
    if ($stmt_dos_factores && sqlsrv_execute($stmt_dos_factores)) {
        if ($row = sqlsrv_fetch_array($stmt_dos_factores, SQLSRV_FETCH_ASSOC)) {
            $correos['dos_factores'] = (int)$row['dos_factores']; // MEJORADO: Cast a int
        }
    }

    // Obtener correo_extra
    $sql_extra = "SELECT correo FROM correo_extra WHERE id_usuario = ?";
    $stmt_extra = sqlsrv_prepare($conn, $sql_extra, $params);
    if ($stmt_extra && sqlsrv_execute($stmt_extra)) {
        if ($row = sqlsrv_fetch_array($stmt_extra, SQLSRV_FETCH_ASSOC)) {
            $correos['correo_extra'] = $row['correo'];
        }
    }

    // Obtener correo_respaldo
    $sql_respaldo = "SELECT correo FROM correo_respaldo WHERE id_usuario = ?";
    $stmt_respaldo = sqlsrv_prepare($conn, $sql_respaldo, $params);
    if ($stmt_respaldo && sqlsrv_execute($stmt_respaldo)) {
        if ($row = sqlsrv_fetch_array($stmt_respaldo, SQLSRV_FETCH_ASSOC)) {
            $correos['correo_respaldo'] = $row['correo'];
        }
    }

    return $correos;
}