-- ============================================================
-- 마이그레이션 006: 게시판 (BOARD_POST)
-- wing 스키마에 생성, auth.AUTH_USER FK 참조
-- ============================================================

-- Step 1: 게시판 테이블
CREATE TABLE IF NOT EXISTS BOARD_POST (
  POST_SN       SERIAL       PRIMARY KEY,
  CATEGORY_CD   VARCHAR(20)  NOT NULL,
  TITLE         VARCHAR(200) NOT NULL,
  CONTENT       TEXT,
  AUTHOR_ID     UUID         NOT NULL,
  VIEW_CNT      INTEGER      NOT NULL DEFAULT 0,
  PINNED_YN     CHAR(1)      NOT NULL DEFAULT 'N',
  USE_YN        CHAR(1)      NOT NULL DEFAULT 'Y',
  REG_DTM       TIMESTAMPTZ  NOT NULL DEFAULT NOW(),
  MDFCN_DTM     TIMESTAMPTZ,

  CONSTRAINT FK_BOARD_AUTHOR FOREIGN KEY (AUTHOR_ID)
    REFERENCES auth.AUTH_USER(USER_ID),
  CONSTRAINT CK_BOARD_CATEGORY
    CHECK (CATEGORY_CD IN ('NOTICE','DATA','QNA','MANUAL')),
  CONSTRAINT CK_BOARD_PINNED CHECK (PINNED_YN IN ('Y','N')),
  CONSTRAINT CK_BOARD_USE CHECK (USE_YN IN ('Y','N'))
);

COMMENT ON TABLE BOARD_POST IS '게시판 게시글';
COMMENT ON COLUMN BOARD_POST.CATEGORY_CD IS '카테고리: NOTICE=공지, DATA=자료실, QNA=Q&A, MANUAL=해경매뉴얼';
COMMENT ON COLUMN BOARD_POST.PINNED_YN IS '상단고정 여부';
COMMENT ON COLUMN BOARD_POST.USE_YN IS '사용여부 (N=논리삭제)';

CREATE INDEX IF NOT EXISTS IDX_BOARD_CATEGORY ON BOARD_POST(CATEGORY_CD);
CREATE INDEX IF NOT EXISTS IDX_BOARD_AUTHOR   ON BOARD_POST(AUTHOR_ID);
CREATE INDEX IF NOT EXISTS IDX_BOARD_REG_DTM  ON BOARD_POST(REG_DTM DESC);

-- Step 2: 초기 데이터 (기존 프론트엔드 mockPosts 이전)
-- admin 사용자 ID 조회
DO $$
DECLARE
  v_admin_id UUID;
BEGIN
  SELECT USER_ID INTO v_admin_id FROM auth.AUTH_USER WHERE USER_ACNT = 'admin' LIMIT 1;

  IF v_admin_id IS NOT NULL THEN
    INSERT INTO BOARD_POST (CATEGORY_CD, TITLE, CONTENT, AUTHOR_ID, VIEW_CNT, PINNED_YN, REG_DTM) VALUES
      ('NOTICE', '시스템 업데이트 안내', '시스템 업데이트 관련 안내사항입니다.', v_admin_id, 245, 'Y', '2025-02-15'::timestamptz),
      ('NOTICE', '2025년 방제 교육 일정 안내', '2025년도 방제 교육 일정을 안내합니다.', v_admin_id, 189, 'Y', '2025-02-14'::timestamptz),
      ('DATA', '방제 매뉴얼 업데이트 (2025년 개정판)', '2025년 개정판 방제 매뉴얼입니다.', v_admin_id, 423, 'N', '2025-02-10'::timestamptz),
      ('QNA', 'HNS 대기확산 분석 결과 해석 문의', 'HNS 분석 결과 해석 방법을 문의합니다.', v_admin_id, 156, 'N', '2025-02-08'::timestamptz),
      ('DATA', '2024년 유류오염사고 통계 자료', '2024년도 유류오염사고 통계 자료를 공유합니다.', v_admin_id, 312, 'N', '2025-02-05'::timestamptz),
      ('QNA', '유출유 확산 예측 알고리즘 선택 기준', '확산 예측 시 알고리즘 선택 기준을 문의합니다.', v_admin_id, 267, 'N', '2025-02-03'::timestamptz),
      ('DATA', '해양오염 방제 장비 운용 가이드', '방제 장비 운용 가이드 문서입니다.', v_admin_id, 534, 'N', '2025-01-28'::timestamptz),
      ('QNA', 'SCAT 조사 방법 관련 질문', 'SCAT 현장 조사 방법에 대해 질문합니다.', v_admin_id, 198, 'N', '2025-01-25'::timestamptz),
      ('DATA', 'HNS 물질 안전보건자료 (MSDS) 모음', 'HNS 물질별 MSDS 자료 모음입니다.', v_admin_id, 645, 'N', '2025-01-20'::timestamptz),
      ('QNA', '항공촬영 드론 운용 시 주의사항', '드론 운용 시 주의할 점을 문의합니다.', v_admin_id, 221, 'N', '2025-01-15'::timestamptz)
    ON CONFLICT DO NOTHING;
  END IF;
END $$;

-- 검증
SELECT POST_SN, CATEGORY_CD, TITLE, VIEW_CNT, PINNED_YN FROM BOARD_POST ORDER BY POST_SN;
