-- ============================================================================
-- WC360 - Dynamic Form Fields Table (v1.6.0)
-- ============================================================================
-- Bu tablo tuvalet ekleme/düzenleme formundaki alanları dinamik olarak yönetir
-- Admin panelden CRUD işlemleri yapılabilir

CREATE TABLE IF NOT EXISTS `form_fields` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `field_key` varchar(50) NOT NULL COMMENT 'Alan anahtarı (unique)',
  `field_label` varchar(100) NOT NULL COMMENT 'Alan etiketi (kullanıcıya gösterilen)',
  `field_type` enum('text','textarea','number','select','checkbox','radio','date','time','file','url','email','tel','color','range') NOT NULL DEFAULT 'text' COMMENT 'Alan tipi',
  `field_category` enum('basic','location','pricing','features','review','photos','custom') NOT NULL DEFAULT 'basic' COMMENT 'Alan kategorisi',
  `field_options` JSON DEFAULT NULL COMMENT 'Select/Radio için seçenekler (JSON format)',
  `field_placeholder` varchar(200) DEFAULT NULL COMMENT 'Placeholder metni',
  `field_description` text DEFAULT NULL COMMENT 'Alan açıklaması/yardım metni',
  `field_icon` varchar(50) DEFAULT NULL COMMENT 'Alan ikonu (emoji veya icon class)',
  `is_required` tinyint(1) NOT NULL DEFAULT 0 COMMENT 'Zorunlu alan mı?',
  `is_active` tinyint(1) NOT NULL DEFAULT 1 COMMENT 'Alan aktif mi?',
  `sort_order` int(11) NOT NULL DEFAULT 0 COMMENT 'Sıralama',
  `validation_rules` JSON DEFAULT NULL COMMENT 'Validasyon kuralları (JSON)',
  `default_value` text DEFAULT NULL COMMENT 'Varsayılan değer',
  `min_length` int(11) DEFAULT NULL COMMENT 'Minimum karakter sayısı',
  `max_length` int(11) DEFAULT NULL COMMENT 'Maksimum karakter sayısı',
  `min_value` decimal(10,2) DEFAULT NULL COMMENT 'Minimum sayısal değer',
  `max_value` decimal(10,2) DEFAULT NULL COMMENT 'Maksimum sayısal değer',
  `css_classes` varchar(200) DEFAULT NULL COMMENT 'Özel CSS sınıfları',
  `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 `field_key` (`field_key`),
  KEY `idx_category` (`field_category`),
  KEY `idx_active_sort` (`is_active`, `sort_order`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Dinamik form alanları';

-- ============================================================================
-- Default Form Fields - Mevcut form alanlarını ekle
-- ============================================================================

INSERT INTO `form_fields` (`field_key`, `field_label`, `field_type`, `field_category`, `field_placeholder`, `field_description`, `field_icon`, `is_required`, `sort_order`) VALUES
-- Temel Bilgiler
('name', 'Tuvalet Adı / Lokasyon', 'text', 'basic', 'Örn: Sultanahmet Camii Tuvaletleri', 'Tuvaletinizi tanımlayan açıklayıcı bir isim', '🚻', 1, 10),
('description', 'Açıklama', 'textarea', 'basic', 'Tuvalet hakkında ek bilgiler...', 'Tuvalet hakkında detaylı bilgi', '📝', 0, 20),
('category_id', 'Kategori', 'select', 'basic', NULL, 'Tuvaletinizin ait olduğu kategori', '📂', 1, 30),

-- Konum Bilgileri
('latitude', 'Enlem (Latitude)', 'number', 'location', '41.0082', 'GPS koordinatı - Enlem', '🌍', 1, 40),
('longitude', 'Boylam (Longitude)', 'number', 'location', '28.9784', 'GPS koordinatı - Boylam', '🌍', 1, 50),
('address', 'Adres', 'text', 'location', 'Tam adres bilgisi', 'Tuvaletinizin tam adresi', '📍', 0, 60),

-- Ücret Bilgileri
('is_free', 'Ücretsiz mi?', 'radio', 'pricing', NULL, 'Tuvalet ücretsiz mi yoksa ücretli mi?', '💰', 1, 70),
('price', 'Ücret Miktarı', 'number', 'pricing', '0.00', 'Tuvalet kullanım ücreti', '💸', 0, 80),
('currency', 'Para Birimi', 'select', 'pricing', NULL, 'Ücret para birimi', '💱', 0, 90),

-- Özellikler
('is_accessible', 'Erişilebilir', 'checkbox', 'features', NULL, 'Engelli dostu erişim', '♿', 0, 100),
('has_baby_change', 'Bebek Bakım', 'checkbox', 'features', NULL, 'Bebek bakım alanı mevcut', '👶', 0, 110),
('has_wifi', 'WiFi', 'checkbox', 'features', NULL, 'Ücretsiz WiFi mevcut', '📶', 0, 120),
('is_24_hours', '24 Saat', 'checkbox', 'features', NULL, '24 saat açık', '🕐', 0, 130),
('has_shower', 'Duş Yeri', 'checkbox', 'features', NULL, 'Duş imkanı mevcut', '🚿', 0, 140),
('has_wudu', 'Abdest Çeşmesi', 'checkbox', 'features', NULL, 'Abdest alma yeri', '🚰', 0, 150),

-- Değerlendirme
('review_hygiene', 'Hijyen / Temizlik', 'range', 'review', NULL, 'Temizlik durumu değerlendirmesi (1-5)', '🧼', 0, 160),
('review_location', 'Ulaşım & Kolay Bulunabilirlik', 'range', 'review', NULL, 'Konum ve ulaşım kolaylığı (1-5)', '🗺️', 0, 170),
('review_accessibility', 'Engelli Dostu & Erişilebilirlik', 'range', 'review', NULL, 'Erişilebilirlik değerlendirmesi (1-5)', '♿', 0, 180),
('review_overall', 'Genel Memnuniyet', 'range', 'review', NULL, 'Genel memnuniyet seviyesi (1-5)', '⭐', 0, 190),
('review_comment', 'Yazılı Yorum', 'textarea', 'review', 'Bu tuvalet hakkındaki deneyiminizi paylaşın...', 'Detaylı yorum ve deneyim paylaşımı', '💬', 0, 200),

-- Fotoğraf
('photos', 'Fotoğraf Yükleme', 'file', 'photos', NULL, 'Tuvalet fotoğrafları (maksimum 5 adet)', '📸', 0, 210);

-- ============================================================================
-- Form field options için JSON verileri güncelle
-- ============================================================================

-- Kategori seçenekleri (dinamik olarak backend'den çekilecek)
UPDATE `form_fields` SET `field_options` = JSON_ARRAY() WHERE `field_key` = 'category_id';

-- Ücretsiz/Ücretli seçenekleri
UPDATE `form_fields` SET `field_options` = JSON_ARRAY(
  JSON_OBJECT('value', 1, 'label', '💚 Ücretsiz'),
  JSON_OBJECT('value', 0, 'label', '💰 Ücretli')
) WHERE `field_key` = 'is_free';

-- Para birimi seçenekleri
UPDATE `form_fields` SET `field_options` = JSON_ARRAY(
  JSON_OBJECT('value', 'TRY', 'label', '₺ Türk Lirası'),
  JSON_OBJECT('value', 'USD', 'label', '$ Amerikan Doları'),
  JSON_OBJECT('value', 'EUR', 'label', '€ Euro'),
  JSON_OBJECT('value', 'GBP', 'label', '£ İngiliz Sterlini')
) WHERE `field_key` = 'currency';

-- Range alanları için min/max değerler
UPDATE `form_fields` SET `min_value` = 1, `max_value` = 5 WHERE `field_key` IN ('review_hygiene', 'review_location', 'review_accessibility', 'review_overall');

-- Validasyon kuralları
UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'required', true,
  'minLength', 3,
  'maxLength', 100
) WHERE `field_key` = 'name';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'maxLength', 500
) WHERE `field_key` = 'description';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'required', true,
  'min', -90,
  'max', 90
) WHERE `field_key` = 'latitude';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'required', true,
  'min', -180,
  'max', 180
) WHERE `field_key` = 'longitude';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'min', 0,
  'max', 1000
) WHERE `field_key` = 'price';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'maxLength', 500
) WHERE `field_key` = 'review_comment';

UPDATE `form_fields` SET `validation_rules` = JSON_OBJECT(
  'accept', 'image/*',
  'maxFiles', 5,
  'maxSize', '5MB'
) WHERE `field_key` = 'photos';

-- ============================================================================
-- İndeksler ve optimizasyon
-- ============================================================================

-- Performans için ek indeksler
CREATE INDEX `idx_form_fields_category_active` ON `form_fields` (`field_category`, `is_active`);
CREATE INDEX `idx_form_fields_sort` ON `form_fields` (`sort_order`); 