-- =====================================================================
-- BarKala v152 — بازاریاب: سرنخ‌ها روی سرور، امنیت (PIN/دستگاه/تعویض لینک)، قوانین پورسانت،
--               درخواست برداشت و تسویه، اعلان‌ها، گزارش‌ها
-- Target: MariaDB 10.11. این فایل «قابل اجرای مجدد» است؛ روی دیتابیس موجود و بعد از فایل‌های v149 اجرا شود.
-- =====================================================================
SET NAMES utf8mb4;

-- (۱) مقدار تنظیمات به TEXT: لیست محصولات «کاتالوگ اختصاصی بازاریاب» در VARCHAR(255) جا نمی‌شد.
ALTER TABLE `bk_kv_settings` MODIFY COLUMN `v` TEXT NULL;

-- (۲) ستون‌های امنیت و تلگرام بازاریاب
ALTER TABLE `bk_marketers`
  ADD COLUMN IF NOT EXISTS `pin_hash` VARCHAR(255) NULL,
  ADD COLUMN IF NOT EXISTS `pin_set_at` DATETIME NULL,
  ADD COLUMN IF NOT EXISTS `pin_fail` INT NOT NULL DEFAULT 0,
  ADD COLUMN IF NOT EXISTS `pin_locked_until` DATETIME NULL,
  ADD COLUMN IF NOT EXISTS `tg_chat_id` BIGINT NULL,
  ADD COLUMN IF NOT EXISTS `tg_link_code` VARCHAR(16) NULL,
  ADD COLUMN IF NOT EXISTS `tg_link_expires` DATETIME NULL,
  ADD COLUMN IF NOT EXISTS `disabled_reason` VARCHAR(191) NULL;

-- (۳) لینک‌های باطل‌شده (بعد از «تعویض لینک»)
CREATE TABLE IF NOT EXISTS `bk_marketer_revoked` (
  `token` VARCHAR(191) NOT NULL,
  `replaced_by` VARCHAR(191) NULL,
  `revoked_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۴) دستگاه‌های مورد اعتماد (بعد از تعیین PIN)
CREATE TABLE IF NOT EXISTS `bk_marketer_devices` (
  `id` CHAR(36) NOT NULL,
  `marketer_token` VARCHAR(191) NOT NULL,
  `device_hash` CHAR(64) NOT NULL,
  `label` VARCHAR(120) NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_seen` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `revoked` TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_dev_marketer` (`marketer_token`, `revoked`),
  KEY `idx_dev_hash` (`device_hash`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۵) سرنخ‌ها و پیگیری‌ها (CRM بازاریاب)
CREATE TABLE IF NOT EXISTS `bk_marketer_leads` (
  `id` VARCHAR(64) NOT NULL,
  `marketer_token` VARCHAR(191) NOT NULL,
  `name` VARCHAR(191) NULL,
  `phone` VARCHAR(64) NULL,
  `stage` VARCHAR(24) NOT NULL DEFAULT 'lead',
  `remind_at` BIGINT NULL,
  `reminded` TINYINT(1) NOT NULL DEFAULT 0,
  `payload` MEDIUMTEXT NOT NULL,
  `updated_ms` BIGINT NOT NULL DEFAULT 0,
  `deleted` TINYINT(1) NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`marketer_token`, `id`),
  KEY `idx_lead_remind` (`deleted`, `reminded`, `remind_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۶) تنظیمات شخصی بازاریاب (هدف فروش، متن دعوت، ...)
CREATE TABLE IF NOT EXISTS `bk_marketer_prefs` (
  `marketer_token` VARCHAR(191) NOT NULL,
  `prefs` MEDIUMTEXT NOT NULL,
  `updated_ms` BIGINT NOT NULL DEFAULT 0,
  PRIMARY KEY (`marketer_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۷) قوانین پورسانت به‌ازای محصول (اختیاری: ویژهٔ یک بازاریاب)
CREATE TABLE IF NOT EXISTS `bk_commission_rules` (
  `id` CHAR(36) NOT NULL,
  `scope_key` VARCHAR(400) NOT NULL,
  `marketer_token` VARCHAR(191) NULL,
  `product_key` VARCHAR(191) NOT NULL,
  `label` VARCHAR(191) NOT NULL,
  `pct` DECIMAL(5,2) NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_rule_scope` (`scope_key`(300)),
  KEY `idx_rule_marketer` (`marketer_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۸) درخواست برداشت و تسویه
CREATE TABLE IF NOT EXISTS `bk_marketer_withdrawals` (
  `id` CHAR(36) NOT NULL,
  `marketer_token` VARCHAR(191) NOT NULL,
  `amount` DECIMAL(16,2) NOT NULL,
  `status` VARCHAR(16) NOT NULL DEFAULT 'requested',   -- requested | approved | rejected | paid | cancelled
  `dest` VARCHAR(64) NULL,
  `note` VARCHAR(500) NULL,
  `admin_note` VARCHAR(500) NULL,
  `ref_no` VARCHAR(64) NULL,
  `requested_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `decided_at` DATETIME NULL,
  `paid_at` DATETIME NULL,
  PRIMARY KEY (`id`),
  KEY `idx_wd_marketer` (`marketer_token`, `status`),
  KEY `idx_wd_status` (`status`, `requested_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- (۹) اعلان‌های داخل پنل بازاریاب
CREATE TABLE IF NOT EXISTS `bk_marketer_notifications` (
  `id` CHAR(36) NOT NULL,
  `marketer_token` VARCHAR(191) NOT NULL,
  `kind` VARCHAR(24) NOT NULL,
  `title` VARCHAR(191) NOT NULL,
  `body` VARCHAR(1000) NULL,
  `is_read` TINYINT(1) NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_ntf_marketer` (`marketer_token`, `is_read`, `created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
