<?php
/**
 * کلاس نوتیفیکیشن Dima Shop
 * نسخه: 2.0.0 - پشتیبانی از SMS.ir با قالب آماده (Verify)
 */
if (!defined('ABSPATH')) exit;

class Dima_Notification {
    
    private static $instance = null;
    
    // آدرس API SMS.ir
    const SMS_API_URL = 'https://api.sms.ir/v1/send/verify';
    
    public static function get_instance() {
        if (null === self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    private function __construct() {
        add_action('dima_after_order_created', array($this, 'notify_new_order'), 10, 2);
        add_action('dima_after_order_completed', array($this, 'notify_order_completed'), 10, 2);
    }
    
    // ═══════════════════════════════════════════════════════════
    // ارسال ایمیل
    // ═══════════════════════════════════════════════════════════
    public function send_email($to, $subject, $message, $headers = array()) {
        if (!get_option('dima_notification_email')) return false;
        
        $default_headers = array(
            'Content-Type: text/html; charset=UTF-8',
            'From: ' . get_bloginfo('name') . ' <' . get_option('admin_email') . '>'
        );
        
        $headers = array_merge($default_headers, $headers);
        $html_message = $this->wrap_email_html($subject, $message);
        
        return wp_mail($to, $subject, $html_message, $headers);
    }
    
    private function wrap_email_html($subject, $content) {
        $store_name = get_option('dima_store_name', get_bloginfo('name'));
        $logo = get_option('dima_store_logo');
        
        ob_start();
        ?>
        <!DOCTYPE html>
        <html>
        <head>
            <meta charset="UTF-8">
            <style>
                body { font-family: Tahoma, sans-serif; direction: rtl; background: #f5f5f5; margin: 0; padding: 20px; }
                .container { max-width: 600px; margin: 0 auto; background: white; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 20px rgba(0,0,0,0.1); }
                .header { background: linear-gradient(135deg, #6366f1 0%, #a855f7 100%); color: white; padding: 30px; text-align: center; }
                .header img { max-height: 60px; margin-bottom: 15px; }
                .header h1 { margin: 0; font-size: 24px; }
                .content { padding: 30px; line-height: 1.8; color: #333; }
                .footer { background: #f8f9fa; padding: 20px; text-align: center; color: #666; font-size: 13px; }
                .button { display: inline-block; padding: 12px 30px; background: linear-gradient(135deg, #6366f1 0%, #a855f7 100%); color: white; text-decoration: none; border-radius: 25px; margin: 15px 0; }
            </style>
        </head>
        <body>
            <div class="container">
                <div class="header">
                    <?php if ($logo): ?>
                        <img src="<?php echo esc_url($logo); ?>" alt="<?php echo esc_attr($store_name); ?>">
                    <?php endif; ?>
                    <h1><?php echo esc_html($store_name); ?></h1>
                </div>
                <div class="content">
                    <?php echo wpautop($content); ?>
                </div>
                <div class="footer">
                    <p>© <?php echo date('Y'); ?> <?php echo esc_html($store_name); ?>. تمامی حقوق محفوظ است.</p>
                </div>
            </div>
        </body>
        </html>
        <?php
        return ob_get_clean();
    }
    
    // ═══════════════════════════════════════════════════════════
    // ارسال پیامک با SMS.ir (Verify - قالب آماده)
    // ═══════════════════════════════════════════════════════════
    /**
     * ارسال پیامک با قالب آماده
     * 
     * @param string $mobile شماره موبایل گیرنده
     * @param array $parameters آرایه پارامترها به صورت name => value
     * @param int|null $template_id شناسه قالب (اختیاری - اگر null باشد از تنظیمات استفاده می‌شود)
     * @return array|WP_Error
     */
    public function send_sms($mobile, $parameters = array(), $template_id = null) {
        if (!get_option('dima_notification_sms')) {
            return new WP_Error('sms_disabled', 'ارسال پیامک غیرفعال است');
        }
        
        $api_key = get_option('dima_sms_api_key');
        if (empty($api_key)) {
            return new WP_Error('no_api_key', 'API Key SMS.ir تنظیم نشده است');
        }
        
        if ($template_id === null) {
            $template_id = intval(get_option('dima_sms_template_id'));
        }
        
        if (empty($template_id)) {
            return new WP_Error('no_template', 'شناسه قالب پیامک تنظیم نشده است');
        }
        
        // اعتبارسنجی شماره موبایل
        $mobile = preg_replace('/[^0-9]/', '', $mobile);
        if (strlen($mobile) !== 11 || substr($mobile, 0, 2) !== '09') {
            return new WP_Error('invalid_mobile', 'شماره موبایل نامعتبر است');
        }
        
        // ساخت آرایه پارامترها به فرمت SMS.ir
        $params_array = array();
        foreach ($parameters as $name => $value) {
            $params_array[] = array(
                'name' => sanitize_text_field($name),
                'value' => sanitize_text_field($value)
            );
        }
        
        // ساخت بدنه درخواست
        $request_body = array(
            'mobile' => $mobile,
            'templateId' => $template_id,
            'parameters' => $params_array
        );
        
        // ارسال درخواست با cURL
        $curl = curl_init();
        
        curl_setopt_array($curl, array(
            CURLOPT_URL => self::SMS_API_URL,
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_ENCODING => '',
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_TIMEOUT => 30,
            CURLOPT_FOLLOWLOCATION => true,
            CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
            CURLOPT_CUSTOMREQUEST => 'POST',
            CURLOPT_POSTFIELDS => wp_json_encode($request_body),
            CURLOPT_HTTPHEADER => array(
                'Content-Type: application/json',
                'Accept: application/json',
                'x-api-key: ' . $api_key
            ),
        ));
        
        $response = curl_exec($curl);
        $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
        $curl_error = curl_error($curl);
        
        curl_close($curl);
        
        // لاگ برای دیباگ
        error_log('SMS.ir Request: ' . wp_json_encode($request_body));
        error_log('SMS.ir Response: ' . $response);
        error_log('SMS.ir HTTP Code: ' . $http_code);
        
        if ($curl_error) {
            return new WP_Error('curl_error', 'خطا در ارتباط با SMS.ir: ' . $curl_error);
        }
        
        $result = json_decode($response, true);
        
        // بررسی موفقیت (status = 1 در SMS.ir)
        if ($http_code === 200 && isset($result['status']) && $result['status'] === 1) {
            return array(
                'success' => true,
                'message_id' => isset($result['data']['messageId']) ? $result['data']['messageId'] : null,
                'cost' => isset($result['data']['cost']) ? $result['data']['cost'] : 0
            );
        }
        
        // استخراج پیام خطا
        $error_message = 'خطا در ارسال پیامک';
        if (isset($result['message'])) {
            $error_message = $result['message'];
        }
        
        return new WP_Error('sms_error', $error_message);
    }
    
    /**
     * ارسال پیامک ساده با یک پارامتر
     */
    public function send_simple_sms($mobile, $code_value, $param_name = 'CODE') {
        return $this->send_sms($mobile, array(
            $param_name => $code_value
        ));
    }
    
    // ═══════════════════════════════════════════════════════════
    // نوتیفیکیشن سفارش جدید به مدیر
    // ═══════════════════════════════════════════════════════════
    public function notify_new_order($order_id, $user_id = 0) {
        $order = Dima_Checkout::get_instance()->get_order($order_id);
        if (!$order) return;
        
        $customer = json_decode($order->customer_data, true);
        $currency = get_option('dima_currency', 'تومان');
        $store_name = get_option('dima_store_name', get_bloginfo('name'));
        
        // ═══════════════ ایمیل به مدیر ═══════════════
        $subject = "🛒 سفارش جدید #{$order_id}";
        $message = "
            <h2>سفارش جدید دریافت شد</h2>
            <p><strong>شماره سفارش:</strong> #{$order_id}</p>
            <p><strong>مشتری:</strong> " . esc_html($customer['name'] ?? 'مهمان') . "</p>
            <p><strong>موبایل:</strong> " . esc_html($customer['phone'] ?? '-') . "</p>
            <p><strong>مبلغ:</strong> " . number_format($order->final_amount) . " {$currency}</p>
            <p><a href='" . admin_url("admin.php?page=dima-shop-orders&action=view&id={$order_id}") . "' class='button'>مشاهده سفارش</a></p>
        ";
        
        $this->send_email(get_option('admin_email'), $subject, $message);
        
        // ═══════════════ پیامک به مدیر ═══════════════
        $admin_phone = get_option('dima_admin_phone');
        if ($admin_phone) {
            $this->send_sms($admin_phone, array(
                get_option('dima_sms_param_order', 'ORDER_ID') => $order_id,
                get_option('dima_sms_param_amount', 'AMOUNT') => number_format($order->final_amount),
                get_option('dima_sms_param_brand', 'BRAND') => $store_name
            ));
        }
    }
    
    // ═══════════════════════════════════════════════════════════
    // نوتیفیکیشن تکمیل سفارش به مشتری
    // ═══════════════════════════════════════════════════════════
    public function notify_order_completed($order_id, $user_id) {
        $order = Dima_Checkout::get_instance()->get_order($order_id);
        if (!$order) return;
        
        $customer = json_decode($order->customer_data, true);
        $currency = get_option('dima_currency', 'تومان');
        $store_name = get_option('dima_store_name', get_bloginfo('name'));
        
        // ═══════════════ ایمیل به مشتری ═══════════════
        if (!empty($customer['email'])) {
            $subject = "✅ سفارش شما تکمیل شد - #{$order_id}";
            $message = "
                <h2>سفارش شما با موفقیت تکمیل شد</h2>
                <p>سلام " . esc_html($customer['name'] ?? '') . " عزیز،</p>
                <p>سفارش شما به شماره <strong>#{$order_id}</strong> با موفقیت ثبت و پرداخت شد.</p>
                <p>به زودی سفارش شما پردازش و ارسال خواهد شد.</p>
                <p><strong>مبلغ پرداختی:</strong> " . number_format($order->final_amount) . " {$currency}</p>
                <p>از خرید شما متشکریم! 🙏</p>
            ";
            
            $this->send_email($customer['email'], $subject, $message);
        }
        
        // ═══════════════ پیامک به مشتری ═══════════════
        if (!empty($customer['phone'])) {
            $this->send_sms($customer['phone'], array(
                get_option('dima_sms_param_code', 'CODE') => $order_id,
                get_option('dima_sms_param_brand', 'BRAND') => $store_name,
                get_option('dima_sms_param_order', 'ORDER_ID') => $order_id,
                get_option('dima_sms_param_amount', 'AMOUNT') => number_format($order->final_amount)
            ));
        }
    }
    
    // ═══════════════════════════════════════════════════════════
    // ارسال کد تایید (OTP)
    // ═══════════════════════════════════════════════════════════
    public function send_otp($mobile, $code) {
        return $this->send_sms($mobile, array(
            get_option('dima_sms_param_code', 'CODE') => $code
        ));
    }
}