-- Admin Yetki Sistemi için SQL Tabloları
-- Bu tablolar admin panelinde rol bazlı yetki yönetimi sağlar

-- 1. Admin Rolleri Tablosu
CREATE TABLE IF NOT EXISTS `admin_roles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(50) NOT NULL COMMENT 'superadmin, admin, moderator, viewer',
  `role_description` text DEFAULT NULL,
  `is_active` tinyint(1) NOT NULL DEFAULT 1,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  `updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `role_name` (`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

-- 2. Admin Yetkileri Tablosu
CREATE TABLE IF NOT EXISTS `admin_permissions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `permission_name` varchar(100) NOT NULL,
  `permission_key` varchar(100) NOT NULL,
  `permission_description` text DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `permission_key` (`permission_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

-- 3. Rol-Yetki İlişkisi Tablosu
CREATE TABLE IF NOT EXISTS `admin_role_permissions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_id` int(11) NOT NULL,
  `permission_id` int(11) NOT NULL,
  `created_at` timestamp NOT NULL DEFAULT current_timestamp(),
  PRIMARY KEY (`id`),
  UNIQUE KEY `role_permission` (`role_id`,`permission_id`),
  KEY `fk_role_permissions_role` (`role_id`),
  KEY `fk_role_permissions_permission` (`permission_id`),
  CONSTRAINT `fk_role_permissions_role` FOREIGN KEY (`role_id`) REFERENCES `admin_roles` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_role_permissions_permission` FOREIGN KEY (`permission_id`) REFERENCES `admin_permissions` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

-- 4. Admin tablosuna role_id sütunu ekle (eğer yoksa)
ALTER TABLE `admins` 
ADD COLUMN IF NOT EXISTS `role_id` int(11) DEFAULT 1 COMMENT 'Admin rolü ID\'si' AFTER `full_name`,
ADD KEY `fk_admin_role` (`role_id`),
ADD CONSTRAINT `fk_admin_role` FOREIGN KEY (`role_id`) REFERENCES `admin_roles` (`id`) ON DELETE SET NULL;

-- Rolleri Ekle
INSERT IGNORE INTO `admin_roles` (`id`, `role_name`, `role_description`) VALUES
(1, 'superadmin', 'Sistem yöneticisi - Tüm yetkilere sahip'),
(2, 'admin', 'Yönetici - Çoğu yetkiye sahip'),
(3, 'moderator', 'Moderatör - Sınırlı yetkilere sahip'),
(4, 'viewer', 'Ziyaretçi - Sadece görüntüleme yetkisi');

-- Yetkileri Ekle
INSERT IGNORE INTO `admin_permissions` (`id`, `permission_name`, `permission_key`, `permission_description`) VALUES
(1, 'Dashboard Görüntüleme', 'dashboard_view', 'Ana paneli görüntüleme yetkisi'),
(2, 'Ürün Görüntüleme', 'products_view', 'Ürünleri görüntüleme yetkisi'),
(3, 'Ürün Ekleme', 'products_add', 'Yeni ürün ekleme yetkisi'),
(4, 'Ürün Düzenleme', 'products_edit', 'Mevcut ürünleri düzenleme yetkisi'),
(5, 'Ürün Silme', 'products_delete', 'Ürünleri silme yetkisi'),
(6, 'Kategori Görüntüleme', 'categories_view', 'Kategorileri görüntüleme yetkisi'),
(7, 'Kategori Ekleme', 'categories_add', 'Yeni kategori ekleme yetkisi'),
(8, 'Kategori Düzenleme', 'categories_edit', 'Mevcut kategorileri düzenleme yetkisi'),
(9, 'Kategori Silme', 'categories_delete', 'Kategorileri silme yetkisi'),
(10, 'Sipariş Görüntüleme', 'orders_view', 'Siparişleri görüntüleme yetkisi'),
(11, 'Sipariş Düzenleme', 'orders_edit', 'Siparişleri düzenleme yetkisi'),
(12, 'Sipariş Silme', 'orders_delete', 'Siparişleri silme yetkisi'),
(13, 'Kullanıcı Görüntüleme', 'users_view', 'Kullanıcıları görüntüleme yetkisi'),
(14, 'Kullanıcı Ekleme', 'users_add', 'Yeni kullanıcı ekleme yetkisi'),
(15, 'Kullanıcı Düzenleme', 'users_edit', 'Mevcut kullanıcıları düzenleme yetkisi'),
(16, 'Kullanıcı Silme', 'users_delete', 'Kullanıcıları silme yetkisi'),
(17, 'Ayarlar Görüntüleme', 'settings_view', 'Site ayarlarını görüntüleme yetkisi'),
(18, 'Ayarlar Düzenleme', 'settings_edit', 'Site ayarlarını düzenleme yetkisi'),
(19, 'Mesaj Görüntüleme', 'messages_view', 'İletişim mesajlarını görüntüleme yetkisi'),
(20, 'Mesaj Silme', 'messages_delete', 'İletişim mesajlarını silme yetkisi'),
(21, 'Admin Kullanıcı Görüntüleme', 'admin_users_view', 'Admin kullanıcılarını görüntüleme yetkisi'),
(22, 'Admin Kullanıcı Ekleme', 'admin_users_add', 'Yeni admin kullanıcı ekleme yetkisi'),
(23, 'Admin Kullanıcı Düzenleme', 'admin_users_edit', 'Admin kullanıcılarını düzenleme yetkisi'),
(24, 'Admin Kullanıcı Silme', 'admin_users_delete', 'Admin kullanıcılarını silme yetkisi'),
(25, 'Rapor Görüntüleme', 'reports_view', 'Raporları görüntüleme yetkisi');

-- Superadmin için tüm yetkileri ata
INSERT IGNORE INTO `admin_role_permissions` (role_id, permission_id)
SELECT 1, id FROM `admin_permissions`;

-- Admin için temel yetkileri ata (admin kullanıcı yönetimi hariç)
INSERT IGNORE INTO `admin_role_permissions` (role_id, permission_id)
SELECT 2, id FROM `admin_permissions` 
WHERE permission_key NOT IN ('admin_users_view', 'admin_users_add', 'admin_users_edit', 'admin_users_delete');

-- Moderator için sınırlı yetkileri ata
INSERT IGNORE INTO `admin_role_permissions` (role_id, permission_id)
SELECT 3, id FROM `admin_permissions` 
WHERE permission_key IN (
  'dashboard_view', 'products_view', 'products_edit', 'categories_view', 'categories_edit', 
  'orders_view', 'orders_edit', 'users_view', 'messages_view'
);

-- Viewer için sadece görüntüleme yetkileri ata
INSERT IGNORE INTO `admin_role_permissions` (role_id, permission_id)
SELECT 4, id FROM `admin_permissions` 
WHERE permission_key IN (
  'dashboard_view', 'products_view', 'categories_view', 'orders_view', 'users_view', 
  'settings_view', 'messages_view', 'reports_view'
);

-- Mevcut admin kullanıcısını superadmin yap
UPDATE `admins` SET `role_id` = 1 WHERE `username` = 'admin';