-- ==========================================================
--  دیتابیس ربات آپلودر
--  این فایل را یک‌بار در phpMyAdmin یا با دستور mysql اجرا کنید
-- ==========================================================

CREATE TABLE IF NOT EXISTS users (
  id BIGINT PRIMARY KEY,
  username VARCHAR(255) NULL,
  first_name VARCHAR(255) NULL,
  joined_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  -- ستون‌های ضد اسپم
  last_msg_at DATETIME NULL,
  msg_count INT DEFAULT 0,
  spam_block_until DATETIME NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS admins (
  id BIGINT PRIMARY KEY,
  added_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS settings (
  `key` VARCHAR(100) PRIMARY KEY,
  `value` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS force_channels (
  id INT AUTO_INCREMENT PRIMARY KEY,
  chat_id BIGINT NOT NULL,
  title VARCHAR(255) NOT NULL,
  invite_link VARCHAR(255) NOT NULL,
  is_active TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  code VARCHAR(6) NOT NULL UNIQUE,
  is_album TINYINT(1) DEFAULT 0,
  music_chat_id BIGINT NULL,
  music_msg_id BIGINT NULL,
  video_chat_id BIGINT NULL,
  video_msg_id BIGINT NULL,
  ad_chat_id BIGINT NULL,
  ad_msg_id BIGINT NULL,
  status ENUM('active','expired') DEFAULT 'active',
  views INT DEFAULT 0,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- آیتم‌های یک آپلودِ «آلبوم» (چند موزیک و/یا چند ویدیو زیر یک لینک/کد مشترک)
CREATE TABLE IF NOT EXISTS post_album_items (
  id INT AUTO_INCREMENT PRIMARY KEY,
  post_id INT NOT NULL,
  kind ENUM('music','video') NOT NULL DEFAULT 'music',
  chat_id BIGINT NOT NULL,
  msg_id BIGINT NOT NULL,
  sort_order INT DEFAULT 0,
  FOREIGN KEY (post_id) REFERENCES posts(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE IF NOT EXISTS admin_states (
  admin_id BIGINT PRIMARY KEY,
  state VARCHAR(50) DEFAULT 'idle',
  data TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- جلوگیری از پردازش دوباره‌ی یک آپدیت تلگرام (وقتی به‌خاطر کندی صف، تلگرام همون پیام رو دوباره می‌فرسته)
CREATE TABLE IF NOT EXISTS processed_updates (
  update_id BIGINT PRIMARY KEY,
  processed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  INDEX idx_processed_at (processed_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ارسال همگانی به‌صورت صف/دسته‌ای اجرا می‌شود تا برای تعداد زیاد کاربر (مثلاً ۶۰ هزار نفر)
-- هیچ‌وقت با Timeout هاست مواجه نشود. یک کرون‌جاب هر دقیقه یک دسته را ارسال می‌کند.
CREATE TABLE IF NOT EXISTS broadcast_jobs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  requester_chat_id BIGINT NOT NULL,      -- چه کسی (کدام ادمین) این ارسال را زده، برای گزارش پایانی
  source_chat_id BIGINT NOT NULL,         -- چت مبدا پیام (همان چت ادمین)
  source_msg_id BIGINT NOT NULL,          -- آیدی پیامی که باید کپی و ارسال شود
  status ENUM('pending','running','stopped','done') DEFAULT 'pending',
  total INT DEFAULT 0,
  sent INT DEFAULT 0,
  failed INT DEFAULT 0,
  last_user_id BIGINT DEFAULT 0,          -- مکان‌نما: تا کدام کاربر ارسال شده (برای ادامه از همان‌جا)
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  finished_at DATETIME NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
