-- ============================================================
--  Mafioso WaRs  |  Database Schema + Seed Data + Stickers
--  MySQL 5.7+ / MariaDB 10.3+
--  نسخه نهایی – با تمام تغییرات:
--  defensive_power_bonus, code_*, chest_continue_used, 
--  last_slogan_at, penalty_applied, tournament_closed, 
--  is_closed_for_claims, prizes_announced_at, claimed_prize,
--  active_defense_break_until, active_misinfo_until
-- ============================================================

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ------------------------------------------------------------
-- 1) PLAYERS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `players`;
CREATE TABLE `players` (
  `id`                BIGINT UNSIGNED NOT NULL,
  `username`          VARCHAR(64)     DEFAULT NULL,
  `first_name`        VARCHAR(128)    DEFAULT NULL,
  `coins`             BIGINT UNSIGNED NOT NULL DEFAULT 500,
  `diamonds`          INT UNSIGNED    NOT NULL DEFAULT 10,
  `banknotes`         INT UNSIGNED    NOT NULL DEFAULT 0,
  `points`            INT UNSIGNED    NOT NULL DEFAULT 0,
  `godfather_level`   TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `lab_level`         TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `power_level`       TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `selected_hero_id`      TINYINT UNSIGNED DEFAULT NULL,
  `active_support_id`     TINYINT UNSIGNED DEFAULT NULL,
  `active_power_spell_until`   DATETIME DEFAULT NULL,
  `active_score_spell_until`   DATETIME DEFAULT NULL,
  `active_defense_break_used`  TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `active_defense_break_until` DATETIME DEFAULT NULL,
  `active_misinfo_until`       DATETIME DEFAULT NULL,
  `misinfo_active`    TINYINT(1) NOT NULL DEFAULT 0,
  `misinfo_power`     INT DEFAULT NULL,
  `misinfo_coins`     BIGINT DEFAULT NULL,
  `misinfo_diamonds`  INT DEFAULT NULL,
  `misinfo_banknotes` INT DEFAULT NULL,
  `shield_until`      DATETIME DEFAULT NULL,
  `attacks_received_window_start` DATETIME DEFAULT NULL,
  `attacks_received_count`        INT UNSIGNED NOT NULL DEFAULT 0,
  `last_daily_gift_at`     DATE DEFAULT NULL,
  `last_mission_reset_at`  DATE DEFAULT NULL,
  `mission_completed_count` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `daily_banknote_points_used` INT UNSIGNED NOT NULL DEFAULT 0,
  `invited_by`         BIGINT UNSIGNED DEFAULT NULL,
  `pending_action`     VARCHAR(64) DEFAULT NULL,
  `admin_ban_target`   BIGINT DEFAULT NULL,
  `created_at`         DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at`         DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  -- DEFENSIVE CARDS
  `defensive_card_active` VARCHAR(32) DEFAULT NULL,
  `defensive_card_expires_at` DATETIME DEFAULT NULL,
  `defensive_power_bonus` INT UNSIGNED NOT NULL DEFAULT 0,
  -- CHEST
  `chest_board` JSON DEFAULT NULL,
  `chest_board_revealed` JSON DEFAULT NULL,
  `chest_extra_slots` TINYINT UNSIGNED NOT NULL DEFAULT 0,
  `pending_chest_type` VARCHAR(20) DEFAULT NULL,
  `chest_continue_used` TINYINT(1) NOT NULL DEFAULT 0,
  -- EXCHANGE
  `last_banknote_claim_at` DATETIME DEFAULT NULL,
  `last_slogan_at` DATETIME DEFAULT NULL,
  -- CODE GENERATION
  `code_coins`     INT UNSIGNED NOT NULL DEFAULT 0,
  `code_diamonds`  INT UNSIGNED NOT NULL DEFAULT 0,
  `code_banknotes` INT UNSIGNED NOT NULL DEFAULT 0,
  `code_points`    INT UNSIGNED NOT NULL DEFAULT 0,
  `code_max_uses`  INT UNSIGNED NOT NULL DEFAULT 1,
  `code_hours`     INT UNSIGNED NOT NULL DEFAULT 24,
  PRIMARY KEY (`id`),
  KEY `idx_points` (`points`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 2) HEROES
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `heroes`;
CREATE TABLE `heroes` (
  `id`    TINYINT UNSIGNED NOT NULL,
  `name`  VARCHAR(64) NOT NULL,
  `unlock_building_level` TINYINT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `heroes` (`id`,`name`,`unlock_building_level`) VALUES
 (1, N'قباد آمپولی', 1),
 (2, N'فری خرشوت',   2),
 (3, N'اسی شپش',     3),
 (4, N'شاپور گاوکش', 4),
 (5, N'کریم سوسکی',  5),
 (6, N'سوسن چارسو',  6),
 (7, N'شهدخت',       7);

-- ------------------------------------------------------------
-- 3) ABILITY CARDS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `hero_cards`;
CREATE TABLE `hero_cards` (
  `id`          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `hero_id`     TINYINT UNSIGNED NOT NULL,
  `slot`        TINYINT UNSIGNED NOT NULL,
  `name`        VARCHAR(64) NOT NULL,
  `card_type`   VARCHAR(32) NOT NULL,
  `effect_key`  VARCHAR(32) NOT NULL,
  `effect_value` DECIMAL(6,2) NOT NULL DEFAULT 0,
  `effect_text` VARCHAR(255) NOT NULL,
  `win_reward_text` VARCHAR(120) NOT NULL,
  `win_reward_key`  VARCHAR(32) NOT NULL,
  `win_reward_value` INT NOT NULL DEFAULT 0,
  `sticker_id`  VARCHAR(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_hero_slot` (`hero_id`,`slot`),
  KEY `idx_name` (`name`),
  CONSTRAINT `fk_card_hero` FOREIGN KEY (`hero_id`) REFERENCES `heroes`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `hero_cards`
 (`hero_id`,`slot`,`name`,`card_type`,`effect_key`,`effect_value`,`effect_text`,`win_reward_text`,`win_reward_key`,`win_reward_value`) VALUES
(1,1,N'آمپول گاوی',      N'تهاجمی', 'atk_power_pct',   10, N'۱۰٪ افزایش قدرت حمله', N'+۱۰۰ سکه تضمینی', 'coins', 100),
(1,2,N'ویتامین',         N'دفاعی',  'defensive_card',  30, N'۳۰ دقیقه کارت دفاعی فعال می‌شود', N'+۱ امتیاز اضافه', 'points', 1),
(1,3,N'کاتالیزور',       N'تقویت طلسم', 'spell_boost_pct', 20, N'قدرت طلسم‌های فعال ۲۰٪ بیشتر', N'+۱ الماس تضمینی', 'diamonds', 1),
(2,1,N'دیواری',          N'دفاعی', 'defense_add_pct', 20, N'۲۰٪ قدرت دفاع به قدرت نهایی اضافه می‌شود', N'+۸۰ سکه تضمینی', 'coins', 80),
(2,2,N'خاطرخواه',        N'دفاعی',  'defensive_card',  45, N'۴۵ دقیقه کارت دفاعی فعال می‌شود', N'+۱ الماس تضمینی', 'diamonds', 1),
(2,3,N'چکشی',            N'تهاجمی', 'enemy_support_weak_pct', 10, N'کارت حمایت حریف ۱۰٪ ضعیف‌تر محاسبه می‌شود', N'+۱ امتیاز', 'points', 1),
(3,1,N'ضعیف‌کش',         N'غارت', 'loot_bonus_if_stronger_pct', 20, N'اگر قدرت شما بیشتر باشد ۲۰٪ غنیمت بیشتر', N'+۱۵۰ سکه تضمینی', 'coins', 150),
(3,2,N'قمه‌کش',          N'تهاجمی', 'atk_power_pct', 10, N'۱۰٪ افزایش قدرت حمله', N'+۱ امتیاز', 'points', 1),
(3,3,N'زنجیری',          N'کنترل', 'shield_delay_min', 30, N'سپر محافظ حریف با ۳۰ دقیقه تأخیر فعال می‌شود', N'+۱ الماس تضمینی', 'diamonds', 1),
(4,1,N'گلنگدن',          N'تهاجمی', 'loot_chance_bonus_pct', 15, N'۱۵٪ شانس دریافت غنیمت بیشتر', N'+۱۲۰ سکه تضمینی', 'coins', 120),
(4,2,N'رخصت',            N'اقتصادی', 'attack_cost_discount', 20, N'هزینه حمله ۲۰ سکه کمتر می‌شود', N'+۱ امتیاز', 'points', 1),
(4,3,N'خلاصی',           N'قدرت', 'close_gap_bonus', 5, N'اگر اختلاف قدرت کمتر از ۵ باشد، ۵ قدرت اضافه', N'+۲ الماس تضمینی', 'diamonds', 2),
(5,1,N'بنگ بنگ',         N'تهاجمی', 'atk_power_pct', 12, N'۱۲٪ افزایش قدرت حمله', N'+۱۰۰ سکه تضمینی', 'coins', 100),
(5,2,N'سگ‌خور',          N'غارت', 'coin_loot_pct', 20, N'۲۰٪ سکه بیشتر از حریف غارت می‌شود', N'+۱ الماس تضمینی', 'diamonds', 1),
(5,3,N'دودره',           N'اقتصادی', 'lose_cost_half', 50, N'در شکست فقط نصف هزینه حمله از بین می‌رود', N'+۲ امتیاز', 'points', 2),
(6,1,N'تفنگ دست‌ساز',    N'تهاجمی', 'atk_power_pct', 8, N'۸٪ افزایش قدرت حمله', N'+۹۰ سکه تضمینی', 'coins', 90),
(6,2,N'بادیگارد',        N'دفاعی',  'defensive_card',  60, N'۶۰ دقیقه کارت دفاعی فعال می‌شود', N'+۱ الماس تضمینی', 'diamonds', 1),
(6,3,N'جسی',             N'ضد دفاع', 'enemy_support_weak_pct', 20, N'کارت حمایت حریف ۲۰٪ ضعیف‌تر محاسبه می‌شود', N'+۱ امتیاز', 'points', 1),
(7,1,N'نیش',             N'تهاجمی', 'atk_power_pct', 10, N'۱۰٪ افزایش قدرت حمله', N'+۱۰۰ سکه تضمینی', 'coins', 100),
(7,2,N'زهر',             N'تقویت طلسم', 'spell_boost_pct', 25, N'قدرت طلسم‌های فعال ۲۵٪ بیشتر', N'+۲ الماس تضمینی', 'diamonds', 2),
(7,3,N'دگردیس',          N'فریب', 'display_power_add', 10, N'هنگام نمایش اطلاعات، ۱۰ قدرت بیشتر نمایش داده می‌شود', N'+۲ امتیاز', 'points', 2);

-- ------------------------------------------------------------
-- 4) PLAYER <-> HEROES
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `player_heroes`;
CREATE TABLE `player_heroes` (
  `player_id`   BIGINT UNSIGNED NOT NULL,
  `hero_id`     TINYINT UNSIGNED NOT NULL,
  `unlocked`    TINYINT(1) NOT NULL DEFAULT 0,
  `hero_level`  TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `card1_level` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `card2_level` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  `card3_level` TINYINT UNSIGNED NOT NULL DEFAULT 1,
  PRIMARY KEY (`player_id`,`hero_id`),
  CONSTRAINT `fk_ph_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_ph_hero` FOREIGN KEY (`hero_id`) REFERENCES `heroes`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 5) SPELLS (با توضیحات جدید)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `spells`;
