-- NesaChat v1 (tek işletme) → v2 (çoklu işletme) yükseltme betiği.
-- SADECE mevcut, verisi olan v1 kurulumlarında çalıştırın.
-- Sıfırdan kurulum yapıyorsanız bunu değil, schema.sql dosyasını kullanın.
--
-- Yükseltme sonrası yapılacaklar:
--   1. Aşağıdaki en alttaki UPDATE satırındaki e-postayı kendi yönetici
--      e-postanızla değiştirip yorumdan çıkarın (süper admin olmak için).
--   2. Ana yönetim paneline girip "Varsayılan İşletme"yi açın ve config.php'de
--      duran Meta/AI kimlik bilgilerini işletme kartına taşıyın.
--   3. config.php'yi yeni config.example.php biçimine göre sadeleştirin.

SET NAMES utf8mb4;

-- 1) İşletmeler tablosu
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,
    wa_token           TEXT,
    wa_phone_number_id VARCHAR(64) DEFAULT NULL,
    wa_waba_id         VARCHAR(64) DEFAULT NULL,
    ig_page_token      TEXT,
    ig_page_id         VARCHAR(64) DEFAULT NULL,
    fb_page_token      TEXT,
    fb_page_id         VARCHAR(64) DEFAULT NULL,
    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;

-- 2) Mevcut tüm veriler bu işletmeye bağlanır
INSERT INTO businesses (name, slug) VALUES ('Varsayılan İşletme', 'varsayilan-isletme');
SET @biz = LAST_INSERT_ID();

-- 3) users: rol enum'u genişlet + business_id ekle
ALTER TABLE users
    MODIFY role ENUM('super_admin', 'admin', 'agent') NOT NULL DEFAULT 'agent',
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL AFTER id,
    ADD KEY idx_biz (business_id);
UPDATE users SET business_id = @biz;
ALTER TABLE users
    ADD CONSTRAINT fk_user_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE;

-- 4) contacts
ALTER TABLE contacts
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL AFTER id;
UPDATE contacts SET business_id = @biz;
ALTER TABLE contacts
    MODIFY business_id INT UNSIGNED NOT NULL,
    DROP INDEX uniq_channel_ext,
    ADD UNIQUE KEY uniq_biz_channel_ext (business_id, channel, external_id),
    ADD CONSTRAINT fk_contact_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE;

-- 5) conversations
ALTER TABLE conversations
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL AFTER id;
UPDATE conversations SET business_id = @biz;
ALTER TABLE conversations
    MODIFY business_id INT UNSIGNED NOT NULL,
    ADD KEY idx_biz_last (business_id, last_message_at),
    ADD CONSTRAINT fk_conv_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE;

-- 6) messages
ALTER TABLE messages
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL AFTER id;
UPDATE messages SET business_id = @biz;
ALTER TABLE messages
    MODIFY business_id INT UNSIGNED NOT NULL,
    ADD KEY idx_biz_created (business_id, created_at);

-- 7) canned_responses
ALTER TABLE canned_responses
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL AFTER id;
UPDATE canned_responses SET business_id = @biz;
ALTER TABLE canned_responses
    MODIFY business_id INT UNSIGNED NOT NULL,
    DROP INDEX uniq_shortcut,
    ADD UNIQUE KEY uniq_biz_shortcut (business_id, shortcut),
    ADD CONSTRAINT fk_canned_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE;

-- 8) settings: anahtar/değer → işletme başına anahtar/değer
ALTER TABLE settings
    ADD COLUMN business_id INT UNSIGNED DEFAULT NULL FIRST;
UPDATE settings SET business_id = @biz;
ALTER TABLE settings
    MODIFY business_id INT UNSIGNED NOT NULL,
    DROP PRIMARY KEY,
    ADD PRIMARY KEY (business_id, skey),
    ADD CONSTRAINT fk_setting_biz FOREIGN KEY (business_id) REFERENCES businesses(id) ON DELETE CASCADE;

-- 9) Süper admin: kendi yönetici hesabınızı platform sahibi yapın.
--    E-postayı düzenleyip yorumdan çıkarın:
-- UPDATE users SET role = 'super_admin', business_id = NULL WHERE email = 'admin@ornek.com';
