-- V29: 마감 마스터 (period_close) — 정산 월 마감 관리

-- ============================================================
-- 1. period_close — 마감 마스터
-- ============================================================

CREATE TABLE period_close (
    close_id        BIGSERIAL       PRIMARY KEY,
    close_month     CHAR(6)         NOT NULL,               -- YYYYMM
    closed_at       TIMESTAMP       NOT NULL DEFAULT NOW(), -- 마감 처리 일시
    closed_by       BIGINT          NOT NULL,               -- 마감 처리자 (user_id)
    reopen_at       TIMESTAMP,                              -- 재오픈 일시 (NULL = 마감 중)
    reopen_by       BIGINT,                                 -- 재오픈 처리자
    reopen_reason   VARCHAR(500),                           -- 재오픈 사유
    note            VARCHAR(500),                           -- 마감 비고
    created_at      TIMESTAMP       NOT NULL DEFAULT NOW(),
    updated_at      TIMESTAMP,
    UNIQUE (close_month)                                    -- 월별 단 1건
);

COMMENT ON TABLE  period_close              IS '정산 마감 마스터 — 마감된 월은 수정 불가';
COMMENT ON COLUMN period_close.close_month  IS '마감 정산년월 (YYYYMM)';
COMMENT ON COLUMN period_close.closed_at    IS '마감 처리 일시';
COMMENT ON COLUMN period_close.closed_by    IS '마감 처리자 user_id';
COMMENT ON COLUMN period_close.reopen_at    IS '재오픈 일시. NULL이면 현재 마감 상태';
COMMENT ON COLUMN period_close.reopen_by    IS '재오픈 처리자 user_id';
COMMENT ON COLUMN period_close.reopen_reason IS '재오픈 사유 (감사 추적용)';

-- 마감 상태 조회용 인덱스 (재오픈 여부로 현재 마감 여부 판단)
CREATE INDEX idx_pc_month ON period_close(close_month);

-- ============================================================
-- 2. 공통코드 CLOSE_STATUS (마감/재오픈 상태 표현용)
-- ============================================================

INSERT INTO common_code_group (group_code, group_name, description, is_system, sort_order) VALUES
    ('CLOSE_STATUS', '마감상태', 'CLOSED/REOPENED', 'Y', 290)
ON CONFLICT (group_code) DO NOTHING;

INSERT INTO common_code (group_code, code, code_name, code_desc, sort_order) VALUES
    ('CLOSE_STATUS', 'CLOSED',   '마감', '정산월 마감 완료 — 수정 불가',     10),
    ('CLOSE_STATUS', 'REOPENED', '재오픈', '마감 해제 상태 — 수정 가능',     20)
ON CONFLICT (group_code, code) DO NOTHING;
