<?php
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
require_once __DIR__ . '/../includes/helpers.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/auth.php';

check_role('administrador');

$user = get_logged_in_user();

$error = '';
$success = '';
$secret = '';
$qr_code_url = '';

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (isset($_POST['enable_2fa'])) {
        $secret = generate_2fa_secret();
        $qr_code_url = generate_2fa_qr_code_url($secret, $user['email']);

        // Store secret temporarily in session
        $_SESSION['temp_2fa_secret'] = $secret;
    } elseif (isset($_POST['confirm_2fa'])) {
        $code = trim($_POST['verification_code'] ?? '');
        $secret = $_SESSION['temp_2fa_secret'] ?? '';

        if (empty($secret)) {
            $error = 'Error: No se encontró el secreto 2FA. Por favor, genere uno nuevo.';
        } elseif (verify_2fa_code($secret, $code)) {
            // Enable 2FA for user
            $stmt = $pdo->prepare("UPDATE users SET 2fa_secret = ?, 2fa_enabled = TRUE WHERE id = ?");
            if ($stmt->execute([$secret, $user['id']])) {
                $success = 'Autenticación de dos factores habilitada exitosamente.';
                log_security_event('2FA_ENABLED', '2FA enabled for admin account', ['user_id' => $user['id']]);
                unset($_SESSION['temp_2fa_secret']);
                $secret = '';
                $qr_code_url = '';
            } else {
                $error = 'Error al habilitar 2FA. Por favor, inténtelo de nuevo.';
            }
        } else {
            $error = 'Código de verificación inválido.';
        }
    } elseif (isset($_POST['disable_2fa'])) {
        $stmt = $pdo->prepare("UPDATE users SET 2fa_secret = NULL, 2fa_enabled = FALSE WHERE id = ?");
        if ($stmt->execute([$user['id']])) {
            $success = 'Autenticación de dos factores deshabilitada.';
            log_security_event('2FA_DISABLED', '2FA disabled for admin account', ['user_id' => $user['id']]);
        } else {
            $error = 'Error al deshabilitar 2FA.';
        }
    }
}

$is_2fa_enabled = is_2fa_enabled($user['id']);

$page_title = 'Configuración 2FA';

$content = '
<div class="row">
    <div class="col-md-8 mx-auto">
        <div class="card card-primary">
            <div class="card-header">
                <h3 class="card-title">Autenticación de Dos Factores (2FA)</h3>
            </div>
            <div class="card-body">
                ' . ($error ? '<div class="alert alert-danger">' . $error . '</div>' : '') . '
                ' . ($success ? '<div class="alert alert-success">' . $success . '</div>' : '') . '

                <div class="mb-4">
                    <h5>Estado actual: <span class="badge ' . ($is_2fa_enabled ? 'badge-success' : 'badge-warning') . '">' . ($is_2fa_enabled ? 'Habilitado' : 'Deshabilitado') . '</span></h5>
                    <p class="text-muted">La autenticación de dos factores añade una capa extra de seguridad a su cuenta de administrador.</p>
                </div>';

if (!$is_2fa_enabled) {
    $content .= '
                <form method="post" class="mb-4">
                    <button type="submit" name="enable_2fa" class="btn btn-primary">
                        <i class="fas fa-qrcode me-2"></i>
                        Habilitar 2FA
                    </button>
                </form>';

    if (!empty($qr_code_url)) {
        $content .= '
                <div class="alert alert-info">
                    <h6><i class="fas fa-info-circle me-2"></i>Instrucciones:</h6>
                    <ol>
                        <li>Instale una aplicación de autenticación como Google Authenticator, Authy, o Microsoft Authenticator en su teléfono.</li>
                        <li>Escanee el código QR a continuación con la aplicación:</li>
                    </ol>
                </div>

                <div class="text-center mb-4">
                    <img src="https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=' . urlencode($qr_code_url) . '" alt="QR Code" class="img-fluid" />
                </div>

                <form method="post">
                    <div class="form-group">
                        <label for="verification_code">Código de verificación:</label>
                        <input type="text" class="form-control text-center" id="verification_code" name="verification_code" maxlength="6" pattern="[0-9]{6}" placeholder="000000" required />
                        <small class="form-text text-muted">Ingrese el código de 6 dígitos generado por su aplicación de autenticación.</small>
                    </div>
                    <button type="submit" name="confirm_2fa" class="btn btn-success">
                        <i class="fas fa-check me-2"></i>
                        Confirmar y Habilitar 2FA
                    </button>
                </form>';
    }
} else {
    $content .= '
                <div class="alert alert-success">
                    <i class="fas fa-shield-alt me-2"></i>
                    <strong>2FA está habilitado</strong> para su cuenta. Cada vez que inicie sesión, necesitará proporcionar un código de verificación además de su contraseña.
                </div>

                <form method="post" class="mt-4">
                    <button type="submit" name="disable_2fa" class="btn btn-warning" onclick="return confirm(\'¿Está seguro de que desea deshabilitar 2FA? Esto reducirá la seguridad de su cuenta.\')">
                        <i class="fas fa-times me-2"></i>
                        Deshabilitar 2FA
                    </button>
                </form>';
}

$content .= '
            </div>
        </div>
    </div>
</div>

<script>
// Auto-focus verification code input
document.addEventListener("DOMContentLoaded", function() {
    const codeInput = document.getElementById("verification_code");
    if (codeInput) {
        codeInput.focus();
    }
});
</script>';

include '../includes/layout.php';
?>