-- ===========================================================================
-- Migration: Create supplier_raw_material_price_history
-- Date: 2026-05-05
-- Context: Recipe Calculator — Raw Materials module (v1)
-- ===========================================================================
-- Historia cen surowców — append-only. Zapisów się nie edytuje.
--
-- Wzorzec: analogia do supplier_product_price_list (valid_from DATE).
--
-- Brak pola currency:
--   Waluta przechowywana na poziomie material_supplier.currency.
--   Wszystkie ceny dostawcy są w jednej walucie.
--   Przy wyświetlaniu historii — waluta pobierana z kontekstu dostawcy.
--
-- supplier_id (denormalizacja):
--   Przechowywany dla bezpieczeństwa — umożliwia weryfikację ownership
--   bez JOIN do supplier_raw_material oraz filtrowanie per dostawca.
--
-- Sync current_price_net:
--   Przy INSERT nowej ceny serwis (TransactionManager) aktualizuje
--   supplier_raw_material.current_price_net TYLKO gdy valid_from <= CURDATE().
--   Ceny przyszłe (valid_from > CURDATE()) nie aktualizują pola denorm.
-- ===========================================================================

CREATE TABLE IF NOT EXISTS `supplier_raw_material_price_history` (
    `id`                INT UNSIGNED    NOT NULL AUTO_INCREMENT,
    `raw_material_id`   INT UNSIGNED    NOT NULL COMMENT 'FK → supplier_raw_material.id',
    `supplier_id`       INT(11)         NOT NULL COMMENT 'Denormalizacja supplier_id — security + filtrowanie per dostawca',
    `price_net`         DECIMAL(10,4)   NOT NULL COMMENT 'Cena netto za jednostkę bazową surowca',
    -- Waluta pochodzi z material_supplier.currency — nie duplikujemy per wpis
    `valid_from`        DATE            NOT NULL COMMENT 'Data wejścia ceny w życie',
    `note`              VARCHAR(500)    NULL     COMMENT 'Notatka o zmianie ceny (opcjonalna)',
    `created_by_user`   INT(11)         NULL     COMMENT 'auth_user.id — kto dodał wpis (audit)',
    `created_at`        DATETIME        NOT NULL DEFAULT CURRENT_TIMESTAMP,

    PRIMARY KEY (`id`),

    -- FK do surowca
    KEY `idx_srmph_raw_material` (`raw_material_id`),

    -- Composite: "pobierz aktualną cenę" (valid_from <= CURDATE() ORDER BY valid_from DESC LIMIT 1)
    -- Wzorzec: PriceListRepository::getCurrentPrices()
    KEY `idx_srmph_supplier_date` (`supplier_id`, `raw_material_id`, `valid_from`),

    CONSTRAINT `fk_srmph_raw_material`
        FOREIGN KEY (`raw_material_id`) REFERENCES `supplier_raw_material` (`id`)
        ON DELETE CASCADE

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

