-- ============================================================
-- 008_assets.sql — 방제자산 테이블 (기관 + 장비 + 담당자)
-- ============================================================

SET search_path TO wing;

-- ============================================================
-- 1. 기관/조직 마스터
-- ============================================================
CREATE TABLE IF NOT EXISTS ASSET_ORG (
  ORG_SN        SERIAL PRIMARY KEY,
  ORG_TP        VARCHAR(30) NOT NULL,            -- 유형: 해경관할, 해경경찰서, 파출소, 관련기관, 해양환경공단, 업체, 지자체, 기름저장시설, 정유사, 해군, 기타
  JRSD_NM       VARCHAR(50) NOT NULL,            -- 관할청명: 중부지방해양경찰청, 서해지방해양경찰청 등
  AREA_NM       VARCHAR(30) NOT NULL,            -- 지역명: 인천, 여수, 부산 등
  ORG_NM        VARCHAR(100) NOT NULL,           -- 기관명
  ADDR          VARCHAR(300),                    -- 주소
  TEL           VARCHAR(30),                     -- 대표 전화
  LAT           NUMERIC(9,6),                    -- 위도
  LNG           NUMERIC(10,6),                   -- 경도
  PIN_SIZE      VARCHAR(5) DEFAULT 'md',         -- 지도 핀 크기: hq, lg, md
  VESSEL_CNT    SMALLINT DEFAULT 0,              -- 방제선 수
  SKIMMER_CNT   SMALLINT DEFAULT 0,              -- 유회수기 수
  PUMP_CNT      SMALLINT DEFAULT 0,              -- 이송펌프 수
  VEHICLE_CNT   SMALLINT DEFAULT 0,              -- 방제차량 수
  SPRAYER_CNT   SMALLINT DEFAULT 0,              -- 살포장치 수
  TOTAL_ASSETS  SMALLINT DEFAULT 0,              -- 총 자산 수
  USE_YN        CHAR(1) DEFAULT 'Y',
  REG_DTM       TIMESTAMPTZ DEFAULT NOW(),
  MDFCN_DTM     TIMESTAMPTZ,
  CONSTRAINT CK_ASSET_ORG_PIN CHECK (PIN_SIZE IN ('hq','lg','md'))
);

-- ============================================================
-- 2. 장비 상세
-- ============================================================
CREATE TABLE IF NOT EXISTS ASSET_EQUIP (
  EQUIP_SN      SERIAL PRIMARY KEY,
  ORG_SN        INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE,
  CTGR_NM       VARCHAR(50) NOT NULL,            -- 장비 카테고리: 방제선, 유회수기, 비치크리너, ...
  ICON          VARCHAR(10),                     -- 이모지 아이콘
  QTY           SMALLINT DEFAULT 0,              -- 수량
  SORT_ORD      SMALLINT DEFAULT 0,
  UNIQUE(ORG_SN, CTGR_NM)
);

-- ============================================================
-- 3. 담당자
-- ============================================================
CREATE TABLE IF NOT EXISTS ASSET_CONTACT (
  CONTACT_SN    SERIAL PRIMARY KEY,
  ORG_SN        INTEGER NOT NULL REFERENCES ASSET_ORG(ORG_SN) ON DELETE CASCADE,
  ROLE_NM       VARCHAR(50),                     -- 역할: 방제과장, 방제담당, 담당 등
  CONTACT_NM    VARCHAR(50),                     -- 이름
  TEL           VARCHAR(30),                     -- 전화번호
  SORT_ORD      SMALLINT DEFAULT 0
);

-- ============================================================
-- 4. 업로드 이력
-- ============================================================
CREATE TABLE IF NOT EXISTS ASSET_UPLOAD_LOG (
  LOG_SN        SERIAL PRIMARY KEY,
  FILE_NM       VARCHAR(200) NOT NULL,           -- 파일명
  UPLOADER_NM   VARCHAR(50),                     -- 업로더 이름/부서
  UPLOAD_CNT    INTEGER DEFAULT 0,               -- 처리 건수
  REG_DTM       TIMESTAMPTZ DEFAULT NOW()
);

-- ============================================================
-- 인덱스
-- ============================================================
CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_JRSD ON ASSET_ORG(JRSD_NM);
CREATE INDEX IF NOT EXISTS IDX_ASSET_ORG_TP ON ASSET_ORG(ORG_TP);
CREATE INDEX IF NOT EXISTS IDX_ASSET_EQUIP_ORG ON ASSET_EQUIP(ORG_SN);
CREATE INDEX IF NOT EXISTS IDX_ASSET_CONTACT_ORG ON ASSET_CONTACT(ORG_SN);

-- ============================================================
-- 초기 데이터: 업로드 이력 샘플
-- ============================================================
INSERT INTO ASSET_UPLOAD_LOG (FILE_NM, UPLOADER_NM, UPLOAD_CNT, REG_DTM) VALUES
  ('여수서_장비자재_2601.xlsx', '남해청_방제과', 45, '2026-01-25 14:30:00+09'),
  ('인천서_오일펜스현황.xlsx', '중부청_방제과', 12, '2026-01-22 10:15:00+09'),
  ('전체_방제정_현황.xlsx', '본청_방제과', 18, '2026-01-20 09:00:00+09');
