-- =============================================================
-- R__fn_effective_price.sql
-- EMS Platform – funkce pro výpočet efektivní ceny per site
-- Repeatable migration – nasazuje se při každé změně
-- =============================================================

CREATE OR REPLACE FUNCTION ems.fn_effective_buy_price(
    p_site_id      INT,
    p_interval_start TIMESTAMPTZ
)
RETURNS NUMERIC(10,6)
LANGUAGE sql
STABLE
AS $$
    SELECT
        mip.buy_raw_price_czk_kwh
        + smc.buy_margin_fixed_czk
        + (mip.buy_raw_price_czk_kwh * smc.buy_margin_percent / 100.0)
    FROM ems.market_interval_price mip
    CROSS JOIN ems.site_market_config smc
    WHERE mip.market_source = 'OTE_CZ'
      AND mip.interval_start = p_interval_start
      AND smc.site_id = p_site_id
      AND smc.valid_from <= p_interval_start
      AND (smc.valid_to IS NULL OR smc.valid_to > p_interval_start)
    ORDER BY smc.valid_from DESC
    LIMIT 1;
$$;

COMMENT ON FUNCTION ems.fn_effective_buy_price(INT, TIMESTAMPTZ) IS
'Vrátí efektivní nákupní cenu elektřiny v Kč/kWh pro danou lokalitu a 15min interval.
Přičítá fixní a procentní nákupní marži dle aktuálně platné site_market_config.';

-- ------------------------------------------------------------

CREATE OR REPLACE FUNCTION ems.fn_effective_sell_price(
    p_site_id        INT,
    p_interval_start TIMESTAMPTZ
)
RETURNS NUMERIC(10,6)
LANGUAGE sql
STABLE
AS $$
    SELECT
        mip.sell_raw_price_czk_kwh
        + smc.sell_margin_fixed_czk
        + (mip.sell_raw_price_czk_kwh * smc.sell_margin_percent / 100.0)
    FROM ems.market_interval_price mip
    CROSS JOIN ems.site_market_config smc
    WHERE mip.market_source = 'OTE_CZ'
      AND mip.interval_start = p_interval_start
      AND smc.site_id = p_site_id
      AND smc.valid_from <= p_interval_start
      AND (smc.valid_to IS NULL OR smc.valid_to > p_interval_start)
    ORDER BY smc.valid_from DESC
    LIMIT 1;
$$;

COMMENT ON FUNCTION ems.fn_effective_sell_price(INT, TIMESTAMPTZ) IS
'Vrátí efektivní prodejní cenu elektřiny v Kč/kWh pro danou lokalitu a 15min interval.
Aplikuje fixní a procentní prodejní marži (záporná marže = srážka z prodejní ceny).';
