-- ================================================================
-- 002: HNS 물질정보 테이블 (프론트엔드 정적 데이터 → DB 이전)
-- ================================================================
-- 검색용 컬럼 + 상세 데이터 JSONB 구조
-- pg_trgm 인덱스로 한글/영문 물질명 검색 지원
-- ================================================================

CREATE TABLE IF NOT EXISTS HNS_SUBSTANCE (
  SBST_SN         SERIAL        NOT NULL,  -- 물질순번
  ABBREVIATION    VARCHAR(50),             -- 약자/제품명
  NM_KR           VARCHAR(200)  NOT NULL,  -- 국문명
  NM_EN           VARCHAR(200),            -- 영문명
  UN_NO           VARCHAR(10),             -- UN번호
  CAS_NO          VARCHAR(20),             -- CAS번호
  SEBC            VARCHAR(50),             -- SEBC 거동분류
  DATA            JSONB         NOT NULL,  -- 전체 상세 데이터
  USE_YN          CHAR(1)       NOT NULL DEFAULT 'Y',  -- 사용여부
  REG_DTM         TIMESTAMPTZ   NOT NULL DEFAULT NOW(), -- 등록일시
  CONSTRAINT PK_HNS_SUBSTANCE PRIMARY KEY (SBST_SN),
  CONSTRAINT CK_HNS_SBST_USE CHECK (USE_YN IN ('Y', 'N'))
);

COMMENT ON TABLE  HNS_SUBSTANCE IS 'HNS물질정보 (1,316종)';
COMMENT ON COLUMN HNS_SUBSTANCE.SBST_SN      IS '물질순번';
COMMENT ON COLUMN HNS_SUBSTANCE.ABBREVIATION  IS '약자/제품명 (화물적부도 코드)';
COMMENT ON COLUMN HNS_SUBSTANCE.NM_KR         IS '국문명';
COMMENT ON COLUMN HNS_SUBSTANCE.NM_EN         IS '영문명';
COMMENT ON COLUMN HNS_SUBSTANCE.UN_NO         IS 'UN번호 (위험물 식별번호)';
COMMENT ON COLUMN HNS_SUBSTANCE.CAS_NO        IS 'CAS번호 (화학물질등록번호)';
COMMENT ON COLUMN HNS_SUBSTANCE.SEBC          IS 'SEBC 거동분류 (G/GD/E/ED/FE/FED/F/FD/D/S/SD)';
COMMENT ON COLUMN HNS_SUBSTANCE.DATA          IS '전체 상세 데이터 (JSONB)';
COMMENT ON COLUMN HNS_SUBSTANCE.USE_YN        IS '사용여부 (Y:사용, N:미사용)';
COMMENT ON COLUMN HNS_SUBSTANCE.REG_DTM       IS '등록일시';

-- 텍스트 검색 인덱스 (pg_trgm)
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_NM_KR   ON HNS_SUBSTANCE USING GIN(NM_KR gin_trgm_ops);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_NM_EN   ON HNS_SUBSTANCE USING GIN(NM_EN gin_trgm_ops);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_ABBR    ON HNS_SUBSTANCE USING GIN(ABBREVIATION gin_trgm_ops);

-- 코드 검색 인덱스
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_UN      ON HNS_SUBSTANCE(UN_NO);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_CAS     ON HNS_SUBSTANCE(CAS_NO);
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_SEBC    ON HNS_SUBSTANCE(SEBC);

-- JSONB 내 cargoCodes 검색용 인덱스
CREATE INDEX IF NOT EXISTS IDX_HNS_SBST_DATA    ON HNS_SUBSTANCE USING GIN(DATA jsonb_path_ops);
