<?php
/**
 * TechShop Perú - Iniciar Sesión
 * 
 * @package TechShop Perú
 * @version 1.0
 */

define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

// Si ya está logueado, redirigir al index
if (is_logged_in()) {
    redirect('');
}

$page_title = 'Iniciar Sesión';
$error = '';
$email_value = '';

// Procesar el formulario
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Verificar CSRF
    if (!csrf_verify()) {
        $error = 'Token de seguridad inválido. Por favor, recarga la página e inténtalo de nuevo.';
    } else {
        // Sanitizar campos
        $email    = sanitize($_POST['email'] ?? '');
        $password = $_POST['password'] ?? '';
        $email_value = $email;

        // Validaciones básicas
        if (empty($email) || empty($password)) {
            $error = 'Todos los campos son obligatorios.';
        } elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $error = 'Ingresa un correo electrónico válido.';
        } elseif (login_is_locked($email)) {
            // Anti-brute-force: bloqueo temporal tras varios intentos fallidos
            $minutos = (int) ceil(login_attempts_remaining($email) / 60);
            $error = 'Demasiados intentos fallidos. Espera ' . $minutos . ' minuto(s) antes de intentar de nuevo.';
        } else {
            // Buscar usuario por email
            try {
                $db = db();
                $stmt = $db->prepare('SELECT id, nombres, email, password, rol, activo FROM usuarios WHERE email = ? LIMIT 1');
                $stmt->execute([$email]);
                $usuario = $stmt->fetch();

                if (!$usuario) {
                    login_attempts_failed($email);
                    $error = 'El correo electrónico no está registrado.';
                } elseif (!$usuario['activo']) {
                    login_attempts_failed($email);
                    $error = 'Tu cuenta ha sido desactivada. Contacta con soporte.';
                } elseif (!password_verify($password, $usuario['password'])) {
                    login_attempts_failed($email);
                    $error = 'La contraseña es incorrecta.';
                } else {
                    // Login exitoso: limpiar intentos fallidos
                    login_attempts_reset($email);
                    // Login exitoso - regenerar sesión por seguridad
                    session_regenerate_id(true);
                    $_SESSION['usuario_id']     = $usuario['id'];
                    $_SESSION['usuario_nombre'] = $usuario['nombres'];
                    $_SESSION['usuario_rol']    = $usuario['rol'];

                    // Migrar carrito de sesión a usuario si existe
                    if (isset($_SESSION['carrito_sesion_id'])) {
                        $sesion_id = $_SESSION['carrito_sesion_id'];
                        try {
                            // Obtener items del carrito de sesión
                            $stmt_items = $db->prepare(
                                'SELECT producto_id, cantidad FROM carrito WHERE sesion_id = ?'
                            );
                            $stmt_items->execute([$sesion_id]);
                            $items = $stmt_items->fetchAll();

                            foreach ($items as $item) {
                                // Verificar si ya existe en el carrito del usuario
                                $stmt_check = $db->prepare(
                                    'SELECT id, cantidad FROM carrito WHERE usuario_id = ? AND producto_id = ?'
                                );
                                $stmt_check->execute([$usuario['id'], $item['producto_id']]);
                                $existing = $stmt_check->fetch();

                                if ($existing) {
                                    $stmt_update = $db->prepare(
                                        'UPDATE carrito SET cantidad = cantidad + ? WHERE id = ?'
                                    );
                                    $stmt_update->execute([$item['cantidad'], $existing['id']]);
                                } else {
                                    $stmt_insert = $db->prepare(
                                        'INSERT INTO carrito (usuario_id, sesion_id, producto_id, cantidad) VALUES (?, ?, ?, ?)'
                                    );
                                    $stmt_insert->execute([$usuario['id'], $sesion_id, $item['producto_id'], $item['cantidad']]);
                                }
                            }

                            // Limpiar carrito de sesión
                            $stmt_clean = $db->prepare('DELETE FROM carrito WHERE sesion_id = ?');
                            $stmt_clean->execute([$sesion_id]);
                        } catch (PDOException $e) {
                            // Silencio - no bloquear el login si falla la migración
                        }
                    }

                    csrf_regenerate();

                    // Redirigir según rol
                    $redirect_to = $_SESSION['redirect_after_login'] ?? '';
                    unset($_SESSION['redirect_after_login']);

                    if (!empty($redirect_to) && !str_contains($redirect_to, 'panel-admin-tech')) {
                        header('Location: ' . $redirect_to);
                        exit;
                    } else {
                        redirect('');
                    }
                }
            } catch (PDOException $e) {
                $error = 'Error del servidor. Por favor, inténtalo de nuevo más tarde.';
            }
        }
    }
}

