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

$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());
}

if ($_SERVER["REQUEST_METHOD"] !== "POST") {
    header('Location: /login/?error=' . urlencode('Nieprawidłowa metoda żądania'));
    exit();
}

$username = trim($_POST["username"] ?? "");
$email = trim($_POST["email"] ?? "");
$password = $_POST["password"] ?? "";
$firstname = trim($_POST["firstname"] ?? "");
$lastname = trim($_POST["lastname"] ?? "");
$newsletter = isset($_POST["marketing"]) ? 1 : 0;

if (empty($username) || empty($email) || empty($password)) {
    header('Location: /login/?error=' . urlencode('Wszystkie pola są wymagane'));
    exit();
}

if (!preg_match('/^[A-Za-z0-9_&!]{1,20}$/', $username)) {
    header('Location: /login/?error=' . urlencode('Nazwa użytkownika może zawierać tylko litery angielskie, cyfry oraz znaki _ & ! i maksymalnie 20 znaków'));
    exit();
}

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    header('Location: /login/?error=' . urlencode('Nieprawidłowy adres email'));
    exit();
}

// Walidacja hasła
function validatePassword($password) {
    $errors = [];
    
    if (strlen($password) < 8) {
        $errors[] = "Hasło musi mieć minimum 8 znaków";
    }
    if (!preg_match('/[A-Z]/', $password)) {
        $errors[] = "Hasło musi zawierać wielką literę";
    }
    if (!preg_match('/[a-z]/', $password)) {
        $errors[] = "Hasło musi zawierać małą literę";
    }
    if (!preg_match('/[0-9]/', $password)) {
        $errors[] = "Hasło musi zawierać cyfrę";
    }
    
    return $errors;
}

$password_errors = validatePassword($password);
if (!empty($password_errors)) {
    header('Location: /login/?error=' . urlencode(implode(", ", $password_errors)));
    exit();
}

// Sprawdzenie emaila (obsługa odzyskania konta po samodzielnym usunięciu)
$emailCheck = $pdo->prepare("SELECT id, username, disabled, account_suspended FROM users WHERE email = ? LIMIT 1");
$emailCheck->execute([$email]);
$emailUser = $emailCheck->fetch(PDO::FETCH_ASSOC);

