-- migrate_v3.sql
-- ارتقا از نسخه‌ی ۲/۲.۱ به ۲.۲: پلن‌های خرید، اطلاع‌رسانی چندگانه‌ی تراکنش، کانال عضویت اجباری.
-- قبل از اجرا حتما از دیتابیس بکاپ بگیرید. اگر install.sql یا migrate_v2.sql را هنوز اجرا نکرده‌اید،
-- این فایل به‌تنهایی کافی نیست.

CREATE TABLE IF NOT EXISTS plans (
    id INT AUTO_INCREMENT PRIMARY KEY,
    panel_id INT NOT NULL,
    name VARCHAR(100) NOT NULL,
    mode ENUM('metered','flat') NOT NULL DEFAULT 'metered',
    price BIGINT NULL,
    price_per_gb BIGINT NULL,
    max_users INT NULL,
    data_limit_gb DECIMAL(10,2) NULL,
    duration_days INT NULL,
    is_active TINYINT(1) NOT NULL DEFAULT 1,
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (panel_id) REFERENCES panels(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE representatives
    ADD COLUMN plan_id INT NULL AFTER panel_id,
    ADD COLUMN mode ENUM('metered','flat') NOT NULL DEFAULT 'metered' AFTER panel_password,
    ADD COLUMN max_users INT NULL AFTER price_per_gb,
    ADD COLUMN data_limit_bytes BIGINT NULL DEFAULT 0 AFTER max_users,
    ADD COLUMN expire_at DATETIME NULL AFTER data_limit_bytes,
    ADD CONSTRAINT fk_rep_plan FOREIGN KEY (plan_id) REFERENCES plans(id) ON DELETE SET NULL;

ALTER TABLE transactions
    ADD COLUMN reviewed_by BIGINT NULL AFTER admin_note;

CREATE TABLE IF NOT EXISTS transaction_notifications (
    id INT AUTO_INCREMENT PRIMARY KEY,
    transaction_id INT NOT NULL,
    owner_telegram_id BIGINT NOT NULL,
    message_id BIGINT NOT NULL,
    FOREIGN KEY (transaction_id) REFERENCES transactions(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS force_join_channels (
    id INT AUTO_INCREMENT PRIMARY KEY,
    chat_ref VARCHAR(150) NOT NULL,
    title VARCHAR(150) NULL,
    invite_link VARCHAR(255) NULL,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- برای هر پنل موجود، یک پلن «متری (پیش‌فرض)» بساز که رفتار قبلی (کسر بر اساس مصرف
-- با قیمت سراسری) را حفظ می‌کند تا نمایندگی‌های قبلی و خرید جدید بدون تغییر کار کنند.
INSERT INTO plans (panel_id, name, mode, price_per_gb, is_active, sort_order)
SELECT id, 'متری (پیش‌فرض)', 'metered', NULL, 1, 0 FROM panels
WHERE id NOT IN (SELECT panel_id FROM plans WHERE mode = 'metered' AND price_per_gb IS NULL);

-- نمایندگی‌های قبلی را به همان پلن متری پیش‌فرض همان پنل وصل کن
UPDATE representatives r
JOIN plans p ON p.panel_id = r.panel_id AND p.mode = 'metered' AND p.price_per_gb IS NULL
SET r.plan_id = p.id, r.mode = 'metered'
WHERE r.plan_id IS NULL;
