<?php
/**
 * Email Service using PHPMailer
 * المسار: /includes/email_service.php
 */

// تحميل PHPMailer (يجب تثبيته عبر composer)
// قم بتشغيل: composer require phpmailer/phpmailer

require_once __DIR__ . '/../vendor/autoload.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

class EmailService {
    private $mail;
    private $config;
    
    public function __construct() {
        // إعدادات SMTP - قم بتعديلها حسب مزود البريد الخاص بك
        $this->config = [
            'host' => 'smtp.gmail.com', // أو smtp.yourdomain.com
            'port' => 587,
            'username' => 'no-reply@maxapp.com',
            'password' => 'your-app-password', // كلمة مرور التطبيق
            'from_email' => 'no-reply@maxapp.com',
            'from_name' => 'مطعم Max',
            'encryption' => 'tls' // tls أو ssl
        ];
        
        $this->initializeMailer();
    }
    
    private function initializeMailer() {
        $this->mail = new PHPMailer(true);
        
        try {
            // إعدادات الخادم
            $this->mail->SMTPDebug = SMTP::DEBUG_OFF; // شغّل DEBUG_OFF في الإنتاج
            $this->mail->isSMTP();
            $this->mail->Host = $this->config['host'];
            $this->mail->SMTPAuth = true;
            $this->mail->Username = $this->config['username'];
            $this->mail->Password = $this->config['password'];
            $this->mail->SMTPSecure = $this->config['encryption'];
            $this->mail->Port = $this->config['port'];
            
            // المرسل
            $this->mail->setFrom($this->config['from_email'], $this->config['from_name']);
            
            // إعدادات المحتوى
            $this->mail->isHTML(true);
            $this->mail->CharSet = 'UTF-8';
            $this->mail->Encoding = 'base64';
            
        } catch (Exception $e) {
            error_log("Mailer initialization error: " . $e->getMessage());
        }
    }
    
