-- 009: 선단/어구그룹 폴리곤 스냅샷 테이블
-- 5분 주기 APPEND, 7일 보존

SET search_path TO kcg, public;

CREATE TABLE IF NOT EXISTS kcg.group_polygon_snapshots (
  id              BIGSERIAL PRIMARY KEY,

  -- 그룹 식별
  group_type      VARCHAR(20) NOT NULL,         -- FLEET | GEAR_IN_ZONE | GEAR_OUT_ZONE
  group_key       VARCHAR(100) NOT NULL,         -- fleet: company_id, gear: parent_name
  group_label     TEXT,                           -- 표시명 (회사명 또는 모선명)

  -- 스냅샷 시각
  snapshot_time   TIMESTAMPTZ NOT NULL,

  -- PostGIS geometry
  polygon         geometry(Polygon, 4326),       -- convex hull + buffer (3점 미만 시 NULL)
  center_point    geometry(Point, 4326),          -- 중심점

  -- 지표
  area_sq_nm      DOUBLE PRECISION DEFAULT 0,    -- 면적 (제곱 해리)
  member_count    INT NOT NULL DEFAULT 0,         -- 소속 선박/어구 수

  -- 수역 분류 (어구그룹용)
  zone_id         VARCHAR(20),                    -- ZONE_I ~ ZONE_IV | OUTSIDE
  zone_name       TEXT,

  -- 멤버 상세 (JSONB 배열)
  members         JSONB NOT NULL DEFAULT '[]',
  -- [{mmsi, name, lat, lon, sog, cog, role, isParent}]

  -- 색상 힌트
  color           VARCHAR(20),

  created_at      TIMESTAMPTZ DEFAULT NOW()
);

-- 조회 성능 인덱스
CREATE INDEX IF NOT EXISTS idx_gps_type_time
  ON kcg.group_polygon_snapshots(group_type, snapshot_time DESC);
CREATE INDEX IF NOT EXISTS idx_gps_key_time
  ON kcg.group_polygon_snapshots(group_key, snapshot_time DESC);
CREATE INDEX IF NOT EXISTS idx_gps_snapshot_time
  ON kcg.group_polygon_snapshots(snapshot_time DESC);

-- 공간 인덱스
CREATE INDEX IF NOT EXISTS idx_gps_polygon_gist
  ON kcg.group_polygon_snapshots USING GIST(polygon);
