-- ===========================================================================
-- Migration: Create supplier_recipe_ingredient
-- Date: 2026-05-05
-- Context: Recipe Calculator module (v1)
-- ===========================================================================
-- Linie składników receptury. Każdy wiersz to jeden surowiec z określoną
-- ilością i snapshotem danych cenowych z chwili dodania składnika.
--
-- Kluczowe decyzje projektowe:
--
--   Snapshoty (price_net_snapshot, price_snapshot_date, unit_symbol_snapshot,
--   raw_material_name_snapshot, waste_perc_snapshot):
--     Przechowują wartości z chwili dodania składnika do receptury.
--     Umożliwiają rekonstrukcję kosztu historycznego niezależnie od zmian
--     cen i danych surowca. price_net_snapshot może być NULL jeśli surowiec
--     nie miał historii cen w chwili dodania (UI pokazuje ostrzeżenie).
--
--   quantity:
--     Ilość surowca w recepturze w jednostce bazowej surowca.
--     Musi być > 0.
--
--   supplier_id:
--     Zduplikowany z receptury dla bezpośredniej izolacji i JOIN-ów.
--
-- ===========================================================================

CREATE TABLE IF NOT EXISTS `supplier_recipe_ingredient` (
    `id`                        INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `recipe_id`                 INT UNSIGNED    NOT NULL COMMENT 'FK → supplier_recipe.id',
    `supplier_id`               INT(11)         NOT NULL COMMENT 'FK → material_supplier.id — izolacja per dostawca',
    `raw_material_id`           INT UNSIGNED    NOT NULL COMMENT 'FK → supplier_raw_material.id',
    `quantity`                  DECIMAL(10,4)   NOT NULL COMMENT 'Ilość w jednostce bazowej surowca (> 0)',
    -- Snapshot danych w chwili dodania składnika
    `price_net_snapshot`        DECIMAL(10,4)   NULL     COMMENT 'Cena netto za jednostkę bazową w chwili dodania (NULL = brak ceny)',
    `price_snapshot_date`       DATE            NULL     COMMENT 'Data ceny z price_history użytej do snapshotu',
    `unit_symbol_snapshot`      VARCHAR(20)     NULL     COMMENT 'Symbol jednostki surowca w chwili dodania (np. kg, l)',
    `raw_material_name_snapshot` VARCHAR(255)   NOT NULL COMMENT 'Nazwa surowca w chwili dodania',
    `waste_perc_snapshot`       DECIMAL(5,2)    NOT NULL DEFAULT 0.00 COMMENT 'Odpad % surowca w chwili dodania',
    -- Timestamps
    `created_at`                DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `updated_at`                DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),

    KEY `idx_sri_recipe`        (`recipe_id`),
    KEY `idx_sri_supplier`      (`supplier_id`),
    KEY `idx_sri_raw_material`  (`raw_material_id`),

    -- Unikalność: jeden surowiec raz na recepturę
    UNIQUE KEY `uq_sri_recipe_material` (`recipe_id`, `raw_material_id`),

    CONSTRAINT `fk_sri_recipe`
        FOREIGN KEY (`recipe_id`) REFERENCES `supplier_recipe` (`id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,

    CONSTRAINT `fk_sri_supplier`
        FOREIGN KEY (`supplier_id`) REFERENCES `material_supplier` (`id`)
        ON DELETE CASCADE
        ON UPDATE CASCADE,

    CONSTRAINT `fk_sri_raw_material`
        FOREIGN KEY (`raw_material_id`) REFERENCES `supplier_raw_material` (`id`)
        ON DELETE RESTRICT

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
