-- =====================================================================
-- schema.sql
-- ساختار دیتابیس MySQL برای ربات فروشگاه ساخت اپ
-- این فایل را یک بار روی دیتابیس خودتان (که در config.php مشخص کردید) اجرا کنید.
-- =====================================================================

SET NAMES utf8mb4;

-- ---------------------------------------------------------------------
-- تنظیمات پویا (کلید/مقدار) که ادمین از داخل ربات تغییرشان می‌دهد
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS settings (
    setting_key   VARCHAR(64)  NOT NULL PRIMARY KEY,
    setting_value TEXT         NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO settings (setting_key, setting_value) VALUES
    ('api_base_url', 'http://51.210.158.127:2053'),
    ('api_user', 'vahid'),
    ('api_pass', '1234'),
    ('project_price', '150000'),
    ('unlock_price', '50000'),
    ('default_project_limit', '2'),
    ('tutorial_text', 'به ربات فروشگاه ساخت اپ خوش آمدید! 🎉\n\n۱. از بخش «📝 ثبت پروژه» اطلاعات اپ خود را مرحله به مرحله وارد کنید.\n۲. قبل از اولین بیلد می‌توانید هر بخش پروژه را ویرایش کنید.\n۳. از بخش «🏗 بیلد پروژه» ساخت اپ را با یکی از معماری‌های ARM64 / ARM / Universal شروع کنید.\n۴. بعد از اتمام ساخت، لینک دانلود مستقیم اپ برایتان ارسال می‌شود (این لینک فقط ۳۰ دقیقه فعال است).\n۵. بعد از بیلد شدن پروژه، برای ویرایش مجدد باید قفل پروژه را بشکنید.',
    'rules_text', 'با استفاده از این ربات، شما قوانین زیر را می‌پذیرید:\n۱. مسئولیت محتوای اپ ساخته‌شده بر عهده‌ی شماست.\n۲. هزینه‌ها فقط در صورت موفقیت‌آمیز بودن ساخت کسر می‌شود.\n۳. فایل نهایی هر ساخت فقط ۳۰ دقیقه روی سرور در دسترس است.'),
    ('support_contact', '@your_support_username')
ON DUPLICATE KEY UPDATE setting_key = setting_key;

-- ---------------------------------------------------------------------
-- کاربران
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS users (
    chat_id          BIGINT UNSIGNED NOT NULL PRIMARY KEY,
    balance          BIGINT          NOT NULL DEFAULT 0,
    blocked          TINYINT(1)      NOT NULL DEFAULT 0,
    project_limit    INT             NULL,       -- NULL یعنی از تنظیم پیش‌فرض استفاده شود
    discount_percent INT             NOT NULL DEFAULT 0, -- درصد تخفیف قیمت بیلد/شکستن قفل برای این کاربر
    created_at       DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ---------------------------------------------------------------------
-- پروژه‌ها
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS projects (
    project_id       VARCHAR(20)  NOT NULL PRIMARY KEY,
    chat_id          BIGINT UNSIGNED NOT NULL,
    brand_name       VARCHAR(150) NOT NULL,
    package_name     VARCHAR(150) NOT NULL,
    icon_path        VARCHAR(255) NULL,
    font_path        VARCHAR(255) NULL,
    bg_color         VARCHAR(20)  NOT NULL,
    secondary_color  VARCHAR(20)  NOT NULL,
    text_color       VARCHAR(20)  NOT NULL,
    slogan           VARCHAR(255) NOT NULL DEFAULT '',
    site_url         VARCHAR(255) NOT NULL DEFAULT '',
    auth_api_url     VARCHAR(255) NOT NULL DEFAULT '',
    news_url         VARCHAR(255) NOT NULL DEFAULT '',
    cycle            INT          NOT NULL DEFAULT 1, -- هر بار که قفل شکسته می‌شود این عدد بالا می‌رود
    unlock_count     INT          NOT NULL DEFAULT 0,  -- تعداد دفعاتی که قفل این پروژه شکسته شده
    created_at       DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at       DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_chat_id (chat_id),
    CONSTRAINT fk_projects_user FOREIGN KEY (chat_id) REFERENCES users(chat_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ---------------------------------------------------------------------
-- بیلدها (هر ردیف = یک درخواست ساخت برای یک معماری خاص از یک پروژه، در یک "دور/cycle" مشخص)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS project_builds (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    project_id     VARCHAR(20)  NOT NULL,
    chat_id        BIGINT UNSIGNED NOT NULL,
    cycle          INT          NOT NULL,
    architecture   VARCHAR(20)  NOT NULL, -- arm64 / arm / universal
    job_id         VARCHAR(150) NULL,
    status         VARCHAR(20)  NOT NULL DEFAULT 'building', -- queued|building|done|failed
    price_charged  BIGINT       NULL,     -- مبلغی که هنگام شروع بیلد قفل شد و در صورت موفقیت کسر می‌شود
    file_path      VARCHAR(255) NULL,
    file_name      VARCHAR(255) NULL,
    token          VARCHAR(64)  NULL,
    file_deleted   TINYINT(1)   NOT NULL DEFAULT 0,
    error_message  TEXT         NULL,
    delivered_at   DATETIME     NULL,
    expires_at     DATETIME     NULL,
    created_at     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_project_id (project_id),
    INDEX idx_job_id (job_id),
    INDEX idx_status (status),
    CONSTRAINT fk_builds_project FOREIGN KEY (project_id) REFERENCES projects(project_id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ---------------------------------------------------------------------
-- تاریخچه‌ی شکستن قفل (برای گزارش‌گیری - اختیاری اما مفید)
-- ---------------------------------------------------------------------
CREATE TABLE IF NOT EXISTS unlock_log (
    id             INT AUTO_INCREMENT PRIMARY KEY,
    project_id     VARCHAR(20)  NOT NULL,
    chat_id        BIGINT UNSIGNED NOT NULL,
    unlock_number  INT          NOT NULL, -- چندمین باری که این پروژه آنلاک شده
    price_charged  BIGINT       NOT NULL DEFAULT 0,
    created_at     DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_project_id (project_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;