<?php
if (session_status() === PHP_SESSION_NONE) { session_start(); }
require_once '../../config.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require '../PHPMailer-master/src/Exception.php';
require '../PHPMailer-master/src/PHPMailer.php';
require '../PHPMailer-master/src/SMTP.php';

// অটোমেটিক ডাটাবেস কলাম তৈরি (যদি না থাকে) - Lifetime/5 Years লগইনের জন্য (২৫৫ ক্যারেক্টার হ্যাশের জন্য)
$conn->query("ALTER TABLE users ADD COLUMN IF NOT EXISTS remember_token VARCHAR(255) DEFAULT NULL");

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // ডাটা স্যানিটাইজ করা (XSS হ্যাকিং থেকে বাঁচতে)
    $fullname = htmlspecialchars(trim($_POST['fullname']), ENT_QUOTES, 'UTF-8');
    $username = htmlspecialchars(trim($_POST['username']), ENT_QUOTES, 'UTF-8');
    $email = filter_var(trim($_POST['email']), FILTER_SANITIZE_EMAIL);
    $password = $_POST['password'];
    $confirm_password = $_POST['confirm_password'];

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $_SESSION['error'] = "Invalid email format!"; header("Location: /signup/"); exit();
    }
    if ($password !== $confirm_password) {
        $_SESSION['error'] = "Passwords do not match!"; header("Location: /signup/"); exit();
    }

    // SQL Injection প্রটেকশন দিয়ে ইমেইল চেক করা
    $stmt = $conn->prepare("SELECT id FROM users WHERE email=?");
    $stmt->bind_param("s", $email);
    $stmt->execute();
    if ($stmt->get_result()->num_rows > 0) {
        $_SESSION['error'] = "This email is already registered!"; header("Location: /signup/"); exit();
    }

    // সিকিউর পাসওয়ার্ড হ্যাশিং
    $hashed_password = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
    $otp = rand(100000, 999999);
    $_SESSION['otp_expire'] = time() + 300; // ৫ মিনিট ভ্যালিডিটি

    // অটো-ভেরিফাই লিংক তৈরি
    $enc_email = base64_encode($email);
    $enc_otp = base64_encode($otp);
    $magic_link = "https://" . $_SERVER['HTTP_HOST'] . "/signup/verify/?e=$enc_email&c=$enc_otp";

    // ----------------------------------------------------------------------
    // হাই-সিকিউরিটি কুকি টোকেন জেনারেট করা (৫ বছরের জন্য)
    // ----------------------------------------------------------------------
    $cookie_token = bin2hex(random_bytes(32)); // এটি ইউজারের ব্রাউজারে সেভ হবে (কোনো ডাটা ছাড়া রেন্ডম স্ট্রিং)
    $hashed_token = hash('sha256', $cookie_token); // এটি ডাটাবেসে সেভ হবে (অতিরিক্ত সিকিউরিটির জন্য)

    // ইউজারের ডাটাবেসে সেভ করা (remember_token সহ)
    $insert_stmt = $conn->prepare("INSERT INTO users (fullname, username, email, password, otp, is_verified, remember_token) VALUES (?, ?, ?, ?, ?, 0, ?)");
    $insert_stmt->bind_param("ssssss", $fullname, $username, $email, $hashed_password, $otp, $hashed_token);

    if ($insert_stmt->execute()) {
        
        // ইউজারের ব্রাউজারে ৫ বছরের জন্য কুকি সেট করা (5 years = 5 * 365 * 24 * 60 * 60 seconds)
        $cookie_expire = time() + 157680000; 
        $is_secure = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on'; // HTTPS চেক
        // কুকি সেট: নাম, ভ্যালু, এক্সপায়ার টাইম, পাথ, ডোমেইন, Secure(HTTPS), HttpOnly(XSS protection)
        setcookie('auth_remember', $cookie_token, $cookie_expire, "/", "", $is_secure, true);

        $mail = new PHPMailer(true);
        try {
            // মেইল সার্ভার সেটিংস
            $mail->isSMTP();
            $mail->Host = 'mail.invoice-generatorfree.com'; 
            $mail->SMTPAuth = true;
            $mail->Username = 'support@invoice-generatorfree.com'; 
            $mail->Password = '@##Mdhasan.com24';
            $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; 
            $mail->Port = 465;
            $mail->SMTPOptions = array('ssl' => array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true));

            $mail->setFrom('support@invoice-generatorfree.com', 'Invoice Generator'); 
            $mail->addAddress($email, $fullname); 
            $mail->isHTML(true);
            $mail->Subject = 'Secure Verification Code - Invoice Generator';
            
            // প্রফেশনাল, সফট ও ক্লিন ইমেইল বডি
            $mail->Body = "
            <div style=\"max-width: 600px; margin: 0 auto; font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; border: 1px solid #e2e8f0; border-radius: 10px; overflow: hidden; box-shadow: 0 2px 10px rgba(0,0,0,0.03);\">
                <div style=\"background-color: #1e293b; padding: 20px 0; text-align: center;\">
                    <h2 style=\"color: #ffffff; margin: 0; font-size: 22px; font-weight: 500; letter-spacing: 1px;\">Invoice Generator</h2>
                </div>
                <div style=\"padding: 35px 40px; background-color: #ffffff;\">
                    <h3 style=\"color: #334155; margin-top: 0; font-size: 18px; font-weight: 600;\">Hello $fullname,</h3>
                    <p style=\"color: #475569; font-size: 15px; line-height: 1.6; margin-bottom: 25px;\">To complete your secure verification, please use the following 6-digit code. This code is valid for <strong>5 minutes</strong>.</p>
                    
                    <div style=\"text-align: center; margin: 30px 0;\">
                        <div style=\"display: inline-block; font-size: 28px; font-weight: 600; letter-spacing: 8px; color: #15803d; background-color: #f0fdf4; padding: 10px 25px; border-radius: 6px; border: 1px solid #bbf7d0; white-space: nowrap;\">$otp</div>
                    </div>
                    
                    <p style=\"color: #475569; font-size: 14px; text-align: center; margin-bottom: 20px;\">Or verify automatically by clicking the button below:</p>
                    <div style=\"text-align: center; margin-bottom: 30px;\">
                        <a href=\"$magic_link\" style=\"background-color: #2ecc71; color: #ffffff; text-decoration: none; padding: 12px 30px; border-radius: 6px; font-size: 15px; font-weight: 600; display: inline-block; transition: 0.3s;\">Verify My Account</a>
                    </div>
                    
                    <hr style=\"border: none; border-top: 1px solid #e2e8f0; margin: 30px 0;\">
                    
                    <div style=\"background-color: #fffaf0; border-left: 4px solid #f59e0b; padding: 15px 20px; border-radius: 4px;\">
                        <p style=\"margin: 0; color: #92400e; font-size: 13px; line-height: 1.5;\"><strong>Security Alert:</strong> Never share this code with anyone. Our support team will never ask for your verification code or password.</p>
                    </div>
                </div>
            </div>";

            $mail->send();
            $_SESSION['verify_email'] = $email;
            header("Location: /signup/verify/"); exit();

        } catch (Exception $e) {
            $conn->query("DELETE FROM users WHERE email='$email'"); // মেইল না গেলে ডিলিট
            // মেইল না গেলে কুকিও ডিলিট করে দেওয়া হচ্ছে
            setcookie('auth_remember', '', time() - 3600, '/'); 
            
            $_SESSION['error'] = "Mail Error. Please try again.";
            header("Location: /signup/"); exit();
        }
    }
}
?>