CREATE TABLE `spells` (
  `id`    TINYINT UNSIGNED NOT NULL,
  `name`  VARCHAR(64) NOT NULL,
  `diamond_cost` INT UNSIGNED NOT NULL,
  `description` VARCHAR(255) NOT NULL,
  `duration_minutes` INT UNSIGNED NOT NULL DEFAULT 60,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `spells` (`id`,`name`,`diamond_cost`,`description`,`duration_minutes`) VALUES
 (1, N'جلوناپذیر',   60, N'با فعال‌سازی این طلسم، به مدت ۶۰ دقیقه می‌توانید به بازیکنانی که سپر محافظ دارند حمله کنید.', 60),
 (2, N'گیج‌کننده',    40, N'اطلاعات نمایشی شما (قدرت/سکه/الماس/اسکناس) به مدت ۶۰ دقیقه قابل تغییر و جعل می‌شود.', 60),
 (3, N'دوپینگ',       30, N'به مدت ۶۰ دقیقه، می‌توانید تا ۲ لول قوی‌تر از خود را شکست دهید (۲۰٪+ قدرت).', 60),
 (4, N'فن آخر',       25, N'در صورت برد، به‌جای ۴ امتیاز، ۶ امتیاز می‌گیرید (به مدت ۶۰ دقیقه).', 60);

-- ------------------------------------------------------------
-- 6) PLAYER SPELL INVENTORY
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `player_spell_inventory`;
CREATE TABLE `player_spell_inventory` (
  `player_id` BIGINT UNSIGNED NOT NULL,
  `spell_id`  TINYINT UNSIGNED NOT NULL,
  `expires_at` DATETIME NOT NULL,
  PRIMARY KEY (`player_id`,`spell_id`),
  CONSTRAINT `fk_psi_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_psi_spell` FOREIGN KEY (`spell_id`) REFERENCES `spells`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 7) UPGRADE QUEUES
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `building_upgrades`;
CREATE TABLE `building_upgrades` (
  `id`  INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `player_id` BIGINT UNSIGNED NOT NULL,
  `building`  ENUM('godfather','lab','power') NOT NULL,
  `target_level` TINYINT UNSIGNED NOT NULL,
  `finish_at` DATETIME NOT NULL,
  `completed` TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_pending` (`player_id`,`building`,`completed`),
  CONSTRAINT `fk_bu_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `hero_upgrades`;
CREATE TABLE `hero_upgrades` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `player_id` BIGINT UNSIGNED NOT NULL,
  `hero_id` TINYINT UNSIGNED NOT NULL,
  `upgrade_type` ENUM('hero','card1','card2','card3') NOT NULL,
  `target_level` TINYINT UNSIGNED NOT NULL,
  `finish_at` DATETIME NOT NULL,
  `completed` TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  KEY `idx_pending` (`player_id`,`hero_id`,`completed`),
  CONSTRAINT `fk_hu_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 8) ATTACKS LOG
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `attacks`;
CREATE TABLE `attacks` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `attacker_id` BIGINT UNSIGNED NOT NULL,
  `defender_id` BIGINT UNSIGNED NOT NULL,
  `card_id`     INT UNSIGNED NOT NULL,
  `attacker_power` INT NOT NULL,
  `defender_power` INT NOT NULL,
  `result`      ENUM('win','lose') NOT NULL,
  `coins_looted`    BIGINT NOT NULL DEFAULT 0,
  `diamonds_looted` INT NOT NULL DEFAULT 0,
  `points_gained`   INT NOT NULL DEFAULT 0,
  `created_at`  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_attacker` (`attacker_id`),
  KEY `idx_defender` (`defender_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 9) DAILY MISSIONS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `mission_templates`;
CREATE TABLE `mission_templates` (
  `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT,
  `title` VARCHAR(128) NOT NULL,
  `reward_coins` INT UNSIGNED NOT NULL DEFAULT 150,
  `reward_diamonds` INT UNSIGNED NOT NULL DEFAULT 1,
  `reward_banknotes` INT UNSIGNED NOT NULL DEFAULT 2,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `mission_templates` (`title`) VALUES
 (N'یک حمله موفق انجام بده'),
 (N'یک ساختمان را ارتقا بده'),
 (N'یک کارت توانایی را ارتقا بده'),
 (N'هدیه روزانه را دریافت کن'),
 (N'یک دوست دعوت کن');

DROP TABLE IF EXISTS `player_missions`;
CREATE TABLE `player_missions` (
  `player_id`  BIGINT UNSIGNED NOT NULL,
  `mission_id` TINYINT UNSIGNED NOT NULL,
  `mission_date` DATE NOT NULL,
  `completed`  TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`player_id`,`mission_id`,`mission_date`),
  CONSTRAINT `fk_pm_player` FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_pm_mission` FOREIGN KEY (`mission_id`) REFERENCES `mission_templates`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 10) INVITES (با ستون penalty_applied)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `invites`;
CREATE TABLE `invites` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `inviter_id` BIGINT UNSIGNED NOT NULL,
  `invited_id` BIGINT UNSIGNED NOT NULL,
  `rewarded`   TINYINT(1) NOT NULL DEFAULT 0,
  `last_penalty_at` DATETIME DEFAULT NULL,
  `penalty_applied` TINYINT(1) NOT NULL DEFAULT 0,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_invited` (`invited_id`),
  KEY `idx_inviter` (`inviter_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 11) ADMIN TABLES
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `admins`;
CREATE TABLE `admins` (
  `user_id`    BIGINT NOT NULL,
  `role`       ENUM('super_admin','admin','moderator') NOT NULL DEFAULT 'admin',
  `added_by`   BIGINT DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `allowed_groups`;
CREATE TABLE `allowed_groups` (
  `group_id`   BIGINT NOT NULL,
  `group_name` VARCHAR(128) DEFAULT NULL,
  `added_by`   BIGINT DEFAULT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `required_channels`;
CREATE TABLE `required_channels` (
  `channel_id`   BIGINT NOT NULL,
  `channel_username` VARCHAR(64) NOT NULL,
  `channel_name` VARCHAR(128) DEFAULT NULL,
  `added_by`     BIGINT DEFAULT NULL,
  `created_at`   DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`channel_id`),
  UNIQUE KEY `uniq_username` (`channel_username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `banned_users`;
CREATE TABLE `banned_users` (
  `user_id`    BIGINT NOT NULL,
  `reason`     VARCHAR(255) DEFAULT NULL,
  `banned_by`  BIGINT NOT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================
--  ادمین اولیه (با آیدی خودت جایگزین کن)
-- ============================================================
INSERT INTO admins (user_id, role) VALUES (7586718820, 'super_admin');

-- ------------------------------------------------------------
-- 12) PROMO CODES
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `promo_codes`;
CREATE TABLE `promo_codes` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `code` VARCHAR(32) NOT NULL,
  `reward_coins` INT UNSIGNED NOT NULL DEFAULT 0,
  `reward_diamonds` INT UNSIGNED NOT NULL DEFAULT 0,
  `reward_banknotes` INT UNSIGNED NOT NULL DEFAULT 0,
  `reward_points` INT UNSIGNED NOT NULL DEFAULT 0,
  `max_uses` INT UNSIGNED NOT NULL DEFAULT 1,
  `used_count` INT UNSIGNED NOT NULL DEFAULT 0,
  `expires_at` DATETIME NOT NULL,
  `created_by` BIGINT NOT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_code` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

DROP TABLE IF EXISTS `promo_code_usages`;
CREATE TABLE `promo_code_usages` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `code_id` INT UNSIGNED NOT NULL,
  `user_id` BIGINT NOT NULL,
  `used_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_user_code` (`code_id`,`user_id`),
  CONSTRAINT `fk_pcu_code` FOREIGN KEY (`code_id`) REFERENCES `promo_codes`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 13) SLOGAN CLAIMS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `slogan_claims`;
CREATE TABLE `slogan_claims` (
  `user_id` BIGINT NOT NULL,
  `last_claim_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 14) CHEST OPENS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `chest_opens`;
CREATE TABLE `chest_opens` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` BIGINT NOT NULL,
  `chest_type` ENUM('wood','iron','giant','royal') NOT NULL,
  `reward_type` VARCHAR(32) NOT NULL,
  `reward_amount` INT UNSIGNED NOT NULL,
  `opened_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 15) EXCHANGE SETTINGS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `exchange_settings`;
CREATE TABLE `exchange_settings` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `banknote_to_diamond_rate` INT UNSIGNED NOT NULL DEFAULT 100,
  `diamond_to_point_rate` INT UNSIGNED NOT NULL DEFAULT 10,
  `base_banknotes_per_hour` INT UNSIGNED NOT NULL DEFAULT 10,
  `coin_to_banknote_rate` INT UNSIGNED NOT NULL DEFAULT 100,
  `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO exchange_settings (banknote_to_diamond_rate, diamond_to_point_rate, base_banknotes_per_hour, coin_to_banknote_rate)
VALUES (100, 10, 10, 100);

-- ------------------------------------------------------------
-- 16) BOT MESSAGES (برای پاک‌سازی خودکار)
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `bot_messages`;
CREATE TABLE `bot_messages` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `chat_id` BIGINT NOT NULL,
  `message_id` INT NOT NULL,
  `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 17) TOURNAMENTS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `tournaments`;
