-- Raf Gezgini - izin kontrollu urun veri kaynaklari ve inceleme kuyrugu
-- MySQL 8.0+ icindir. Codex bu dosyayi calistirmaz; yonetici manuel uygular.

USE `raf_gezgini`;

START TRANSACTION;

CREATE TABLE IF NOT EXISTS `urun_veri_kaynaklari` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `kaynak_adi` VARCHAR(180) NOT NULL,
    `kaynak_kodu` VARCHAR(80) NOT NULL,
    `adapter_turu` VARCHAR(40) NOT NULL DEFAULT 'schema_org_sitemap',
    `ana_adres` VARCHAR(2048) NOT NULL,
    `izinli_host` VARCHAR(255) NOT NULL,
    `izinli_gorsel_hostlari` JSON NULL,
    `liste_adresi` VARCHAR(2048) NULL,
    `resmi_erisim_adresi` VARCHAR(2048) NULL,
    `kimlik_env_anahtari` VARCHAR(120) NULL,
    `iletisim_adresi` VARCHAR(255) NULL,
    `kullanim_kosullari_adresi` VARCHAR(2048) NULL,
    `lisans_turu` VARCHAR(100) NULL,
    `izin_durumu` VARCHAR(30) NOT NULL DEFAULT 'beklemede',
    `izin_talep_tarihi` DATETIME NULL,
    `izin_onay_tarihi` DATETIME NULL,
    `izin_bitis_tarihi` DATETIME NULL,
    `izin_notu` TEXT NULL,
    `izin_belgesi_diski` VARCHAR(30) NULL,
    `izin_belgesi_yolu` VARCHAR(500) NULL,
    `dakikadaki_istek_siniri` SMALLINT UNSIGNED NOT NULL DEFAULT 30,
    `istek_zaman_asimi_saniye` SMALLINT UNSIGNED NOT NULL DEFAULT 12,
    `calisma_urun_siniri` SMALLINT UNSIGNED NOT NULL DEFAULT 25,
    `otomatik_aktarim_mi` TINYINT(1) NOT NULL DEFAULT 0,
    `son_tarama_tarihi` DATETIME NULL,
    `sistem_durumu` VARCHAR(20) NOT NULL DEFAULT 'pasif',
    `olusturulma_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `guncellenme_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    `silinme_tarihi` DATETIME(6) NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_urun_veri_kaynaklari_kod` (`kaynak_kodu`),
    KEY `ix_urun_veri_kaynaklari_izin_durum` (`izin_durumu`, `sistem_durumu`),
    CONSTRAINT `ck_urun_veri_kaynaklari_adapter` CHECK (`adapter_turu` IN (
        'schema_org_sitemap', 'open_food_facts', 'market_fiyati', 'resmi_api', 'csv_xml_feed'
    )),
    CONSTRAINT `ck_urun_veri_kaynaklari_izin` CHECK (`izin_durumu` IN (
        'beklemede', 'basvuruldu', 'onaylandi', 'reddedildi', 'suresi_doldu'
    )),
    CONSTRAINT `ck_urun_veri_kaynaklari_durum` CHECK (`sistem_durumu` IN ('aktif', 'pasif', 'arsivlendi')),
    CONSTRAINT `ck_urun_veri_kaynaklari_sinirlar` CHECK (
        `dakikadaki_istek_siniri` BETWEEN 1 AND 120
        AND `istek_zaman_asimi_saniye` BETWEEN 3 AND 30
        AND `calisma_urun_siniri` BETWEEN 1 AND 500
    )
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

CREATE TABLE IF NOT EXISTS `urun_kaynak_aktarimlari` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `urun_veri_kaynagi_id` BIGINT UNSIGNED NOT NULL,
    `calistiran_yonetici_id` BIGINT UNSIGNED NULL,
    `aktarim_turu` VARCHAR(20) NOT NULL DEFAULT 'manuel',
    `durum` VARCHAR(20) NOT NULL DEFAULT 'baslatildi',
    `incelenen_sayisi` INT UNSIGNED NOT NULL DEFAULT 0,
    `yeni_sayisi` INT UNSIGNED NOT NULL DEFAULT 0,
    `mevcut_sayisi` INT UNSIGNED NOT NULL DEFAULT 0,
    `hatali_sayisi` INT UNSIGNED NOT NULL DEFAULT 0,
    `hata_mesaji` VARCHAR(1000) NULL,
    `baslama_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `bitis_tarihi` DATETIME(6) NULL,
    `olusturulma_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `guncellenme_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    PRIMARY KEY (`id`),
    KEY `ix_urun_kaynak_aktarimlari_kaynak_tarih` (`urun_veri_kaynagi_id`, `baslama_tarihi`),
    CONSTRAINT `ck_urun_kaynak_aktarimlari_tur` CHECK (`aktarim_turu` IN ('manuel', 'otomatik', 'baglanti_testi')),
    CONSTRAINT `ck_urun_kaynak_aktarimlari_durum` CHECK (`durum` IN (
        'baslatildi', 'tamamlandi', 'kismen_tamamlandi', 'basarisiz', 'izin_engeli'
    ))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

