<?php
namespace DZQCOD;
defined('ABSPATH') || exit;

class Installer {
    public static function activate(): void {
        self::tables();
        self::roles();
        self::seed();
        self::defaults();
        update_option('dzqcod_version', \DZQCOD_VER);
        update_option('dzqcod_installed_at', current_time('mysql'));
        flush_rewrite_rules();
    }

    private static function tables(): void {
        global $wpdb;
        $c = $wpdb->get_charset_collate();
        $p = $wpdb->prefix . \DZQCOD_DB;
        require_once ABSPATH.'wp-admin/includes/upgrade.php';

        $tables = [
        // Wilayas
        "CREATE TABLE IF NOT EXISTS {$p}wilayas (
            id INT UNSIGNED NOT NULL AUTO_INCREMENT,
            code VARCHAR(10) NOT NULL,
            name_ar VARCHAR(100) NOT NULL,
            name_fr VARCHAR(100) NOT NULL DEFAULT '',
            country VARCHAR(2) NOT NULL DEFAULT 'DZ',
            shipping_desk DECIMAL(10,2) DEFAULT 0,
            shipping_home DECIMAL(10,2) DEFAULT 0,
            is_active TINYINT(1) DEFAULT 1,
            PRIMARY KEY (id), UNIQUE KEY code_country (code, country)
        ) {$c}",

        // Communes
        "CREATE TABLE IF NOT EXISTS {$p}communes (
            id INT UNSIGNED NOT NULL AUTO_INCREMENT,
            wilaya_code VARCHAR(3) NOT NULL,
            name_ar VARCHAR(150) NOT NULL,
            name_fr VARCHAR(150) NOT NULL DEFAULT '',
            zip_code VARCHAR(10) DEFAULT '',
            is_active TINYINT(1) DEFAULT 1,
            PRIMARY KEY (id),
            KEY idx_wilaya (wilaya_code)
        ) {$c}",

