<?php

declare(strict_types=1);

require_once __DIR__ . '/auth.php';
require_once __DIR__ . '/db.php';

// 🎀 Active la session securisee pour lire le token CSRF et l'utilisateur 🎀
startSecureSession();

// 🎀 Evite d'afficher la page de login si l'utilisateur est deja connecte 🎀
if (isset($_SESSION['user_id'])) {
    header('Location: index.php');
    exit;
}

$error = '';
$success = '';

if (isset($_GET['created']) && $_GET['created'] === '1') {
    $success = 'Compte cree avec succes. Connecte-toi maintenant.';
}

// 🎀 Traite le formulaire de connexion uniquement en POST 🎀
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 🎀 Verifie le token CSRF pour bloquer les soumissions frauduleuses 🎀
    if (!verifyCsrfToken($_POST['csrf_token'] ?? null)) {
        $error = 'Session invalide. Recharge la page et reessaie.';
    }

    $email = strtolower(trim((string)($_POST['email'] ?? '')));
    $password = (string)($_POST['password'] ?? '');

    if ($error === '' && ($email === '' || $password === '')) {
        $error = 'Merci de remplir tous les champs.';
    } elseif ($error === '' && (!filter_var($email, FILTER_VALIDATE_EMAIL) || strlen($email) > 190)) {
        $error = 'Adresse e-mail invalide.';
    } elseif ($error === '') {
        try {
            $pdo = getPdo();
            $stmt = $pdo->prepare('SELECT id, name, email, password_hash FROM users WHERE email = :email LIMIT 1');
            $stmt->execute(['email' => $email]);
            $user = $stmt->fetch();

            // 🎀 Compare le mot de passe en clair avec le hash stocke en base 🎀
            if ($user && password_verify($password, $user['password_hash'])) {
                // 🎀 Regenere l'ID de session apres login pour reduire le risque de fixation 🎀
                session_regenerate_id(true);
                $_SESSION['user_id'] = (int)$user['id'];
                $_SESSION['user_name'] = $user['name'];
                $_SESSION['user_email'] = $user['email'];

                header('Location: index.php');
                exit;
            }

            $error = 'Email ou mot de passe incorrect.';
        } catch (Throwable $e) {
            $error = 'Connexion MySQL impossible. Verifie que MySQL MAMP est lance.';
        }
    }
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Connexion | MindGallery</title>
    <link rel="stylesheet" href="../css/style.css">
    <link rel="stylesheet" href="../css/login.css">
</head>
<body>
    <main class="auth-layout">
        <h1>Connexion</h1>

        <?php if ($error !== ''): ?>
            <!-- 🎀 Affiche la mascotte avec le message d'erreur 🎀 -->
            <div class="error-container">
                <img src="../image/mascotte.rose2.png" alt="Mascotte" class="error-mascotte">
                <p class="auth-message auth-error"><?= htmlspecialchars($error, ENT_QUOTES, 'UTF-8') ?></p>
            </div>
        <?php endif; ?>

        <?php if ($success !== ''): ?>
            <p class="auth-message auth-success"><?= htmlspecialchars($success, ENT_QUOTES, 'UTF-8') ?></p>
        <?php endif; ?>

        <form class="auth-form" action="login.php" method="post">
            <input type="hidden" name="csrf_token" value="<?= htmlspecialchars(csrfToken(), ENT_QUOTES, 'UTF-8') ?>">
            <label for="email">Adresse e-mail</label>
            <input id="email" name="email" type="email" placeholder="exemple@mail.com" required>

            <label for="password">Mot de passe</label>
            <input id="password" name="password" type="password" placeholder="********" required>

            <button type="submit">Se connecter</button>
        </form>

        <p class="auth-text">Pas encore de compte ? <a href="register.php">Creer un compte</a></p>
        <a class="auth-back" href="index.php">Retour a l'accueil</a>
    </main>
</body>
</html>
