-- Raf Gezgini - marketler tablosu
-- MySQL 8 / MariaDB uyumlu, tekrar calistirilabilir, mukerrer kayit uretmez.
-- Codex bu dosyayi calistirmaz; phpMyAdmin'de hedef veritabanini
-- (or. likayazilim_rafgezgini) secip calistirin.
--
-- market_olcegi:
--   bagimsiz  : subesi olmayan tek market; sube seciminde gosterilmez
--   bolgesel  : bolgesel market; sube seciminde gosterilir
--   zincir    : zincir market; sube seciminde gosterilir
--
-- market_zincirleri tablosu silinmez. Mevcut kayitlar ayni id ile kopyalanir.

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

CREATE TABLE IF NOT EXISTS `marketler` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `market_adi` VARCHAR(180) NOT NULL,
    `normalize_market_adi` VARCHAR(180) NOT NULL,
    `ticari_unvan` VARCHAR(250) NULL,
    `market_kodu` VARCHAR(20) NOT NULL,
    `market_olcegi` VARCHAR(20) NOT NULL DEFAULT 'zincir',
    `logo_url` VARCHAR(500) NULL,
    `marka_rengi` VARCHAR(7) NULL,
    `web_adresi` VARCHAR(500) NULL,
    `sistem_durumu` VARCHAR(20) NOT NULL DEFAULT 'aktif',
    `olusturulma_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `guncellenme_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `silinme_tarihi` DATETIME(6) NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_marketler_kod` (`market_kodu`),
    KEY `ix_marketler_durum` (`sistem_durumu`),
    KEY `ix_marketler_olcek` (`market_olcegi`, `sistem_durumu`),
    KEY `ix_marketler_normalize_ad` (`normalize_market_adi`),
    CONSTRAINT `ck_marketler_olcek` CHECK (`market_olcegi` IN ('bagimsiz', 'bolgesel', 'zincir')),
    CONSTRAINT `ck_marketler_durum` CHECK (`sistem_durumu` IN ('aktif', 'pasif', 'arsivlendi'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

START TRANSACTION;

INSERT INTO `marketler` (
    `id`,
    `market_adi`,
    `normalize_market_adi`,
    `ticari_unvan`,
    `market_kodu`,
    `market_olcegi`,
    `logo_url`,
    `marka_rengi`,
    `web_adresi`,
    `sistem_durumu`,
    `olusturulma_tarihi`,
    `guncellenme_tarihi`,
    `silinme_tarihi`
)
SELECT
    mz.`id`,
    mz.`zincir_adi`,
    mz.`normalize_zincir_adi`,
    mz.`ticari_unvan`,
    mz.`zincir_kodu`,
    CASE
        WHEN mz.`zincir_turu` = 'bagimsiz' THEN 'bagimsiz'
        WHEN mz.`zincir_turu` IN ('bolgesel', 'yerel_zincir', 'kooperatif') THEN 'bolgesel'
        WHEN mz.`zincir_turu` IN ('zincir', 'ulusal_zincir', 'indirim_marketi') THEN 'zincir'
        ELSE 'zincir'
    END,
    mz.`logo_url`,
    mz.`marka_rengi`,
    mz.`web_adresi`,
    mz.`sistem_durumu`,
    mz.`olusturulma_tarihi`,
    mz.`guncellenme_tarihi`,
    mz.`silinme_tarihi`
FROM `market_zincirleri` AS mz
WHERE NOT EXISTS (
    SELECT 1
    FROM `marketler` AS m
    WHERE m.`id` = mz.`id`
);

COMMIT;

SET @yeni_otomatik_id := (
    SELECT IFNULL(MAX(`id`), 0) + 1
    FROM `marketler`
);
SET @otomatik_id_sql := CONCAT('ALTER TABLE `marketler` AUTO_INCREMENT = ', @yeni_otomatik_id);
PREPARE otomatik_id_komutu FROM @otomatik_id_sql;
EXECUTE otomatik_id_komutu;
DEALLOCATE PREPARE otomatik_id_komutu;

SELECT
    `market_olcegi`,
    COUNT(*) AS kayit_sayisi
FROM `marketler`
GROUP BY `market_olcegi`
ORDER BY `market_olcegi`;

SELECT
    m.`id`,
    m.`market_adi`,
    m.`market_kodu`,
    m.`market_olcegi`,
    COUNT(ms.`id`) AS sube_sayisi
FROM `marketler` AS m
INNER JOIN `market_subeleri` AS ms
    ON ms.`market_zinciri_id` = m.`id`
   AND ms.`silinme_tarihi` IS NULL
WHERE m.`market_olcegi` = 'bagimsiz'
  AND m.`silinme_tarihi` IS NULL
GROUP BY m.`id`, m.`market_adi`, m.`market_kodu`, m.`market_olcegi`
HAVING COUNT(ms.`id`) > 1;
