-- Kalibrace PV forecastu per site (cutoff učení, škrcení policy, volitelné přepsání parametrů delty).
-- forecast_accuracy: flagy pro učení (vyloučení škrcených slotů apod.).

CREATE TABLE ems.site_pv_forecast_calibration (
    site_id int NOT NULL PRIMARY KEY REFERENCES ems.site (id) ON DELETE CASCADE,
    -- Od tohoto okamžiku (UTC) brát řádky do učení delty / vážených statistik (>=).
    delta_learn_min_ts timestamptz NOT NULL,
    -- Od kdy platí agresivní export/škrcení policy (NULL = neaplikovat časový filtr u heuristiky škrcení).
    pv_curtailment_policy_effective_from timestamptz NULL,
    top_n_days int NULL,
    non_top_day_factor numeric NULL,
    day_weight_gamma numeric NULL,
    half_life_days numeric NULL,
    threshold_w int NULL,
    updated_at timestamptz NOT NULL DEFAULT now()
);

COMMENT ON TABLE ems.site_pv_forecast_calibration IS
'Per-site kalibrace PV delta profilu a pravidla učení. NULL v numerických sloupích = použít default z ems.fn_pv_forecast_delta_profile.';

COMMENT ON COLUMN ems.site_pv_forecast_calibration.delta_learn_min_ts IS
'Dolní mez interval_start pro učení delty z forecast_accuracy (UTC).';

COMMENT ON COLUMN ems.site_pv_forecast_calibration.pv_curtailment_policy_effective_from IS
'Od tohoto času bereme heuristiku škrcení (planning_interval): sloty po tomto datu s curtailment/cut-off se mohou vyloučit z učení.';

ALTER TABLE ems.forecast_accuracy
    ADD COLUMN IF NOT EXISTS learning_eligible boolean NOT NULL DEFAULT true,
    ADD COLUMN IF NOT EXISTS learning_exclude_reason text NULL;

COMMENT ON COLUMN ems.forecast_accuracy.learning_eligible IS
'false = řádek se nepoužívá pro učení delty (škrcení, před cutoffem, …); actual_power_w může být NULL pro audit.';

COMMENT ON COLUMN ems.forecast_accuracy.learning_exclude_reason IS
'Důvod vyloučení z učení, např. curtailment_or_gen_cutoff, before_delta_learn_min.';

-- Seed: všechny existující lokality — stejný cutoff jako dosud v R__078 (začátek 2026-04-12 Europe/Prague).
INSERT INTO ems.site_pv_forecast_calibration (site_id, delta_learn_min_ts, top_n_days)
SELECT s.id, timestamptz '2026-04-11T22:00:00Z', 3
FROM ems.site s
ON CONFLICT (site_id) DO NOTHING;
