-- Migration: 2026_04_01_delivery_config
-- Mechanizm minimalnej wartości zamówienia i progów kosztów dostawy.
--
-- material_supplier_order_config
--   Konfiguracja ogólna per dostawca: minimalna wartość zamówienia + waluta.
--   Przygotowana na rozszerzenie per-sklep (id_shop) w przyszłej iteracji.
--
-- material_supplier_order_fee
--   Generyczna tabela progów kosztów dodatkowych per dostawca.
--   fee_type: 'delivery' | 'express' | 'pallet' | ...
--   Maksymalnie 5 tierów dla fee_type='delivery' (tier_order 1–5).
--   max_order_value IS NULL = brak górnego limitu (franco/darmowa dostawa).
--
-- material_order_fee
--   Snapshot naliczonych kosztów per zamówienie (ślad audytowy).
--   Zapisywany zawsze, nawet gdy fee_amount = 0.00 (potwierdzenie że sprawdzono).

CREATE TABLE IF NOT EXISTS material_supplier_order_config (
    id              INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_supplier     INT UNSIGNED NOT NULL,
    -- Przyszłość: id_shop INT UNSIGNED NULL DEFAULT NULL COMMENT 'NULL = reguła globalna; NOT NULL = nadpisanie per sklep',
    min_order_value DECIMAL(10,2) NOT NULL DEFAULT 0.00
        COMMENT 'Minimalna wartość zamówienia. 0 = brak minimum.',
    currency_code   CHAR(3)       NOT NULL DEFAULT 'EUR'
        COMMENT 'Kod waluty ISO 4217, np. EUR, PLN, GBP.',
    is_active       TINYINT(1)    NOT NULL DEFAULT 1,
    created_at      DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at      DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_supplier (id_supplier),
    CONSTRAINT fk_msoc_supplier
        FOREIGN KEY (id_supplier) REFERENCES material_supplier(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS material_supplier_order_fee (
    id               INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_supplier      INT UNSIGNED NOT NULL,
    -- Przyszłość: id_shop INT UNSIGNED NULL DEFAULT NULL,
    fee_type         VARCHAR(50)   NOT NULL DEFAULT 'delivery'
        COMMENT 'Typ opłaty: delivery | express | pallet | minimum_surcharge | ...',
    tier_order       TINYINT UNSIGNED NOT NULL DEFAULT 1
        COMMENT 'Kolejność progu w ramach fee_type (1–5).',
    min_order_value  DECIMAL(10,2) NOT NULL DEFAULT 0.00
        COMMENT 'Dolna granica przedziału: wartość zamówienia >= min_order_value.',
    max_order_value  DECIMAL(10,2) NULL DEFAULT NULL
        COMMENT 'Górna granica przedziału: wartość zamówienia < max_order_value. NULL = bez limitu (franco).',
    fee_amount       DECIMAL(10,2) NOT NULL DEFAULT 0.00
        COMMENT 'Koszt dostawy dla tego progu. 0.00 = darmowa dostawa / franco.',
    is_active        TINYINT(1)    NOT NULL DEFAULT 1,
    created_at       DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    updated_at       DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY uq_supplier_type_tier (id_supplier, fee_type, tier_order),
    CONSTRAINT fk_msof_supplier
        FOREIGN KEY (id_supplier) REFERENCES material_supplier(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS material_order_fee (
    id            INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    id_order      INT UNSIGNED NOT NULL,
    fee_type      VARCHAR(50)  NOT NULL DEFAULT 'delivery'
        COMMENT 'Typ opłaty; odpowiada fee_type z material_supplier_order_fee.',
    label         VARCHAR(100) NULL DEFAULT NULL
        COMMENT 'Automatycznie generowana etykieta progu, np. "2 000 – 3 000 EUR".',
    fee_amount    DECIMAL(10,2) NOT NULL DEFAULT 0.00
        COMMENT 'Naliczony koszt. 0.00 = franco (ślad audytowy).',
    currency_code CHAR(3)       NOT NULL DEFAULT 'EUR',
    created_at    DATETIME      NOT NULL DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT fk_mof_order
        FOREIGN KEY (id_order) REFERENCES material_order(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- Indeksy pomocnicze
CREATE INDEX idx_msof_supplier_type ON material_supplier_order_fee (id_supplier, fee_type, is_active);
CREATE INDEX idx_mof_order ON material_order_fee (id_order);

