-- ==========================================================
-- سیستم پاسخ‌گوی خودکار تلگرام - نسخه ۱ (Standalone Bot)
-- PHP 7.4 + MySQL/MariaDB - سازگار با cPanel Shared Hosting
-- ==========================================================

SET NAMES utf8mb4;

-- مدیران مجاز پنل
CREATE TABLE IF NOT EXISTS admins (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    telegram_user_id BIGINT UNSIGNED NOT NULL UNIQUE,
    name VARCHAR(191) NULL,
    role ENUM('owner','admin','support') NOT NULL DEFAULT 'admin',
    status ENUM('active','disabled') NOT NULL DEFAULT 'active',
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- وضعیت مکالمهٔ چندمرحله‌ای ادمین در پنل (مثلاً هنگام افزودن پاسخ)
CREATE TABLE IF NOT EXISTS admin_states (
    telegram_user_id BIGINT UNSIGNED NOT NULL PRIMARY KEY,
    state VARCHAR(64) NOT NULL,
    payload TEXT NULL, -- JSON
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- دسته‌بندی پاسخ‌ها
CREATE TABLE IF NOT EXISTS categories (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(191) NOT NULL,
    enabled TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- قوانین پاسخ ثابت
CREATE TABLE IF NOT EXISTS response_rules (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    category_id INT UNSIGNED NULL,
    title VARCHAR(191) NOT NULL,
    match_type ENUM('exact','keyword') NOT NULL DEFAULT 'keyword',
    -- exact_phrases و keywords به‌صورت یک عبارت در هر خط ذخیره می‌شوند (نرمال‌شده هنگام مقایسه)
    exact_phrases TEXT NULL,
    keywords TEXT NULL,
    response_text TEXT NOT NULL,
    priority INT NOT NULL DEFAULT 10,
    enabled TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL,
    INDEX idx_enabled_priority (enabled, priority)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- فایل/عکس/PDF ضمیمهٔ یک پاسخ ثابت
CREATE TABLE IF NOT EXISTS attachments (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    response_rule_id INT UNSIGNED NOT NULL,
    file_id VARCHAR(255) NOT NULL, -- Telegram file_id
    file_type ENUM('photo','document','video','audio') NOT NULL,
    caption VARCHAR(1024) NULL,
    sort_order INT NOT NULL DEFAULT 0,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (response_rule_id) REFERENCES response_rules(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- مشتریان
CREATE TABLE IF NOT EXISTS customers (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    telegram_user_id BIGINT UNSIGNED NOT NULL UNIQUE,
    username VARCHAR(191) NULL,
    first_name VARCHAR(191) NULL,
    last_name VARCHAR(191) NULL,
    status ENUM('active','blocked') NOT NULL DEFAULT 'active',
    auto_reply_enabled TINYINT(1) NOT NULL DEFAULT 1,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    last_activity_at DATETIME NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- مکالمات (هر مشتری یک مکالمهٔ فعال دارد)
CREATE TABLE IF NOT EXISTS conversations (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    customer_id INT UNSIGNED NOT NULL,
    status ENUM('open','needs_review','closed') NOT NULL DEFAULT 'open',
    last_message_at DATETIME NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- پیام‌ها (لاگ کامل مکالمه)
CREATE TABLE IF NOT EXISTS messages (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    conversation_id INT UNSIGNED NOT NULL,
    direction ENUM('in','out') NOT NULL,
    message_type VARCHAR(32) NOT NULL DEFAULT 'text',
    message_text TEXT NULL,
    response_source ENUM('exact','keyword','ai','human','system','fallback') NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE,
    INDEX idx_conv_time (conversation_id, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- تنظیمات AI
CREATE TABLE IF NOT EXISTS ai_settings (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    provider VARCHAR(64) NOT NULL DEFAULT 'openai',
    model VARCHAR(128) NOT NULL DEFAULT 'gpt-4o-mini',
    system_prompt TEXT NULL,
    tone VARCHAR(64) NOT NULL DEFAULT 'friendly_professional',
    response_length ENUM('short','medium','long') NOT NULL DEFAULT 'short',
    enabled TINYINT(1) NOT NULL DEFAULT 1,
    temperature DECIMAL(3,2) NOT NULL DEFAULT 0.30,
    max_tokens INT NOT NULL DEFAULT 400,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- پایگاه دانش برای AI
CREATE TABLE IF NOT EXISTS knowledge_base (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(191) NOT NULL,
    content TEXT NOT NULL,
    enabled TINYINT(1) NOT NULL DEFAULT 1,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- تنظیمات عمومی کلید/مقدار (Auto Reply ON/OFF، پیام تعطیلات، Cooldown و ...)
CREATE TABLE IF NOT EXISTS settings (
    setting_key VARCHAR(100) NOT NULL PRIMARY KEY,
    setting_value TEXT NULL,
    updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- لاگ سیستمی (بدون داده حساس)
CREATE TABLE IF NOT EXISTS system_logs (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    level ENUM('info','warning','error') NOT NULL DEFAULT 'info',
    context VARCHAR(64) NULL,
    message VARCHAR(1000) NOT NULL,
    created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX idx_created (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- مقادیر پیش‌فرض تنظیمات
INSERT IGNORE INTO settings (setting_key, setting_value) VALUES
    ('auto_reply_global', '1'),
    ('cooldown_seconds', '60'),
    ('offline_message', 'سلام 🌹\nپیام شما دریافت شد. در حال حاضر خارج از ساعات پاسخ‌گویی هستیم و در اولین فرصت پاسخ خواهیم داد.'),
    ('handoff_message', 'پیام شما دریافت شد. لطفاً کمی صبر کنید تا بررسی کنم و پاسخ دقیق را خدمتتان ارسال کنم.'),
    ('business_hours_enabled', '0'),
    ('business_hours_start', '09:00'),
    ('business_hours_end', '21:00');

INSERT IGNORE INTO ai_settings (id, provider, model, system_prompt, enabled) VALUES
    (1, 'openai', 'gpt-4o-mini',
    'تو دستیار پاسخ‌گوی مشتریان هستی. فقط بر اساس اطلاعات موجود در Knowledge Base پاسخ بده. اگر اطلاعات کافی نداری، حدس نزن و اعلام کن که این مورد را به مدیر ارجاع می‌دهی. لحن پاسخ محترمانه، کوتاه و مناسب مشتری باشد.',
    1);
