CREATE OR REPLACE FUNCTION public.set_coverage_zone_geometry()
RETURNS trigger
LANGUAGE plpgsql
AS $$
DECLARE
    site_location geometry(Point, 4326);
    sector_azimuth integer;
    sector_beamwidth integer;
BEGIN
    SELECT ns.location, ts.azimuth, ts.beamwidth
      INTO site_location, sector_azimuth, sector_beamwidth
      FROM public.tower_sectors ts
      JOIN public.cell_towers ct ON ct.tower_id = ts.tower_id
      JOIN public.network_sites ns ON ns.site_id = ct.site_id
     WHERE ts.sector_id = NEW.sector_id;

    IF site_location IS NULL
       OR sector_azimuth IS NULL
       OR sector_beamwidth IS NULL THEN
        NEW.coverage_area := NULL;
    ELSE
        NEW.coverage_area := public.build_sector_coverage(
            site_location,
            sector_azimuth,
            sector_beamwidth,
            NEW.coverage_radius_m
        );
    END IF;

    RETURN NEW;
END;
$$;