CREATE TABLE IF NOT EXISTS `urun_kaynak_kategori_hedefleri` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `urun_veri_kaynagi_id` BIGINT UNSIGNED NOT NULL,
    `urun_kategorisi_id` BIGINT NOT NULL,
    `hedef_adi` VARCHAR(180) NOT NULL,
    `kategori_adresi` VARCHAR(2048) NOT NULL,
    `arama_adresi_sablonu` VARCHAR(2048) NULL,
    `urun_link_deseni` VARCHAR(255) NULL,
    `arama_urun_link_deseni` VARCHAR(255) NULL,
    `sonraki_sayfa_link_deseni` VARCHAR(255) NULL,
    `azami_sayfa_sayisi` SMALLINT UNSIGNED NOT NULL DEFAULT 1,
    `son_tarama_tarihi` DATETIME 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) ON UPDATE CURRENT_TIMESTAMP(6),
    `silinme_tarihi` DATETIME(6) NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_urun_kaynak_kategori_hedef` (`urun_veri_kaynagi_id`, `kategori_adresi`(255)),
    KEY `ix_urun_kaynak_kategori_hedefleri_kategori` (`urun_kategorisi_id`, `sistem_durumu`),
    CONSTRAINT `ck_urun_kaynak_kategori_hedefleri_sayfa` CHECK (`azami_sayfa_sayisi` BETWEEN 1 AND 20),
    CONSTRAINT `ck_urun_kaynak_kategori_hedefleri_durum` CHECK (`sistem_durumu` IN ('aktif', 'pasif', 'arsivlendi'))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

CREATE TABLE IF NOT EXISTS `urun_kaynak_kayitlari` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `urun_veri_kaynagi_id` BIGINT UNSIGNED NOT NULL,
    `urun_kaynak_aktarimi_id` BIGINT UNSIGNED NULL,
    `urun_kaynak_kategori_hedefi_id` BIGINT UNSIGNED NULL,
    `dis_kayit_kodu` VARCHAR(255) NOT NULL,
    `kaynak_urun_adresi` VARCHAR(2048) NOT NULL,
    `urun_adi` VARCHAR(250) NOT NULL,
    `normalize_urun_adi` VARCHAR(250) NOT NULL,
    `marka_adi` VARCHAR(180) NULL,
    `kategori_adi` VARCHAR(180) NULL,
    `barkod` VARCHAR(64) NULL,
    `net_miktar` DECIMAL(14,4) NULL,
    `olcu_birimi` VARCHAR(80) NULL,
    `ambalaj_turu` VARCHAR(100) NULL,
    `gorsel_adresi` VARCHAR(2048) NULL,
    `gorsel_lisansi` VARCHAR(100) NULL,
    `ham_veri` JSON NULL,
    `icerik_ozeti_sha256` CHAR(64) NOT NULL,
    `otomatik_kontroller` JSON NULL,
    `eslesen_urun_id` BIGINT NULL,
    `durum` VARCHAR(30) NOT NULL DEFAULT 'inceleme_bekliyor',
    `hata_mesaji` VARCHAR(1000) NULL,
    `inceleyen_yonetici_id` BIGINT UNSIGNED NULL,
    `bulunma_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `inceleme_tarihi` DATETIME(6) NULL,
    `aktarilma_tarihi` DATETIME(6) NULL,
    `olusturulma_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `guncellenme_tarihi` DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
    PRIMARY KEY (`id`),
    UNIQUE KEY `uq_urun_kaynak_kayitlari_dis_kayit` (`urun_veri_kaynagi_id`, `dis_kayit_kodu`),
    KEY `ix_urun_kaynak_kayitlari_barkod` (`barkod`),
    KEY `ix_urun_kaynak_kayitlari_durum` (`durum`, `bulunma_tarihi`),
    KEY `ix_urun_kaynak_kayitlari_eslesen` (`eslesen_urun_id`),
    CONSTRAINT `ck_urun_kaynak_kayitlari_durum` CHECK (`durum` IN (
        'inceleme_bekliyor', 'mevcut_urun', 'aktarildi', 'reddedildi', 'hatali'
    ))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_turkish_ci;

INSERT INTO `urun_veri_kaynaklari` (
    `kaynak_adi`, `kaynak_kodu`, `adapter_turu`, `ana_adres`, `izinli_host`,
    `liste_adresi`, `iletisim_adresi`, `kullanim_kosullari_adresi`,
    `izin_durumu`, `izin_notu`, `sistem_durumu`
) VALUES (
    'Market Fiyatı', 'market-fiyati', 'market_fiyati', 'https://marketfiyati.org.tr/', 'marketfiyati.org.tr',
    NULL, 'marketfiyati.destek@tubitak.gov.tr', 'https://marketfiyati.org.tr/kullanim-kosullari',
    'beklemede', 'Yazılı kullanım izni veya resmî veri erişimi alınmadan tarama kapalıdır.', 'pasif'
) ON DUPLICATE KEY UPDATE
    `iletisim_adresi` = VALUES(`iletisim_adresi`),
    `kullanim_kosullari_adresi` = VALUES(`kullanim_kosullari_adresi`),
    `guncellenme_tarihi` = CURRENT_TIMESTAMP(6);

INSERT INTO `urun_veri_kaynaklari` (
    `kaynak_adi`, `kaynak_kodu`, `adapter_turu`, `ana_adres`, `izinli_host`,
    `izinli_gorsel_hostlari`, `resmi_erisim_adresi`, `kullanim_kosullari_adresi`,
    `lisans_turu`, `izin_durumu`, `izin_onay_tarihi`, `izin_notu`, `sistem_durumu`
) VALUES (
    'Open Food Facts', 'open-food-facts', 'open_food_facts', 'https://world.openfoodfacts.org/', 'world.openfoodfacts.org',
    JSON_ARRAY('images.openfoodfacts.org'), 'https://world.openfoodfacts.org/api/v2/product/{barkod}.json',
    'https://openfoodfacts.github.io/openfoodfacts-server/api/', 'ODbL / görseller CC BY-SA',
    'onaylandi', CURRENT_TIMESTAMP, 'Lisans atfı ve paylaşım koşulları korunmalıdır.', 'aktif'
) ON DUPLICATE KEY UPDATE
    `resmi_erisim_adresi` = VALUES(`resmi_erisim_adresi`),
    `lisans_turu` = VALUES(`lisans_turu`),
    `guncellenme_tarihi` = CURRENT_TIMESTAMP(6);

COMMIT;
