-- =============================================================
-- V014__asset_model_refinement.sql
-- Rozlišení limitů: AC střídač / DC FVE / baterie přes měnič / BMS+C-rate
-- =============================================================

-- Střídač: nové sloupce (staré max_charge_power_w / max_discharge_power_w ponechány kvůli kompatibilitě)
ALTER TABLE ems.asset_inverter
  ADD COLUMN IF NOT EXISTS max_ac_output_w           INT,
  ADD COLUMN IF NOT EXISTS max_dc_input_w            INT,
  ADD COLUMN IF NOT EXISTS max_battery_charge_w      INT,
  ADD COLUMN IF NOT EXISTS max_battery_discharge_w   INT,
  ADD COLUMN IF NOT EXISTS gen_port_max_power_w      INT;

COMMENT ON COLUMN ems.asset_inverter.max_ac_output_w IS
'Maximální AC výkon střídače v W. Deye SUN-20K = 22000 W.';
COMMENT ON COLUMN ems.asset_inverter.max_dc_input_w IS
'Maximální DC vstupní výkon z FVE v W. Deye SUN-20K = 40000 W.';
COMMENT ON COLUMN ems.asset_inverter.max_battery_charge_w IS
'Maximální výkon nabíjení baterie v W – limit střídače (ne BMS).
Deye SUN-20K s LV baterií = 18000 W (350A × 51.2V).';
COMMENT ON COLUMN ems.asset_inverter.max_battery_discharge_w IS
'Maximální výkon vybíjení baterie v W – limit střídače.
Deye SUN-20K s LV baterií = 18000 W.';
COMMENT ON COLUMN ems.asset_inverter.gen_port_max_power_w IS
'Maximální výkon GEN portu v W. Zahrnuje součet všech zařízení
zapojených do GEN portu (mikroinvertory, ongrid střídač).
Pro home-01 = 10080 W (pv-b pole).
Pro druhou instalaci = 4400 W (2× 2.2 kW mikroinvertory).';

-- Baterie: C-rate a BMS
ALTER TABLE ems.asset_battery
  ADD COLUMN IF NOT EXISTS max_charge_c_rate     NUMERIC(4,2),
  ADD COLUMN IF NOT EXISTS max_discharge_c_rate  NUMERIC(4,2),
  ADD COLUMN IF NOT EXISTS bms_max_charge_w      INT,
  ADD COLUMN IF NOT EXISTS bms_max_discharge_w   INT;

COMMENT ON COLUMN ems.asset_battery.max_charge_c_rate IS
'Maximální nabíjecí C-rate. 0.5C pro 64 kWh = 32 kW teoretické maximum.
Skutečný limit je min(bms_max_charge_w, inverter.max_battery_charge_w).';
COMMENT ON COLUMN ems.asset_battery.max_discharge_c_rate IS
'Maximální vybíjecí C-rate (symetricky k nabíjení).';
COMMENT ON COLUMN ems.asset_battery.bms_max_charge_w IS
'Maximální nabíjecí výkon dle BMS v W. Pokud NULL, použij C-rate výpočet.';
COMMENT ON COLUMN ems.asset_battery.bms_max_discharge_w IS
'Maximální vybíjecí výkon dle BMS v W. Pokud NULL, použij C-rate výpočet.';

-- Z existujících sloupců přejmenujeme sémantiku do nových (kde ještě nejsou vyplněné)
UPDATE ems.asset_inverter
SET
  max_battery_charge_w    = COALESCE(max_battery_charge_w, max_charge_power_w),
  max_battery_discharge_w = COALESCE(max_battery_discharge_w, max_discharge_power_w)
WHERE max_charge_power_w IS NOT NULL
   OR max_discharge_power_w IS NOT NULL;

-- Seed home-01: hlavní Deye (ne ongrid řádek)
UPDATE ems.asset_inverter inv
SET
  max_ac_output_w           = 22000,
  max_dc_input_w            = 40000,
  max_battery_charge_w      = 18000,
  max_battery_discharge_w   = 18000,
  gen_port_max_power_w      = 10080
FROM ems.site s
WHERE s.id = inv.site_id
  AND s.code = 'home-01'
  AND inv.code = 'deye-main';

UPDATE ems.asset_battery ab
SET
  max_charge_c_rate     = 0.28,
  max_discharge_c_rate  = 0.28,
  bms_max_charge_w      = 18000,
  bms_max_discharge_w   = 18000
FROM ems.asset_inverter inv
JOIN ems.site s ON s.id = inv.site_id
WHERE ab.inverter_id = inv.id
  AND s.code = 'home-01'
  AND inv.code = 'deye-main';