        // Call logs
        "CREATE TABLE IF NOT EXISTS {$p}call_logs (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            order_id BIGINT UNSIGNED NOT NULL,
            agent_id BIGINT UNSIGNED DEFAULT 0,
            outcome VARCHAR(30) NOT NULL,
            attempt_number TINYINT UNSIGNED DEFAULT 1,
            duration_sec INT UNSIGNED DEFAULT 0,
            notes TEXT,
            next_call_at DATETIME NULL,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_order (order_id), KEY idx_agent (agent_id)
        ) {$c}",

        // Fraud scores
        "CREATE TABLE IF NOT EXISTS {$p}fraud_scores (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            order_id BIGINT UNSIGNED NOT NULL,
            score TINYINT UNSIGNED DEFAULT 0,
            signals_json TEXT,
            action_taken VARCHAR(30) DEFAULT '',
            reviewed_by BIGINT UNSIGNED DEFAULT 0,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_order (order_id), KEY idx_score (score)
        ) {$c}",

        // Blacklist
        "CREATE TABLE IF NOT EXISTS {$p}blacklist (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            type ENUM('phone','ip','email') NOT NULL DEFAULT 'phone',
            hash_value VARCHAR(64) NOT NULL,
            reason VARCHAR(200) DEFAULT '',
            severity ENUM('low','medium','high','permanent') DEFAULT 'medium',
            expires_at DATETIME NULL,
            created_by BIGINT UNSIGNED DEFAULT 0,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_hash (hash_value), KEY idx_type (type)
        ) {$c}",

        // Campaign touchpoints (UTM)
        "CREATE TABLE IF NOT EXISTS {$p}touchpoints (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            session_id VARCHAR(64) NOT NULL,
            order_id BIGINT UNSIGNED NULL,
            first_utm_json TEXT,
            last_utm_json TEXT,
            fbclid VARCHAR(100) DEFAULT '',
            fbp VARCHAR(100) DEFAULT '',
            fbc VARCHAR(100) DEFAULT '',
            ttclid VARCHAR(100) DEFAULT '',
            gclid VARCHAR(100) DEFAULT '',
            landing_page VARCHAR(500) DEFAULT '',
            referrer VARCHAR(500) DEFAULT '',
            device VARCHAR(20) DEFAULT '',
            time_on_page INT UNSIGNED DEFAULT 0,
            scroll_depth TINYINT UNSIGNED DEFAULT 0,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_order (order_id), KEY idx_session (session_id)
        ) {$c}",

        // Campaign stats daily
        "CREATE TABLE IF NOT EXISTS {$p}campaign_stats (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            stat_date DATE NOT NULL,
            utm_source VARCHAR(100) DEFAULT '',
            utm_medium VARCHAR(100) DEFAULT '',
            utm_campaign VARCHAR(200) DEFAULT '',
            utm_content VARCHAR(200) DEFAULT '',
            utm_term VARCHAR(200) DEFAULT '',
            leads INT UNSIGNED DEFAULT 0,
            confirmed INT UNSIGNED DEFAULT 0,
            delivered INT UNSIGNED DEFAULT 0,
            rto INT UNSIGNED DEFAULT 0,
            revenue DECIMAL(12,2) DEFAULT 0,
            ad_spend DECIMAL(12,2) DEFAULT 0,
            PRIMARY KEY (id), KEY idx_date (stat_date), KEY idx_campaign (utm_campaign(50))
        ) {$c}",

        // Offers
        "CREATE TABLE IF NOT EXISTS {$p}offers (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            name VARCHAR(200) NOT NULL,
            coupon_code VARCHAR(50) DEFAULT NULL,
            description TEXT,
            type VARCHAR(30) NOT NULL DEFAULT 'percentage',
            value DECIMAL(10,2) DEFAULT 0,
            min_amount DECIMAL(10,2) DEFAULT 0,
            product_ids TEXT,
            rules_json TEXT,
            priority TINYINT UNSIGNED DEFAULT 10,
            max_uses INT UNSIGNED DEFAULT 0,
            used_count INT UNSIGNED DEFAULT 0,
            starts_at DATETIME NULL,
            ends_at DATETIME NULL,
            is_active TINYINT(1) DEFAULT 1,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_active (is_active), UNIQUE KEY idx_coupon (coupon_code)
        ) {$c}",

        // A/B tests
        "CREATE TABLE IF NOT EXISTS {$p}ab_tests (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            name VARCHAR(200) NOT NULL,
            type VARCHAR(30) DEFAULT 'form',
            variants_json TEXT,
            traffic_split VARCHAR(50) DEFAULT '50:50',
            is_active TINYINT(1) DEFAULT 1,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id)
        ) {$c}",

        // Shipping labels
        "CREATE TABLE IF NOT EXISTS {$p}shipping_labels (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            order_id BIGINT UNSIGNED NOT NULL,
            provider VARCHAR(30) NOT NULL DEFAULT 'manual',
            tracking_number VARCHAR(100) DEFAULT '',
            label_url VARCHAR(500) DEFAULT '',
            status VARCHAR(30) DEFAULT 'created',
            shipped_at DATETIME NULL,
            delivered_at DATETIME NULL,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_order (order_id), KEY idx_tracking (tracking_number)
        ) {$c}",

        // Message logs (SMS + WhatsApp)
        "CREATE TABLE IF NOT EXISTS {$p}message_logs (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            order_id BIGINT UNSIGNED DEFAULT 0,
            channel ENUM('sms','whatsapp','email') NOT NULL DEFAULT 'sms',
            phone VARCHAR(20) DEFAULT '',
            template VARCHAR(100) DEFAULT '',
            body TEXT,
            status VARCHAR(20) DEFAULT 'sent',
            provider_ref VARCHAR(100) DEFAULT '',
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_order (order_id), KEY idx_channel (channel)
        ) {$c}",

        // License
        "CREATE TABLE IF NOT EXISTS {$p}license (
            id INT UNSIGNED NOT NULL AUTO_INCREMENT,
            license_key VARCHAR(100) NOT NULL,
            plan ENUM('free','pro','enterprise') DEFAULT 'free',
            status VARCHAR(20) DEFAULT 'active',
            domain VARCHAR(200) DEFAULT '',
            activated_at DATETIME NULL,
            expires_at DATETIME NULL,
            last_check DATETIME NULL,
            whmcs_id INT UNSIGNED DEFAULT 0,
            PRIMARY KEY (id), KEY idx_key (license_key)
        ) {$c}",

        // Audit log
        "CREATE TABLE IF NOT EXISTS {$p}audit_log (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            user_id BIGINT UNSIGNED DEFAULT 0,
            action VARCHAR(50) NOT NULL,
            object_type VARCHAR(30) DEFAULT '',
            object_id BIGINT UNSIGNED DEFAULT 0,
            details_json TEXT,
            ip_address VARCHAR(45) DEFAULT '',
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY idx_user (user_id), KEY idx_action (action)
        ) {$c}",

        // Addons marketplace
        "CREATE TABLE IF NOT EXISTS {$p}addons (
            id INT UNSIGNED NOT NULL AUTO_INCREMENT,
            slug VARCHAR(100) NOT NULL,
            name VARCHAR(200) NOT NULL,
            description TEXT,
            version VARCHAR(20) DEFAULT '1.0.0',
            type ENUM('free','pro','enterprise') DEFAULT 'free',
            is_installed TINYINT(1) DEFAULT 0,
            settings_json TEXT,
            PRIMARY KEY (id), UNIQUE KEY slug (slug)
        ) {$c}",

        // Abandoned carts
        "CREATE TABLE IF NOT EXISTS {$p}abandoned_carts (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            phone VARCHAR(20), name VARCHAR(100), product_id BIGINT, product_name VARCHAR(255),
            price DECIMAL(10,2) DEFAULT 0, wilaya VARCHAR(50),
            recovery_status ENUM('pending','sent','recovered','expired') DEFAULT 'pending',
            attempt INT DEFAULT 0,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP, recovered_at DATETIME NULL,
            PRIMARY KEY (id), KEY phone (phone), KEY status (recovery_status)
        ) {$c}",

        // Loyalty points
        "CREATE TABLE IF NOT EXISTS {$p}loyalty (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            phone VARCHAR(20) NOT NULL, name VARCHAR(100),
            points INT DEFAULT 0, total_earned INT DEFAULT 0, total_redeemed INT DEFAULT 0,
            orders_count INT DEFAULT 0,
            tier ENUM('bronze','silver','gold','vip') DEFAULT 'bronze',
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
            PRIMARY KEY (id), UNIQUE KEY phone (phone), KEY tier (tier)
        ) {$c}",

        // Referrals
        "CREATE TABLE IF NOT EXISTS {$p}referrals (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            referrer_phone VARCHAR(20), referee_phone VARCHAR(20),
            order_id BIGINT, order_total DECIMAL(10,2) DEFAULT 0,
            commission DECIMAL(10,2) DEFAULT 0,
            status ENUM('pending','approved','paid') DEFAULT 'pending',
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY referrer (referrer_phone)
        ) {$c}",

        // Reviews
        "CREATE TABLE IF NOT EXISTS {$p}reviews (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            order_id BIGINT, product_id BIGINT,
            phone VARCHAR(20), name VARCHAR(100),
            rating TINYINT DEFAULT 5, review TEXT,
            status ENUM('pending','approved','rejected') DEFAULT 'pending',
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY product_status (product_id, status)
        ) {$c}",

        // Heatmap
        "CREATE TABLE IF NOT EXISTS {$p}heatmap (
            id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
            product_id BIGINT, field VARCHAR(50),
            event_type ENUM('focus','blur','change','click','submit','abandon') DEFAULT 'focus',
            time_spent INT DEFAULT 0, session_id VARCHAR(40),
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            PRIMARY KEY (id), KEY product_field (product_id, field)
        ) {$c}",
        ];

        foreach ($tables as $sql) {
            dbDelta($sql);
        }
        // Migration: add country column if missing
        global $wpdb;
        $p = $wpdb->prefix . \DZQCOD_DB;
        $wpdb->query("ALTER TABLE {$p}wilayas ADD COLUMN IF NOT EXISTS country VARCHAR(2) NOT NULL DEFAULT 'DZ' AFTER name_fr");
        $wpdb->query("ALTER TABLE {$p}offers ADD COLUMN IF NOT EXISTS coupon_code VARCHAR(50) DEFAULT NULL AFTER name");
        $wpdb->query("ALTER TABLE {$p}offers ADD COLUMN IF NOT EXISTS description TEXT AFTER coupon_code");
        $wpdb->query("ALTER TABLE {$p}offers ADD COLUMN IF NOT EXISTS min_amount DECIMAL(10,2) DEFAULT 0 AFTER value");
        $wpdb->query("ALTER TABLE {$p}offers ADD COLUMN IF NOT EXISTS product_ids TEXT AFTER min_amount");
        $wpdb->query("ALTER TABLE {$p}license ADD COLUMN IF NOT EXISTS last_check DATETIME NULL AFTER expires_at");
    }

    private static function roles(): void {
        $caps = ['dzqcod_view_orders','dzqcod_manage_orders','dzqcod_confirm_orders','dzqcod_manage_shipments','dzqcod_view_campaigns','dzqcod_manage_offers','dzqcod_view_fraud','dzqcod_manage_addons','dzqcod_manage_license','dzqcod_manage_settings'];
        $admin = get_role('administrator');
        if ($admin) { foreach ($caps as $c) $admin->add_cap($c); }
        $shop = get_role('shop_manager');
        if ($shop) { foreach ($caps as $c) $shop->add_cap($c); }

        add_role('dzqcod_agent', 'DZQCOD Agent', ['read'=>true,'dzqcod_view_orders'=>true,'dzqcod_confirm_orders'=>true]);
        add_role('dzqcod_shipper', 'DZQCOD Shipper', ['read'=>true,'dzqcod_view_orders'=>true,'dzqcod_manage_shipments'=>true]);
    }

    private static function seed(): void {
        global $wpdb;
        $p = $wpdb->prefix . \DZQCOD_DB;
        if ((int)$wpdb->get_var("SELECT COUNT(*) FROM {$p}wilayas") > 0) return;

        $wilayas = [
            ['01','أدرار','Adrar',600,800],['02','الشلف','Chlef',400,600],['03','الأغواط','Laghouat',500,700],
            ['04','أم البواقي','Oum El Bouaghi',400,600],['05','باتنة','Batna',400,600],['06','بجاية','Béjaïa',400,600],
            ['07','بسكرة','Biskra',400,600],['08','بشار','Béchar',600,800],['09','البليدة','Blida',300,500],
            ['10','البويرة','Bouira',400,600],['11','تمنراست','Tamanrasset',800,1000],['12','تبسة','Tébessa',400,600],
            ['13','تلمسان','Tlemcen',400,600],['14','تيارت','Tiaret',400,600],['15','تيزي وزو','Tizi Ouzou',400,600],
            ['16','الجزائر','Alger',200,400],['17','الجلفة','Djelfa',400,600],['18','جيجل','Jijel',400,600],
            ['19','سطيف','Sétif',350,550],['20','سعيدة','Saïda',400,600],['21','سكيكدة','Skikda',400,600],
            ['22','سيدي بلعباس','Sidi Bel Abbès',400,600],['23','عنابة','Annaba',350,550],
            ['24','قالمة','Guelma',400,600],['25','قسنطينة','Constantine',350,550],['26','المدية','Médéa',400,600],
            ['27','مستغانم','Mostaganem',400,600],['28','المسيلة','M\'sila',400,600],['29','معسكر','Mascara',400,600],
            ['30','ورقلة','Ouargla',500,700],['31','وهران','Oran',300,500],['32','البيض','El Bayadh',500,700],
            ['33','إليزي','Illizi',800,1000],['34','برج بوعريريج','Bordj Bou Arréridj',400,600],
            ['35','بومرداس','Boumerdès',300,500],['36','الطارف','El Tarf',400,600],
            ['37','تندوف','Tindouf',800,1000],['38','تيسمسيلت','Tissemsilt',400,600],
            ['39','الوادي','El Oued',500,700],['40','خنشلة','Khenchela',400,600],
            ['41','سوق أهراس','Souk Ahras',400,600],['42','تيبازة','Tipaza',300,500],
            ['43','ميلة','Mila',400,600],['44','عين الدفلى','Aïn Defla',400,600],
            ['45','النعامة','Naâma',500,700],['46','عين تموشنت','Aïn Témouchent',400,600],
            ['47','غرداية','Ghardaïa',500,700],['48','غليزان','Relizane',400,600],
            ['49','تيميمون','Timimoun',700,900],['50','برج باجي مختار','Bordj Badji Mokhtar',900,1100],
            ['51','أولاد جلال','Ouled Djellal',500,700],['52','بني عباس','Béni Abbès',700,900],
            ['53','عين صالح','In Salah',700,900],['54','عين قزام','In Guezzam',900,1100],
            ['55','توقرت','Touggourt',500,700],['56','جانت','Djanet',900,1100],
            ['57','المغير','El M\'Ghair',500,700],['58','المنيعة','El Meniaa',600,800],
        ];
        foreach ($wilayas as $w) {
            $wpdb->insert("{$p}wilayas", ['code'=>$w[0],'name_ar'=>$w[1],'name_fr'=>$w[2],'shipping_desk'=>$w[3],'shipping_home'=>$w[4],'is_active'=>1]);
        }

        // Seed major communes for each wilaya (sample - top communes)
        $communes = [
            '01'=>['أدرار','تيميمون','رقان','تيط'],
            '02'=>['الشلف','تنس','الشطية','بوقادير','وادي الفضة'],
            '03'=>['الأغواط','حاسي الرمل','آفلو','قصر الحيران'],
            '04'=>['أم البواقي','عين البيضاء','عين مليلة','عين فكرون'],
            '05'=>['باتنة','بريكة','عين التوتة','مروانة','أريس'],
            '06'=>['بجاية','أقبو','سيدي عيش','خراطة','الكسور'],
            '07'=>['بسكرة','طولقة','أولاد جلال','سيدي عقبة'],
            '08'=>['بشار','بني ونيف','عبادلة','القنادسة'],
            '09'=>['البليدة','بوفاريك','مفتاح','الأربعاء','وادي العلايق'],
            '10'=>['البويرة','سور الغزلان','عين بسام','لقدية'],
            '11'=>['تمنراست','عين صالح','عين قزام'],
            '12'=>['تبسة','بئر العاتر','شريعة','الونزة'],
            '13'=>['تلمسان','مغنية','الرمشي','ندرومة','الغزوات'],
            '14'=>['تيارت','فرندة','عين الذهب','قصر الشلالة'],
            '15'=>['تيزي وزو','عزازقة','ذراع الميزان','بوغني','لاربعاء ناث إيراثن'],
            '16'=>['الجزائر الوسطى','باب الوادي','الحراش','بئر مراد رايس','دار البيضاء','الرويبة','بئر خادم','القبة','حسين داي','بوزريعة','شراقة','دالي إبراهيم'],
            '17'=>['الجلفة','عين وسارة','حاسي بحبح','مسعد'],
            '18'=>['جيجل','الميلية','الطاهير','الأمير عبد القادر'],
            '19'=>['سطيف','العلمة','عين ولمان','بوعنداس','عين أزال'],
            '20'=>['سعيدة','عين الحجر','يونس'],
            '21'=>['سكيكدة','القل','عزابة','تمالوس'],
            '22'=>['سيدي بلعباس','عين تموشنت','تلاغ','بن باديس'],
            '23'=>['عنابة','الحجار','سيدي عمار','برحال','العلمة'],
            '24'=>['قالمة','بوشقوف','وادي زناتي','حمام دباغ'],
            '25'=>['قسنطينة','الخروب','عين سمارة','حامة بوزيان','ديدوش مراد'],
            '26'=>['المدية','قصر البخاري','بني سليمان','البرواقية'],
            '27'=>['مستغانم','عين تادلس','الحشم','سيدي علي'],
            '28'=>['المسيلة','بوسعادة','عين الملح','سيدي عيسى'],
            '29'=>['معسكر','تيقرت','سيق','بوحنيفية'],
            '30'=>['ورقلة','حاسي مسعود','تقرت','الطيبات'],
            '31'=>['وهران','السانية','بئر الجير','عين الترك','أرزيو','وادي تليلات'],
            '32'=>['البيض','بوقطب','العبادلة'],
            '33'=>['إليزي','جانت','برج الحواس'],
            '34'=>['برج بوعريريج','رأس الوادي','المنصورة'],
            '35'=>['بومرداس','الثنية','بودواو','خميس الخشنة','دلس'],
            '36'=>['الطارف','القالة','بوحجار','الذرعان'],
            '37'=>['تندوف'],
            '38'=>['تيسمسيلت','ثنية الحد','لرجام'],
            '39'=>['الوادي','قمار','الدبيلة','الرباح'],
            '40'=>['خنشلة','قايس','بابار','شلية'],
            '41'=>['سوق أهراس','سدراتة','المشروحة','تاورة'],
            '42'=>['تيبازة','حجوط','شرشال','القليعة','سيدي موسى'],
            '43'=>['ميلة','فرجيوة','شلغوم العيد','تاجنانت'],
            '44'=>['عين الدفلى','خميستي','مليانة','الأصنام'],
            '45'=>['النعامة','المشرية','عين الصفراء'],
            '46'=>['عين تموشنت','الحمام بوحجر','بني صاف'],
            '47'=>['غرداية','المنيعة','بريان','متليلي'],
            '48'=>['غليزان','ماوسة','واد رهيو','المطمر'],
            '49'=>['تيميمون','أولف','شروين'],
            '50'=>['برج باجي مختار','تيمياوين'],
            '51'=>['أولاد جلال','سيدي خالد','الدوسن'],
            '52'=>['بني عباس','تامطرت'],
            '53'=>['عين صالح','فقارة الزوى','إن قزام'],
            '54'=>['عين قزام','تين زاوتين'],
            '55'=>['توقرت','المقارين','الحجيرة'],
            '56'=>['جانت','برج الحواس'],
            '57'=>['المغير','جامعة','سطيل'],
            '58'=>['المنيعة','حاسي الرمل'],
        ];

        foreach ($communes as $wcode => $names) {
            foreach ($names as $name) {
                $wpdb->insert("{$p}communes", ['wilaya_code'=>$wcode,'name_ar'=>$name,'name_fr'=>'','is_active'=>1]);
            }
        }
    }

    private static function defaults(): void {
        $defs = [
            'form_enabled'=>'yes','form_replace_woo'=>'yes',
            'form_primary_color'=>'#667eea','form_secondary_color'=>'#764ba2',
            'form_success_color'=>'#27ae60','form_text_color'=>'#333333',
            'form_bg_color'=>'#ffffff','form_btn_text_color'=>'#ffffff',
            'form_border_radius'=>'12','form_max_width'=>'480',
            'form_submit_text'=>'🛒 اطلب الآن — الدفع عند الاستلام',
            'form_success_text'=>'✅ تم إرسال طلبك بنجاح! سنتصل بك قريباً للتأكيد.',
            'form_whatsapp_text'=>'💬 اطلب عبر واتساب',
            'form_trust_text'=>'✅ الدفع عند الاستلام • 🚚 توصيل لكل الولايات • 🔄 إرجاع مجاني',
            'show_name'=>'yes','show_phone'=>'yes','show_phone2'=>'yes',
            'show_wilaya'=>'yes','show_commune'=>'yes','show_quantity'=>'yes',
            'show_notes'=>'yes','show_price'=>'yes','show_breakdown'=>'yes',
            'show_whatsapp_btn'=>'yes','show_trust_badges'=>'yes','show_product_image'=>'yes',
        ];
        foreach ($defs as $k=>$v) {
            if (get_option("dzqcod_{$k}") === false) update_option("dzqcod_{$k}", $v, false);
        }
    }
}