CREATE TABLE `tournaments` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `starts_at` DATETIME NOT NULL,
  `ends_at`   DATETIME NOT NULL,
  `closed`    TINYINT(1) NOT NULL DEFAULT 0,
  `is_closed_for_claims` TINYINT(1) NOT NULL DEFAULT 0,
  `prizes_announced_at` DATETIME DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ------------------------------------------------------------
-- 18) TOURNAMENT RESULTS
-- ------------------------------------------------------------
DROP TABLE IF EXISTS `tournament_results`;
CREATE TABLE `tournament_results` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `tournament_id` INT UNSIGNED NOT NULL,
  `player_id` BIGINT UNSIGNED NOT NULL,
  `rank` TINYINT UNSIGNED NOT NULL,
  `points` INT UNSIGNED NOT NULL,
  `claimed_prize` TINYINT(1) NOT NULL DEFAULT 0,
  PRIMARY KEY (`id`),
  CONSTRAINT `fk_tr_tournament` FOREIGN KEY (`tournament_id`) REFERENCES `tournaments`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ============================================================
--  تنظیم استیکرهای کارت‌ها (نسخه نهایی)
-- ============================================================

-- قباد آمپولی
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qNlmpauruMrCB100FGUhmotVF33ucwAAIsBgACM2thRmZYgMg9IhwHPQQ' WHERE id = 1;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qNl2paurvZkGijkdos3t6oN27xNFitAAJzCAACfhVgRhIwIgkXKwMPPQQ' WHERE id = 2;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qNmWpaurvPVcbdWhtj8nOVZB6c6WUiAAKDCQACiDpgRpCTO23raTcfPQQ' WHERE id = 3;

