CREATE DATABASE IF NOT EXISTS bale_platform
  CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

USE bale_platform;

-- ادمین‌های پلتفرم (شما)
CREATE TABLE admins (
  id         INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  username   VARCHAR(50)  NOT NULL UNIQUE,
  password   VARCHAR(255) NOT NULL,              -- bcrypt
  created_at DATETIME     NOT NULL DEFAULT NOW()
) ENGINE=InnoDB;

-- کسب‌وکارها (هر ردیف = یه بات مستقل)
CREATE TABLE businesses (
  id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name         VARCHAR(100) NOT NULL,
  bot_token    VARCHAR(255) NOT NULL UNIQUE,
  bot_username VARCHAR(100),
  username     VARCHAR(50)  NOT NULL UNIQUE,     -- یوزر پنل کاربری
  password     VARCHAR(255) NOT NULL,
  status       ENUM('active','inactive') NOT NULL DEFAULT 'active',
  created_at   DATETIME NOT NULL DEFAULT NOW()
) ENGINE=InnoDB;

-- تنظیمات هر بات (منو، پیام‌ها، فرم‌ها)
CREATE TABLE bot_settings (
  id           INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  business_id  INT UNSIGNED NOT NULL UNIQUE,
  welcome_msg  TEXT,
  menu_config  JSON,   -- ساختار درختی منوها
  forms_config JSON,   -- تعریف فرم‌ها
  FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- کاربران هر بات (مشتریان کسب‌وکار)
CREATE TABLE bot_users (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  business_id INT UNSIGNED NOT NULL,
  chat_id     BIGINT       NOT NULL,
  first_name  VARCHAR(100),
  last_name   VARCHAR(100),
  phone       VARCHAR(20),
  is_vip      TINYINT(1)   NOT NULL DEFAULT 0,
  state       VARCHAR(100),                      -- وضعیت مکالمه (برای فرم‌ها)
  state_data  JSON,                              -- داده موقت مکالمه
  joined_at   DATETIME NOT NULL DEFAULT NOW(),
  UNIQUE KEY uniq_biz_chat (business_id, chat_id),
  FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ارسال‌های فرم (رزروها، درخواست‌ها و ...)
CREATE TABLE form_submissions (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  business_id INT UNSIGNED NOT NULL,
  form_id     VARCHAR(50)  NOT NULL,             -- شناسه فرم از JSON
  chat_id     BIGINT       NOT NULL,
  user_name   VARCHAR(100),
  data        JSON         NOT NULL,             -- داده‌های پر شده
  status      ENUM('pending','done','cancelled') NOT NULL DEFAULT 'pending',
  note        TEXT,                              -- یادداشت ادمین
  created_at  DATETIME NOT NULL DEFAULT NOW(),
  FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE,
  INDEX idx_biz_status (business_id, status),
  INDEX idx_biz_form   (business_id, form_id)
) ENGINE=InnoDB;

-- لاگ پیام‌های دریافتی (برای دیباگ و آمار)
CREATE TABLE message_logs (
  id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  business_id INT UNSIGNED NOT NULL,
  chat_id     BIGINT       NOT NULL,
  direction   ENUM('in','out') NOT NULL,
  content     TEXT,
  created_at  DATETIME NOT NULL DEFAULT NOW(),
  INDEX idx_biz_date (business_id, created_at),
  FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- ادمین پیش‌فرض (پسورد: admin123 — بعد از نصب عوض کنید)
INSERT INTO admins (username, password)
VALUES ('admin', '$2y$12$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');