-- Raf Gezgini yönetici rol alanı
-- MySQL 8 / MariaDB uyumlu, tekrar çalıştırılabilir.
-- Not: MySQL DDL komutlarını otomatik commit eder. Veri güncellemesi ayrıca
-- transaction içinde yürütülür; bu dosya hiçbir kullanıcıyı silmez.

SET NAMES utf8mb4;
SET @aktif_veritabani := DATABASE();

SET @rol_kolonu_var := (
    SELECT COUNT(*)
    FROM information_schema.COLUMNS
    WHERE TABLE_SCHEMA = @aktif_veritabani
      AND TABLE_NAME = 'users'
      AND COLUMN_NAME = 'yonetici_rolu'
);

SET @rol_kolonu_sql := IF(
    @rol_kolonu_var = 0,
    'ALTER TABLE `users` ADD COLUMN `yonetici_rolu` ENUM(''super_yonetici'',''katalog_yoneticisi'',''fiyat_moderatoru'',''salt_okunur'') NOT NULL DEFAULT ''salt_okunur'' AFTER `panel_erisimi_var_mi`',
    'SELECT ''yonetici_rolu alanı zaten mevcut'' AS bilgi'
);
PREPARE rol_kolonu_komutu FROM @rol_kolonu_sql;
EXECUTE rol_kolonu_komutu;
DEALLOCATE PREPARE rol_kolonu_komutu;

SET @rol_indeksi_var := (
    SELECT COUNT(*)
    FROM information_schema.STATISTICS
    WHERE TABLE_SCHEMA = @aktif_veritabani
      AND TABLE_NAME = 'users'
      AND INDEX_NAME = 'ix_users_yonetici_rolu_panel'
);

SET @rol_indeksi_sql := IF(
    @rol_indeksi_var = 0,
    'CREATE INDEX `ix_users_yonetici_rolu_panel` ON `users` (`yonetici_rolu`, `panel_erisimi_var_mi`)',
    'SELECT ''Yönetici rol indeksi zaten mevcut'' AS bilgi'
);
PREPARE rol_indeksi_komutu FROM @rol_indeksi_sql;
EXECUTE rol_indeksi_komutu;
DEALLOCATE PREPARE rol_indeksi_komutu;

START TRANSACTION;

-- İlk kurulumda hiçbir süper yönetici yoksa panel erişimi açık mevcut
-- yöneticilerin tamamını süper yönetici yaparak kilitlenmeyi önler.
UPDATE `users`
SET `yonetici_rolu` = 'super_yonetici',
    `updated_at` = CURRENT_TIMESTAMP
WHERE `panel_erisimi_var_mi` = 1
  AND (
      SELECT COUNT(*)
      FROM (
          SELECT `id`
          FROM `users`
          WHERE `yonetici_rolu` = 'super_yonetici'
            AND `panel_erisimi_var_mi` = 1
      ) AS mevcut_super_yoneticiler
  ) = 0;

COMMIT;

SELECT
    `id`,
    `name`,
    `email`,
    `yonetici_rolu`,
    `panel_erisimi_var_mi`
FROM `users`
ORDER BY `id`;