-- فری خرشوت
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPoGpavQZLUevJ0C8HVREivaK6bHxZAAJpBQACtUBoRtdi-ReBNHhRPQQ' WHERE id = 4;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPompavQaOY4eBfScjMmESmoqsTpRIAALbBgACfDloRnWf5rOmR-NJPQQ' WHERE id = 5;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPpGpavQYV8xU6D2Im2pHopyeoGcFVAAI1BwACS-xoRugveoh-TwUmPQQ' WHERE id = 6;

-- اسی شپش
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP7GpavU__ChXcDrw8rhA6dVxkBWUgAAIiEAACOGd5RlXeanKJLu7cPQQ' WHERE id = 7;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP72pavU_2hxKXuM_EDheBD3IuLiWlAAJHBgACgw1wRmGCHxESL3c8PQQ' WHERE id = 8;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP9GpavVB9hcJB3N1zbbz1End6xtbpAAJ_CAACBDFwRrVCrN_e49qgPQQ' WHERE id = 9;

-- شاپور گاوکش
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPv2pavR67Z7biQcU0Wz5AokJizXw8AAIPBgACnLVoRg1XJadA08RvPQQ' WHERE id = 10;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPwWpavR4I4b1n20Y9iKgms0zumu2IAAIiBwACrkFoRsIIw00Ylb6gPQQ' WHERE id = 11;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qPw2pavR4ico2JRlzpFWVvx1HkAil3AAL-BwACrBtpRmAex_jt_CV8PQQ' WHERE id = 12;