if ($emailUser) {
    $isDisabled = (int)($emailUser['disabled'] ?? 0) === 1;
    $isAdminBlocked = (int)($emailUser['account_suspended'] ?? 0) === 1;

    if ($isDisabled) {
        if ($isAdminBlocked) {
            header('Location: /login/?error=' . urlencode('To konto zostało zablokowane przez administrację. Rejestracja na ten adres email nie jest możliwa.'));
            exit();
        }

        // Konto samodzielnie usunięte - uruchamiamy odzyskanie kodem na ten sam email
        $recovery_code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);
        $recovery_expires = date('Y-m-d H:i:s', strtotime('+15 minutes'));

        $updateRecovery = $pdo->prepare("UPDATE users SET verification_code = ?, verification_expires = ? WHERE id = ?");
        $updateRecovery->execute([$recovery_code, $recovery_expires, (int)$emailUser['id']]);

        require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/smtp_helper.php';

        $subject = "Kod odzyskania konta - Wspólnie";
        $message = "
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: 'Lato', Arial, sans-serif; background: #f0f8ff; padding: 20px; }
        .container { max-width: 600px; margin: 0 auto; background: white; padding: 40px; border-radius: 15px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
        h1 { color: #1976d2; text-align: center; }
        .code { font-size: 32px; font-weight: bold; color: #007BFF; text-align: center; letter-spacing: 5px; margin: 30px 0; padding: 20px; background: #e3f2fd; border-radius: 10px; }
        p { color: #2c3e50; line-height: 1.6; }
        .footer { margin-top: 30px; padding-top: 20px; border-top: 2px solid #e3f2fd; text-align: center; color: #7f8c8d; font-size: 14px; }
    </style>
</head>
<body>
    <div class='container'>
        <h1>♻️ Odzyskanie konta</h1>
        <p>Wykryliśmy konto wcześniej usunięte dla tego adresu email.</p>
        <p>Twój kod odzyskania to:</p>
        <div class='code'>$recovery_code</div>
        <p>Kod jest ważny przez <strong>15 minut</strong>.</p>
        <p style='text-align: center;'><a href='https://togethere.cloud/login/recover_account.php?email=" . urlencode($email) . "' style='display: inline-block; padding: 15px 30px; background: #007BFF; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;'>Odzyskaj konto</a></p>
        <p>Jeśli nie chcesz odzyskiwać tego konta i chcesz utworzyć nowe, użyj innego adresu email.</p>
        <div class='footer'>
            <p>&copy; 2026 Wspólnie. Wszelkie prawa zastrzeżone.</p>
        </div>
    </div>
</body>
</html>
";

        sendEmailSMTP($email, $subject, $message);

        header('Location: /login/recover_account.php?email=' . urlencode($email) . '&sent=1');
        exit();
    }

    header('Location: /login/?error=' . urlencode('Użytkownik z podanym emailem już istnieje'));
    exit();
}

// Sprawdzenie unikalności username
$usernameCheck = $pdo->prepare("SELECT id FROM users WHERE username = ? LIMIT 1");
$usernameCheck->execute([$username]);
if ($usernameCheck->fetch()) {
    header('Location: /login/?error=' . urlencode('Użytkownik z podaną nazwą już istnieje'));
    exit();
}

$hash = password_hash($password, PASSWORD_DEFAULT);

// Generowanie 6-cyfrowego kodu weryfikacyjnego
$verification_code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);

// Kod ważny 15 minut
$verification_expires = date('Y-m-d H:i:s', strtotime('+15 minutes'));

$stmt = $pdo->prepare("INSERT INTO users (username, email, password, provider, first_name, last_name, newsletter_enabled, verification_code, verification_expires, email_verified)
VALUES (?, ?, ?, 'local', ?, ?, ?, ?, ?, 0)");
$stmt->execute([$username, $email, $hash, $firstname, $lastname, $newsletter, $verification_code, $verification_expires]);

$user_id = $pdo->lastInsertId();

// Utworzenie rekordu w tabeli user_stats dla nowego użytkownika
$stmt_stats = $pdo->prepare("INSERT INTO user_stats (user_id, balance, matches_played, matches_won, matches_lost, matches_draw, tournaments_played, tournaments_won, leagues_participated, total_income, total_expenses, total_transactions, account_status)
VALUES (?, 0.00, 0, 0, 0, 0, 0, 0, 0, 0.00, 0.00, 0, 'active')");
$stmt_stats->execute([$user_id]);

// Zapisanie w sesji
$_SESSION['pending_user_id'] = $user_id;
$_SESSION['pending_email'] = $email;

// Wysyłanie emaila z kodem weryfikacyjnym
$subject = "Kod weryfikacyjny - Wspólnie";
$message = "
<!DOCTYPE html>
<html>
<head>
    <meta charset='utf-8'>
    <style>
        body { font-family: 'Lato', Arial, sans-serif; background: #f0f8ff; padding: 20px; }
        .container { max-width: 600px; margin: 0 auto; background: white; padding: 40px; border-radius: 15px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); }
        h1 { color: #1976d2; text-align: center; }
        .code { font-size: 32px; font-weight: bold; color: #007BFF; text-align: center; letter-spacing: 5px; margin: 30px 0; padding: 20px; background: #e3f2fd; border-radius: 10px; }
        p { color: #2c3e50; line-height: 1.6; }
        .footer { margin-top: 30px; padding-top: 20px; border-top: 2px solid #e3f2fd; text-align: center; color: #7f8c8d; font-size: 14px; }
    </style>
</head>
<body>
    <div class='container'>
        <h1>🎮 Witaj w Wspólnie!</h1>
        <p>Dziękujemy za rejestrację, <strong>$username</strong>!</p>
        <p>Twój kod weryfikacyjny to:</p>
        <div class='code'>$verification_code</div>
        <p>Kod jest ważny przez <strong>15 minut</strong>.</p>
        <p>Kliknij poniższy link i wpisz kod weryfikacyjny:</p>
        <p style='text-align: center;'><a href='https://togethere.cloud/login/verify.php?email=$email' style='display: inline-block; padding: 15px 30px; background: #007BFF; color: white; text-decoration: none; border-radius: 5px; font-weight: bold;'>Zweryfikuj Email</a></p>
        <div class='footer'>
            <p>Jeśli to nie Ty rejestrowałeś się na naszej platformie, zignoruj tę wiadomość.</p>
            <p>&copy; 2026 Wspólnie. Wszelkie prawa zastrzeżone.</p>
        </div>
    </div>
</body>
</html>
";

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";
$headers .= "From: Wspólnie <noreply@togethere.cloud>" . "\r\n";

// Wysyłanie emaila z kodem weryfikacyjnym
require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/smtp_helper.php';

$sent = sendEmailSMTP($email, $subject, $message);

// Przekierowanie do strony weryfikacji (nawet jeśli email się nie wyśle)
header('Location: https://togethere.cloud/login/verify.php?email=' . urlencode($email));
exit();
