-- Migration 014: Create settings table + seed default rows
-- Requirements: 11.3, 11.4
-- Design: Data Models -> 14. SETTINGS
--
-- Tabel key-value sederhana untuk konfigurasi runtime (tidak diatur via .env
-- karena perlu dimodifikasi oleh ADMIN dari UI). Kolom `key` menggunakan
-- backtick karena merupakan reserved word MySQL. `value_type` mendokumentasikan
-- bagaimana lapisan repository men-deserialize string `value` (BOOL → 'true'
-- /'false', INT → integer, JSON → JSON.parse, default STRING).
--
-- Seed default menggunakan INSERT IGNORE agar idempoten: jika migrasi pernah
-- dijalankan parsial atau row sudah dimodifikasi user, INSERT IGNORE tidak
-- menimpanya. schema_migrations menjamin migrasi tidak rerun, namun INSERT
-- IGNORE memberi safety-net tambahan.

CREATE TABLE IF NOT EXISTS settings (
    `key`           VARCHAR(128)  NOT NULL,
    value           VARCHAR(2048) NOT NULL,
    value_type      ENUM('STRING','INT','BOOL','JSON') NOT NULL DEFAULT 'STRING',
    description     VARCHAR(512)  NULL,
    updated_by      BIGINT UNSIGNED NULL,
    updated_at      DATETIME(3)   NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
    PRIMARY KEY (`key`),
    CONSTRAINT fk_settings_user FOREIGN KEY (updated_by)
        REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO settings (`key`, value, value_type, description) VALUES
    ('restock_on_return', 'false', 'BOOL', 'Kembalikan stok varian saat order RETURNED'),
    ('discrepancy_alert_threshold', '0', 'INT', 'Ambang absolut alert discrepancy (IDR)'),
    ('default_tz', 'Asia/Jakarta', 'STRING', 'Default timezone server');