    /**
     * إرسال رمز التحقق OTP
     */
    public function sendOTP($to, $name, $otp, $purpose = 'registration') {
        try {
            $this->mail->clearAddresses();
            $this->mail->addAddress($to, $name);
            
            $subject = ($purpose === 'registration') 
                ? 'تفعيل حسابك في مطعم Max' 
                : 'إعادة تعيين كلمة المرور - مطعم Max';
            
            $this->mail->Subject = $subject;
            $this->mail->Body = $this->getOTPEmailTemplate($otp, $name, $purpose);
            $this->mail->AltBody = "كود التحقق الخاص بك هو: $otp";
            
            return $this->mail->send();
            
        } catch (Exception $e) {
            error_log("Email sending error: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * قالب البريد الإلكتروني لرمز التحقق
     */
    private function getOTPEmailTemplate($otp, $name, $purpose) {
        $message = ($purpose === 'registration') 
            ? 'لتفعيل حسابك في مطعم Max' 
            : 'لإعادة تعيين كلمة المرور الخاصة بك';
        
        $year = date('Y');
        
        return "
        <!DOCTYPE html>
        <html dir='rtl' lang='ar'>
        <head>
            <meta charset='UTF-8'>
            <meta name='viewport' content='width=device-width, initial-scale=1.0'>
            <style>
                * {
                    margin: 0;
                    padding: 0;
                    box-sizing: border-box;
                }
                body {
                    font-family: 'Tajawal', 'Arial', sans-serif;
                    background: #f8f9fa;
                    padding: 20px;
                }
                .container {
                    max-width: 600px;
                    margin: 0 auto;
                    background: white;
                    border-radius: 20px;
                    overflow: hidden;
                    box-shadow: 0 4px 16px rgba(245, 124, 0, 0.15);
                    border: 1px solid #FFB74D;
                }
                .header {
                    background: linear-gradient(135deg, #F57C00, #FF9800);
                    padding: 30px 20px;
                    text-align: center;
                }
                .header h1 {
                    color: white;
                    margin: 0;
                    font-size: 28px;
                    font-weight: 800;
                }
                .header p {
                    color: rgba(255,255,255,0.9);
                    margin-top: 5px;
                }
                .content {
                    padding: 40px 30px;
                    text-align: center;
                }
                .greeting {
                    font-size: 24px;
                    font-weight: 700;
                    color: #2E3B4E;
                    margin-bottom: 15px;
                }
                .message {
                    color: #78909C;
                    line-height: 1.8;
                    margin-bottom: 25px;
                    font-size: 16px;
                }
                .otp-container {
                    background: #FFF3E0;
                    border-radius: 15px;
                    padding: 20px;
                    margin: 20px 0;
                    border: 2px dashed #F57C00;
                }
                .otp-code {
                    font-size: 48px;
                    font-weight: 800;
                    color: #F57C00;
                    letter-spacing: 8px;
                    direction: ltr;
                    font-family: monospace;
                }
                .expiry {
                    color: #78909C;
                    font-size: 14px;
                    margin-top: 15px;
                }
                .expiry i {
                    color: #F57C00;
                }
                .footer {
                    background: #ECEFF1;
                    padding: 20px;
                    text-align: center;
                    font-size: 13px;
                    color: #78909C;
                }
                .footer a {
                    color: #F57C00;
                    text-decoration: none;
                }
            </style>
        </head>
        <body>
            <div class='container'>
                <div class='header'>
                    <h1>🍽️ مطعم Max</h1>
                    <p>أفضل المأكولات السعودية والعالمية</p>
                </div>
                
                <div class='content'>
                    <div class='greeting'>مرحباً $name</div>
                    
                    <div class='message'>
                        $message
                    </div>
                    
                    <div class='otp-container'>
                        <div style='margin-bottom: 10px; color: #2E3B4E; font-weight: 600;'>
                            رمز التحقق الخاص بك
                        </div>
                        <div class='otp-code'>$otp</div>
                    </div>
                    
                    <div class='expiry'>
                        <i class='bi bi-clock'></i>
                        هذا الرمز صالح لمدة 10 دقائق فقط
                    </div>
                    
                    <div style='margin-top: 25px; padding: 15px; background: #f8f9fa; border-radius: 10px;'>
                        <p style='color: #78909C; font-size: 14px;'>
                            إذا لم تطلب هذا الرمز، يرجى تجاهل هذه الرسالة
                        </p>
                    </div>
                </div>
                
                <div class='footer'>
                    © $year مطعم Max - جميع الحقوق محفوظة<br>
                    <a href='#'>سياسة الخصوصية</a> | <a href='#'>شروط الاستخدام</a>
                </div>
            </div>
        </body>
        </html>";
    }
    
    /**
     * إرسال بريد ترحيبي بعد التفعيل
     */
    public function sendWelcomeEmail($to, $name) {
        try {
            $this->mail->clearAddresses();
            $this->mail->addAddress($to, $name);
            
            $this->mail->Subject = 'مرحباً بك في مطعم Max';
            $this->mail->Body = $this->getWelcomeEmailTemplate($name);
            $this->mail->AltBody = "مرحباً بك $name في مطعم Max";
            
            return $this->mail->send();
            
        } catch (Exception $e) {
            error_log("Welcome email error: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * قالب البريد الترحيبي
     */
    private function getWelcomeEmailTemplate($name) {
        $year = date('Y');
        
        return "
        <!DOCTYPE html>
        <html dir='rtl' lang='ar'>
        <head>
            <meta charset='UTF-8'>
            <style>
                body { font-family: 'Tajawal', Arial, sans-serif; background: #f8f9fa; }
                .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 20px; overflow: hidden; }
                .header { background: linear-gradient(135deg, #F57C00, #FF9800); padding: 30px; text-align: center; color: white; }
                .content { padding: 40px; text-align: center; }
                .btn { display: inline-block; padding: 12px 30px; background: #F57C00; color: white; text-decoration: none; border-radius: 50px; margin-top: 20px; }
            </style>
        </head>
        <body>
            <div class='container'>
                <div class='header'>
                    <h1>🎉 مرحباً بك $name!</h1>
                </div>
                <div class='content'>
                    <p style='font-size: 18px; margin-bottom: 20px;'>شكراً لانضمامك إلى مطعم Max</p>
                    <p style='color: #78909C; line-height: 1.8;'>نحن سعداء بانضمامك إلينا. يمكنك الآن الاستمتاع بتجربة طعام استثنائية مع ألذ المأكولات السعودية والعالمية.</p>
                    <a href='home.php' class='btn'>تصفح القائمة</a>
                </div>
            </div>
        </body>
        </html>";
    }
}

// ======== دوال مساعدة ========

/**
 * توليد رمز OTP عشوائي
 */
function generateOTP($length = 6) {
    return str_pad(random_int(0, pow(10, $length) - 1), $length, '0', STR_PAD_LEFT);
}

/**
 * تخزين رمز OTP في قاعدة البيانات
 */
function storeOTP($conn, $email, $otp, $purpose) {
    $expires = date('Y-m-d H:i:s', strtotime('+10 minutes'));
    
    // حذف الرموز القديمة
    $delete = $conn->prepare("DELETE FROM otp_codes WHERE email = ? AND purpose = ?");
    $delete->bind_param("ss", $email, $purpose);
    $delete->execute();
    
    // إدراج الرمز الجديد
    $stmt = $conn->prepare("INSERT INTO otp_codes (email, otp_code, purpose, expires_at) VALUES (?, ?, ?, ?)");
    $stmt->bind_param("ssss", $email, $otp, $purpose, $expires);
    return $stmt->execute();
}

/**
 * التحقق من صحة رمز OTP
 */
function verifyOTP($conn, $email, $otp, $purpose) {
    $stmt = $conn->prepare("
        SELECT id FROM otp_codes 
        WHERE email = ? AND otp_code = ? AND purpose = ? 
        AND expires_at > NOW() AND verified = 0 
        ORDER BY id DESC LIMIT 1
    ");
    $stmt->bind_param("sss", $email, $otp, $purpose);
    $stmt->execute();
    $result = $stmt->get_result();
    
    if ($result->num_rows > 0) {
        $row = $result->fetch_assoc();
        
        // تحديث حالة الرمز إلى verified
        $update = $conn->prepare("UPDATE otp_codes SET verified = 1 WHERE id = ?");
        $update->bind_param("i", $row['id']);
        $update->execute();
        
        return true;
    }
    
    return false;
}

/**
 * تنظيف رموز OTP منتهية الصلاحية (يمكن تشغيلها كـ cron job)
 */
function cleanupExpiredOTP($conn) {
    $stmt = $conn->prepare("DELETE FROM otp_codes WHERE expires_at < NOW()");
    return $stmt->execute();
}
?>