-- ==========================================================
-- Migration v5 — Payment، فعال‌سازی واقعی VIP، Intent Engine، تنظیمات مربوطه
-- بعد از migration_v4.sql اجرا شود.
-- ==========================================================

SET NAMES utf8mb4;

-- پرداخت (نسخهٔ اول: دستی؛ ساختار آماده برای اتصال درگاه واقعی در آینده)
CREATE TABLE IF NOT EXISTS payments (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    order_id INT UNSIGNED NOT NULL,
    status ENUM('pending','awaiting_payment','paid','failed','cancelled','refunded')
        NOT NULL DEFAULT 'awaiting_payment',
    amount DECIMAL(14,0) NOT NULL,           -- همیشه از orders.final_amount کپی می‌شود، هرگز مستقل تعیین نمی‌شود
    method VARCHAR(64) NULL,                 -- 'manual' یا نام Provider (idpay/zibal/...)
    transaction_ref VARCHAR(191) NULL,       -- شناسه تراکنش/رسید
    reference_info TEXT NULL,                -- JSON آزاد برای اطلاعات مرجع اضافه (مثلاً پاسخ خام درگاه در آینده)
    confirmed_by_admin_id INT UNSIGNED NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    paid_at DATETIME NULL,
    FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE,
    FOREIGN KEY (confirmed_by_admin_id) REFERENCES admins(id) ON DELETE SET NULL,
    INDEX idx_order (order_id),
    INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- تاریخچهٔ تغییر وضعیت پرداخت
CREATE TABLE IF NOT EXISTS payment_status_history (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    payment_id INT UNSIGNED NOT NULL,
    old_status VARCHAR(32) NULL,
    new_status VARCHAR(32) NOT NULL,
    changed_by ENUM('system','admin','customer') NOT NULL DEFAULT 'system',
    note VARCHAR(255) NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (payment_id) REFERENCES payments(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- تاریخچهٔ فعال/غیرفعال شدن VIP (چه خودکار چه دستی)
CREATE TABLE IF NOT EXISTS customer_vip_history (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    customer_id INT UNSIGNED NOT NULL,
    old_value TINYINT(1) NOT NULL,
    new_value TINYINT(1) NOT NULL,
    reason VARCHAR(255) NULL,
    changed_by ENUM('system','admin') NOT NULL DEFAULT 'system',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Intent Engine: کلیدواژه‌های هر Intent، قابل ویرایش از پنل بدون تغییر کد.
-- intent_key به یک Handler ثابت در کد وصل است (چون اغلب Intentها به Database واقعی نیاز دارند)؛
-- آنچه از پنل قابل تنظیم است، عبارات/کلیدواژه‌هایی است که به هر Intent متصل می‌شوند.
CREATE TABLE IF NOT EXISTS intent_rules (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    intent_key VARCHAR(64) NOT NULL,
    keywords TEXT NOT NULL,          -- هر عبارت در یک خط
    enabled TINYINT(1) NOT NULL DEFAULT 1,
    priority INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_intent_key (intent_key)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO intent_rules (intent_key, keywords, priority) VALUES
('greeting', 'سلام\nسلام خوبی\nدرود\nهای\nhi\nhello\nشروع', 100),
('service_list', 'خدمات\nسرویس ها\nسرویس‌ها\nانواع تبلیغ\nچه تبلیغاتی دارید\nلیست تبلیغات\nمعرفی خدمات', 100),
('price_question', 'قیمت\nهزینه\nتعرفه\nچند\nچنده\nقیمتش چنده\nهزینه اش چقدره', 90),
('condition_question', 'شرایط\nقوانین\nضوابط\nچجوریه\nچطوریه', 80),
('show_channels', 'نمونه کانال\nکانال نمونه\nنمونه کار\nمثال کانال', 90),
('order_start', 'ثبت سفارش\nسفارش میخوام\nمیخوام سفارش بدم\nسفارش بدم', 90),
('order_status', 'سفارشم\nوضعیت سفارش\nپیگیری سفارش\nسفارش من کجاست\nسفارشات من', 95),
('payment_status', 'وضعیت پرداخت\nپرداخت کردم\nپولو واریز کردم\nواریز کردم', 95),
('contact_admin', 'ارتباط با مدیر\nمدیر\nپشتیبانی\nصحبت با پشتیبانی\nاپراتور', 85),
('discount_question', 'تخفیف\nتخفیف دارید\nکد تخفیف\nکد تخفیف دارید', 85),
('vip_question', 'وی آی پی\nvip\nمشتری ویژه\nمن وی ای پی هستم', 85),
('cancel_order', 'لغو سفارش\nکنسل کن\nسفارش رو لغو کن\nمنصرف شدم', 90),
('go_back', 'برگرد\nبازگشت\nمرحله قبل\nقبلی', 70),
('faq_general', 'سوالات متداول\nسوال دارم\nfaq', 70);

-- تنظیمات معیار VIP (پیشرفته‌تر از مرحلهٔ ۴: بازهٔ زمانی و نحوهٔ ترکیب معیارها)
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES
    ('vip_window_days', '0'),
    ('vip_combine_mode', 'any');