-- کریم سوسکی
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP02pavTLfu0_3-jgsQlHXt2AsraeWAAIZBwACT9poRhjlEztSUFoYPQQ' WHERE id = 13;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP1GpavTL6MUFqasMPCW5ucByqBUodAAI2EAAC-8xxRnardCujclJZPQQ' WHERE id = 14;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP1WpavTISJdJVcSD8rHuAM2Bi9eu6AALmBwACkCdoRnMfMPpAktsqPQQ' WHERE id = 15;

-- سوسن چارسو
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP32pavTwerkAqCjfkkLJZTEI1W5lJAAIRBwAC1wlpRqSk9yr07zyvPQQ' WHERE id = 16;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP4WpavTz1opf_FNMMKKj9wF0UlKeIAAL9BgACel9pRjDOpO-PWl3JPQQ' WHERE id = 17;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qP42pavT2xRJzYW9habo1Rmt9BDg6xAALIBwACkRlwRmFzVAS5OUu9PQQ' WHERE id = 18;

-- شهدخت
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qQSmpavduZIgthTH4u8A4347awHaYxAAIwCAAC0ZlxRt2BsmhbBEwfPQQ' WHERE id = 19;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qQTWpavdsBQ0xvcelRygy3_zqRtbjxAAIUBwACzdVwRqzlpU8SNeKbPQQ' WHERE id = 20;
UPDATE hero_cards SET sticker_id = 'CAACAgEAAxkBA1qQUGpavdwIbMGV2q6MVijV1NrA6lqaAALfBwACOJt4RmJ-w9kDcdVFPQQ' WHERE id = 21;

