-- NesaChat veritabanı şeması (v2 — çoklu işletme / multi-tenant)
-- cPanel > phpMyAdmin üzerinden bu dosyayı içe aktarın (Import).
--
-- Mevcut (tek işletmeli v1) kurulumu yükseltiyorsanız bu dosyayı DEĞİL,
-- upgrade-multitenant.sql dosyasını çalıştırın.

SET NAMES utf8mb4;

-- İşletmeler (kiracılar). Her işletmenin kendi Meta ve yapay zeka
-- kimlik bilgileri, kullanıcıları, sohbetleri ve ayarları vardır.
-- İlk girişte users tablosu boşsa config.php'deki panel.admin_* bilgileriyle
-- bir "super_admin" oluşturulur; işletmeler ana yönetim panelinden açılır.
CREATE TABLE IF NOT EXISTS businesses (
    id                 INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name               VARCHAR(150) NOT NULL,
    slug               VARCHAR(60)  NOT NULL,
    status             ENUM('active', 'suspended') NOT NULL DEFAULT 'active',
    plan               VARCHAR(32)  NOT NULL DEFAULT 'standart',
    notes              TEXT,

    -- Meta / WhatsApp Cloud API (işletmeye özel)
    wa_token           TEXT,
    wa_phone_number_id VARCHAR(64) DEFAULT NULL,
    wa_waba_id         VARCHAR(64) DEFAULT NULL,

    -- Instagram Messaging (işletmenin IG hesabına bağlı sayfa)
    ig_page_token      TEXT,
    ig_page_id         VARCHAR(64) DEFAULT NULL,   -- webhook entry.id eşleşmesi için

    -- Facebook Messenger
    fb_page_token      TEXT,
    fb_page_id         VARCHAR(64) DEFAULT NULL,   -- webhook entry.id eşleşmesi için

    -- Yapay zeka anahtarları (boşsa config.php'deki platform anahtarı kullanılır)
    anthropic_api_key  TEXT,
    gemini_api_key     TEXT,

    created_at         DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_slug (slug),
    KEY idx_wa_phone (wa_phone_number_id),
    KEY idx_ig_page (ig_page_id),
    KEY idx_fb_page (fb_page_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Panel kullanıcıları.
-- super_admin: platform sahibi (business_id NULL) — tüm işletmeleri yönetir.
-- admin/agent: bir işletmeye bağlıdır (business_id dolu).
CREATE TABLE IF NOT EXISTS users (
    id            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    business_id   INT UNSIGNED DEFAULT NULL,
    name          VARCHAR(100) NOT NULL,
    email         VARCHAR(190) NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    role          ENUM('super_admin', 'admin', 'agent') NOT NULL DEFAULT 'agent',
    api_token     VARCHAR(64) DEFAULT NULL,
    created_at    DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_email (email),
    KEY idx_token (api_token),
    KEY idx_biz (business_id),
    CONSTRAINT fk_user_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Müşteriler (WhatsApp numarası veya Instagram/Messenger kullanıcısı)
CREATE TABLE IF NOT EXISTS contacts (
    id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    business_id INT UNSIGNED NOT NULL,
    channel     ENUM('whatsapp', 'instagram', 'facebook') NOT NULL,
    external_id VARCHAR(64) NOT NULL,          -- WhatsApp telefon no / IG-Messenger scoped user ID
    name        VARCHAR(255) DEFAULT NULL,
    created_at  DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_biz_channel_ext (business_id, channel, external_id),
    CONSTRAINT fk_contact_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Konuşmalar
CREATE TABLE IF NOT EXISTS conversations (
    id               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    business_id      INT UNSIGNED NOT NULL,
    contact_id       INT UNSIGNED NOT NULL,
    mode             ENUM('ai', 'human') NOT NULL DEFAULT 'ai',  -- ai: otomatik cevap, human: temsilci
    status           ENUM('open', 'closed') NOT NULL DEFAULT 'open',
    assigned_user_id INT UNSIGNED DEFAULT NULL,                  -- sohbetin atandığı temsilci
    tags             VARCHAR(255) DEFAULT NULL,                  -- virgülle ayrılmış etiketler
    unread_count    INT UNSIGNED NOT NULL DEFAULT 0,
    last_message_at DATETIME DEFAULT NULL,
    created_at      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    KEY idx_biz_last (business_id, last_message_at),
    CONSTRAINT fk_conv_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE,
    CONSTRAINT fk_conv_contact FOREIGN KEY (contact_id) REFERENCES contacts(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Mesajlar (business_id, istatistik sorguları hızlı olsun diye denormalize)
CREATE TABLE IF NOT EXISTS messages (
    id              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    business_id     INT UNSIGNED NOT NULL,
    conversation_id INT UNSIGNED NOT NULL,
    direction       ENUM('in', 'out') NOT NULL,           -- in: müşteriden, out: bizden müşteriye
    sender          ENUM('customer', 'ai', 'agent') NOT NULL,
    msg_type        VARCHAR(32) NOT NULL DEFAULT 'text',  -- text, image, audio, unsupported...
    content         TEXT NOT NULL,
    attachment      VARCHAR(255) DEFAULT NULL,            -- /uploads/... yolundaki medya dosyası
    mime            VARCHAR(100) DEFAULT NULL,
    status          VARCHAR(16) NOT NULL DEFAULT 'sent',  -- giden: sent → delivered → read (tikler)
    reply_to_id     INT UNSIGNED DEFAULT NULL,            -- yanıtlanan (alıntılanan) mesajın id'si
    meta_message_id VARCHAR(128) DEFAULT NULL,            -- Meta'nın mesaj ID'si (tekrar teslimatları engellemek için)
    created_at      DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE KEY uniq_meta_id (meta_message_id),
    KEY idx_conv (conversation_id, id),
    KEY idx_biz_created (business_id, created_at),
    CONSTRAINT fk_msg_conv FOREIGN KEY (conversation_id) REFERENCES conversations(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Hazır yanıt şablonları (sohbet ekranında "/" ile açılır) — işletmeye özel
CREATE TABLE IF NOT EXISTS canned_responses (
    id          INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    business_id INT UNSIGNED NOT NULL,
    shortcut    VARCHAR(32) NOT NULL,
    title       VARCHAR(100) NOT NULL,
    body        TEXT NOT NULL,
    UNIQUE KEY uniq_biz_shortcut (business_id, shortcut),
    CONSTRAINT fk_canned_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Panelden yönetilen ayarlar (işletme başına anahtar/değer).
-- Varsayılan değerler işletme oluşturulurken uygulama tarafından eklenir.
CREATE TABLE IF NOT EXISTS settings (
    business_id INT UNSIGNED NOT NULL,
    skey        VARCHAR(64) NOT NULL,
    svalue      TEXT NOT NULL,
    PRIMARY KEY (business_id, skey),
    CONSTRAINT fk_setting_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