require_once __DIR__ . '/../includes/header.php';
?>

<!-- ============================================
     SECCIÓN LOGIN
     ============================================ -->
<section class="py-5">
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-5 col-lg-4">
                <div class="auth-card card shadow-sm border-0">
                    <div class="card-body p-4 p-md-5">
                        <!-- Logo / Icono -->
                        <div class="text-center mb-4">
                            <div class="bg-primary bg-opacity-10 rounded-circle d-inline-flex align-items-center justify-content-center mb-3" style="width: 72px; height: 72px;">
                                <i class="bi bi-person-fill text-primary fs-1"></i>
                            </div>
                            <h1 class="h4 fw-bold mb-1">Iniciar Sesión</h1>
                            <p class="text-muted small mb-0">Accede a tu cuenta en TechShop Perú</p>
                        </div>

                        <?= flash_message() ?>

                        <?php if ($error): ?>
                            <div class="alert alert-danger d-flex align-items-center" role="alert">
                                <i class="bi bi-exclamation-triangle-fill me-2"></i>
                                <span><?= e($error) ?></span>
                            </div>
                        <?php endif; ?>

                        <form method="POST" action="" novalidate>
                            <?= csrf_field() ?>

                            <!-- Email -->
                            <div class="mb-3">
                                <label for="email" class="form-label fw-medium">Correo Electrónico</label>
                                <div class="input-group">
                                    <span class="input-group-text bg-light"><i class="bi bi-envelope"></i></span>
                                    <input type="email" class="form-control" id="email" name="email"
                                           value="<?= e($email_value) ?>"
                                           placeholder="tucorreo@ejemplo.com"
                                           required autocomplete="email" autofocus>
                                </div>
                            </div>

                            <!-- Password -->
                            <div class="mb-3">
                                <label for="password" class="form-label fw-medium">Contraseña</label>
                                <div class="input-group">
                                    <span class="input-group-text bg-light"><i class="bi bi-lock"></i></span>
                                    <input type="password" class="form-control" id="password" name="password"
                                           placeholder="Tu contraseña"
                                           required autocomplete="current-password">
                                    <button class="btn btn-outline-secondary toggle-password" type="button" 
                                            tabindex="-1" aria-label="Mostrar contraseña" data-target="#password">
                                        <i class="bi bi-eye"></i>
                                    </button>
                                </div>
                            </div>

                            <!-- Recordar / Olvidé -->
                            <div class="d-flex justify-content-between align-items-center mb-3">
                                <div class="form-check">
                                    <input class="form-check-input" type="checkbox" id="recordar" name="recordar">
                                    <label class="form-check-label small" for="recordar">Recordarme</label>
                                </div>
                                <a href="<?= url('pages/recuperar.php') ?>" class="small text-decoration-none">¿Olvidaste tu contraseña?</a>
                            </div>

                            <!-- Submit -->
                            <div class="d-grid mb-3">
                                <button type="submit" class="btn btn-primary btn-lg">
                                    <i class="bi bi-box-arrow-in-right me-2"></i> Iniciar Sesión
                                </button>
                            </div>

                            <!-- Link a registro -->
                            <div class="text-center">
                                <p class="small text-muted mb-0">
                                    ¿No tienes cuenta?
                                    <a href="<?= url('pages/registro.php') ?>" class="fw-medium text-decoration-none">
                                        Regístrate aquí
                                    </a>
                                </p>
                            </div>
                        </form>
                    </div>
                </div>

                <!-- Beneficios -->
                <div class="text-center mt-4">
                    <small class="text-muted">
                        <i class="bi bi-shield-check me-1"></i> Tus datos están protegidos
                        &nbsp;|&nbsp;
                        <i class="bi bi-lock me-1"></i> Conexión segura SSL
                    </small>
                </div>
            </div>
        </div>
    </div>
</section>

<!-- Script para toggle de contraseña -->
<script>
document.querySelector('.toggle-password')?.addEventListener('click', function () {
    var pwd = document.getElementById('password');
    var icon = this.querySelector('i');
    if (pwd.type === 'password') {
        pwd.type = 'text';
        icon.classList.replace('bi-eye', 'bi-eye-slash');
    } else {
        pwd.type = 'password';
        icon.classList.replace('bi-eye-slash', 'bi-eye');
    }
});
</script>

<?php require_once __DIR__ . '/../includes/footer.php'; ?>