-- ============================================================
--  تنظیم مقادیر اولیه JSON برای کاربران موجود
-- ============================================================

UPDATE `players` 
SET 
    `chest_board` = JSON_ARRAY(0,0,0,0,0,0,0,0,0),
    `chest_board_revealed` = JSON_ARRAY(0,0,0,0,0,0,0,0,0),
    `chest_continue_used` = 0
WHERE `chest_board` IS NULL OR `chest_board` = '';

-- ============================================================
--  همگام‌سازی last_slogan_at با slogan_claims (برای کاربران موجود)
-- ============================================================

UPDATE players p
JOIN slogan_claims s ON p.id = s.user_id
SET p.last_slogan_at = s.last_claim_at
WHERE p.last_slogan_at IS NULL;

-- ============================================================
--  تنظیم تورنومنت اولیه (در صورت خالی بودن)
-- ============================================================
INSERT INTO `tournaments` (`starts_at`, `ends_at`, `closed`, `is_closed_for_claims`) 
SELECT NOW(), DATE_ADD(NOW(), INTERVAL 14 DAY), 0, 0
WHERE NOT EXISTS (SELECT 1 FROM `tournaments`);

-- ============================================================
--  پایان فایل دیتابیس
-- ============================================================

SET FOREIGN_KEY_CHECKS = 1;