<?php
/**
 * ═══════════════════════════════════════════════════════════
 * email_otp_helper.php
 * Admin আর Agent — দুটো Login-ই এই একই Function ব্যবহার করবে।
 * কোনো External Library লাগে না — PHP-এর নিজস্ব mail() Function
 * দিয়েই কাজ করে।
 * ═══════════════════════════════════════════════════════════
 */

function generateAndSendOtp($conn, $userType, $userId, $email) {
    if (empty($email)) {
        return ['success' => false, 'msg' => 'এই Account-এ কোনো Email যোগ করা নেই।'];
    }

    // ✅ ৬-সংখ্যার Random Code তৈরি
    $otp = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT);

    // ✅ আগের, ব্যবহার-না-হওয়া Code থাকলে সেগুলো বাতিল করা
    $stmt = $conn->prepare("UPDATE email_otp_codes SET is_used = 1 WHERE user_type = ? AND user_id = ? AND is_used = 0");
    $stmt->bind_param("si", $userType, $userId);
    $stmt->execute();
    $stmt->close();

    // ✅ নতুন Code Save করা (৫ মিনিট মেয়াদ)
    $stmt = $conn->prepare("INSERT INTO email_otp_codes (user_type, user_id, otp_code, expires_at) VALUES (?, ?, ?, DATE_ADD(NOW(), INTERVAL 5 MINUTE))");
    $stmt->bind_param("sis", $userType, $userId, $otp);
    $stmt->execute();
    $stmt->close();

    // ✅ Email পাঠানো (PHP-এর নিজস্ব mail() দিয়ে)
    $subject = "তোমার Login Verification Code";
    $message = "তোমার Login Code: $otp\n\nএই Code ৫ মিনিটের জন্য বৈধ। তুমি যদি Login করার চেষ্টা না করে থাকো, এটা Ignore করো।";
    $headers = "From: no-reply@" . ($_SERVER['HTTP_HOST'] ?? 'cv111.site');

    $sent = @mail($email, $subject, $message, $headers);

    // ✅ Log রাখা (Debug-এর জন্য, Email সত্যিই পাঠানো গেছে কিনা)
    $logDir = __DIR__ . '/otp_logs';
    if (!file_exists($logDir)) { @mkdir($logDir, 0777, true); }
    @file_put_contents($logDir . '/otp_' . date('Y-m-d') . '.log',
        date('H:i:s') . " | Type=$userType | UserID=$userId | Email=$email | OTP=$otp | MailSent=" . ($sent ? 'YES' : 'NO') . PHP_EOL,
        FILE_APPEND
    );

    return ['success' => true, 'msg' => 'Code পাঠানো হয়েছে, তোমার Email Check করো।'];
}

function verifyOtp($conn, $userType, $userId, $enteredCode) {
    $stmt = $conn->prepare("
        SELECT id FROM email_otp_codes
        WHERE user_type = ? AND user_id = ? AND otp_code = ? AND is_used = 0 AND expires_at >= NOW()
        LIMIT 1
    ");
    $stmt->bind_param("sis", $userType, $userId, $enteredCode);
    $stmt->execute();
    $result = $stmt->get_result();

    if ($result->num_rows === 0) {
        return false;
    }

    $row = $result->fetch_assoc();
    $conn->query("UPDATE email_otp_codes SET is_used = 1 WHERE id = " . intval($row['id']));
    return true;
}
