create or replace function ems.fn_update_heartbeat(
    p_site_id int,
    p_status text default 'ok',
    p_ems_version text default null
)
returns void
language sql
as $$
    insert into ems.site_heartbeat (site_id, last_seen, status, ems_version)
    values (p_site_id, now(), p_status, p_ems_version)
    on conflict (site_id) do update set
        last_seen = now(),
        status = excluded.status,
        ems_version = coalesce(excluded.ems_version, ems.site_heartbeat.ems_version);
$$;

comment on function ems.fn_update_heartbeat(int, text, text) is
'Aktualizuje informační heartbeat záznam EMS pro danou lokalitu.
Volat každou minutu z backend service po úspěšném odeslání pulzu do Loxone.
Slouží pouze pro EMS dashboard – Loxone watchdog nezávisí na této tabulce,
sleduje HTTP pulzy přímo a nezávisle na dostupnosti DB.';

