<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/session_bootstrap.php';

if (!empty($_SESSION['logged_in'])) {
    if (isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
        header('Location: /administration/index.php');
    } else {
        header('Location: /home/index.php');
    }
    exit();
}

$host = "localhost";
$db = "togethere_cloud";
$user = "root";
$pass = "HasloDoSQL";

try {
    
$pdo->exec("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
} catch (PDOException $e) {
    die("Błąd połączenia z bazą danych: " . $e->getMessage());
}

$email = trim((string)($_GET['email'] ?? $_POST['email'] ?? ''));
$error = '';
$success = '';

if ($email === '' || !filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header('Location: /login/?error=' . urlencode('Link odzyskania jest nieprawidłowy.'));
    exit();
}

function loadRecoveryUser(PDO $pdo, string $email): ?array {
    $stmt = $pdo->prepare("SELECT id, username, email, disabled, account_suspended, verification_code, verification_expires FROM users WHERE email = ? LIMIT 1");
    $stmt->execute([$email]);
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    return $row ?: null;
}

$recoveryUser = loadRecoveryUser($pdo, $email);
if (!$recoveryUser) {
    header('Location: /login/?error=' . urlencode('Link odzyskania jest nieważny lub został już użyty.'));
    exit();
}

if ((int)($recoveryUser['disabled'] ?? 0) !== 1) {
    header('Location: /login/?success=' . urlencode('To konto jest już aktywne. Możesz się zalogować.'));
    exit();
}

if ((int)($recoveryUser['account_suspended'] ?? 0) === 1) {
    header('Location: /login/?error=' . urlencode('To konto zostało zablokowane przez administrację i nie może zostać odzyskane.'));
    exit();
}

if (empty($recoveryUser['verification_code']) || empty($recoveryUser['verification_expires'])) {
    header('Location: /login/?error=' . urlencode('Link odzyskania jest nieważny lub został już użyty.'));
    exit();
}

if (strtotime((string)$recoveryUser['verification_expires']) < time()) {
    $clear = $pdo->prepare("UPDATE users SET verification_code = NULL, verification_expires = NULL WHERE id = ?");
    $clear->execute([(int)$recoveryUser['id']]);
    header('Location: /login/?error=' . urlencode('Link odzyskania wygasł. Rozpocznij rejestrację ponownie, aby otrzymać nowy kod.'));
    exit();
}

if (isset($_GET['sent']) && $_GET['sent'] === '1') {
    $success = 'Wysłaliśmy kod odzyskania na ten adres email.';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $code = trim((string)($_POST['code'] ?? ''));

    if ($code === '') {
        $error = 'Kod odzyskania jest wymagany.';
    } else {
        $recoveryUser = loadRecoveryUser($pdo, $email);
        if (!$recoveryUser) {
            header('Location: /login/?error=' . urlencode('Link odzyskania jest nieważny lub został już użyty.'));
            exit();
        }

        if ((int)($recoveryUser['disabled'] ?? 0) !== 1 || empty($recoveryUser['verification_code']) || empty($recoveryUser['verification_expires'])) {
            header('Location: /login/?error=' . urlencode('Link odzyskania jest nieważny lub został już użyty.'));
            exit();
        }

        if ((int)($recoveryUser['account_suspended'] ?? 0) === 1) {
            header('Location: /login/?error=' . urlencode('To konto zostało zablokowane przez administrację i nie może zostać odzyskane.'));
            exit();
        }

        if (strtotime((string)$recoveryUser['verification_expires']) < time()) {
            $clear = $pdo->prepare("UPDATE users SET verification_code = NULL, verification_expires = NULL WHERE id = ?");
            $clear->execute([(int)$recoveryUser['id']]);
            header('Location: /login/?error=' . urlencode('Link odzyskania wygasł. Rozpocznij rejestrację ponownie, aby otrzymać nowy kod.'));
            exit();
        }

        if ((string)$recoveryUser['verification_code'] !== $code) {
            $error = 'Nieprawidłowy kod odzyskania.';
        } else {
            $activate = $pdo->prepare("UPDATE users SET disabled = 0, account_suspended = 0, email_verified = 1, verification_code = NULL, verification_expires = NULL WHERE id = ?");
            $activate->execute([(int)$recoveryUser['id']]);

            header('Location: /login/?success=' . urlencode('Konto zostało odzyskane. Możesz się zalogować.'));
            exit();
        }
    }
}
?>
<!DOCTYPE html>
<html>
<head>
    <title>Odzyskanie konta | Wspólnie</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta charset="utf-8">
    <link rel="stylesheet" href="/css/header.css" type="text/css" media="all"/>
    <link rel="stylesheet" href="/css/footer.css" type="text/css" media="all"/>
    <link href="/css/font-awesome.min.css" rel="stylesheet" type="text/css" media="all">
    <link href="/css/style.css" rel="stylesheet" type="text/css" media="all"/>
    <style>
        body { background: linear-gradient(135deg, #e3f2fd 0%, #ffffff 100%); min-height: 100vh; display: flex; flex-direction: column; }
        .verify-container { max-width: 500px; margin: 80px auto; padding: 40px; background: white; border-radius: 15px; box-shadow: 0 10px 30px rgba(100,181,246,0.2); flex: 1; }
        .error { background: #ffebee; color: #c62828; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center; border-left: 4px solid #c62828; }
        .success { background: #d4edda; color: #155724; padding: 15px; border-radius: 8px; margin-bottom: 20px; text-align: center; border-left: 4px solid #28a745; }
        .info-box { background: #e3f2fd; border-left: 4px solid #42a5f5; padding: 15px; margin-bottom: 25px; border-radius: 5px; font-size: 0.95em; color: #2c3e50; }
        input[type="text"] { width: 100%; max-width: 300px; padding: 15px; border: 2px solid #e3f2fd; border-radius: 8px; font-size: 24px; letter-spacing: 8px; text-align: center; font-weight: bold; color: #007BFF; display:block; margin: 0 auto 20px auto; }
        button { width: 100%; max-width: 300px; padding: 15px; background: linear-gradient(135deg, #007BFF 0%, #0056b3 100%); color:white; border:none; border-radius:8px; font-size:1.1em; font-weight:600; cursor:pointer; display:block; margin:0 auto; }
        h1 { color: #1976d2; text-align:center; margin-bottom: 10px; }
        .subtitle { text-align:center; color:#7f8c8d; margin-bottom: 30px; }
    </style>
</head>
<body>
    <?php include __DIR__ . '/../global/navNoLogined.php'; ?>

    <div class="verify-container">
        <h1>♻️ Odzyskanie konta</h1>
        <p class="subtitle">Wpisz 6-cyfrowy kod wysłany na Twój email</p>

        <?php if ($error): ?>
            <div class="error"><?= htmlspecialchars($error) ?></div>
        <?php endif; ?>

        <?php if ($success): ?>
            <div class="success"><?= htmlspecialchars($success) ?></div>
        <?php endif; ?>

        <div class="info-box">
            <strong>📧 Email:</strong> <?= htmlspecialchars($email) ?><br>
            <strong>ℹ️ Uwaga:</strong> jeśli nie chcesz odzyskiwać tego konta, musisz użyć innego adresu email do nowej rejestracji.
        </div>

        <form method="POST" action="/login/recover_account.php?email=<?= urlencode($email) ?>">
            <input type="hidden" name="email" value="<?= htmlspecialchars($email) ?>">
            <input type="text" name="code" maxlength="6" pattern="[0-9]{6}" placeholder="000000" required autofocus>
            <button type="submit">Odzyskaj konto</button>
        </form>
    </div>

    <?php include __DIR__ . '/../global/footerNoLogined.php'; ?>
</body>
</html>

