-- V49: 민원 관리 (complaint)
--      고객 민원 접수 → 설계사 책임 추적 → 처리 상태 관리 → 환수 연동.
--      13M 이내 민원 = 환수 100% 트리거 가정 (chargeback_triggered).

CREATE TABLE complaint (
    complaint_id        BIGSERIAL    PRIMARY KEY,
    contract_id         BIGINT       REFERENCES contract(contract_id),
    agent_id            BIGINT       NOT NULL REFERENCES agent(agent_id),
    customer_name       VARCHAR(100) NOT NULL,
    complaint_date      DATE         NOT NULL,
    channel             VARCHAR(20)  NOT NULL,
    complaint_type      VARCHAR(30)  NOT NULL,
    severity            VARCHAR(10)  NOT NULL DEFAULT 'MID',
    status              VARCHAR(20)  NOT NULL DEFAULT 'OPEN',
    resolution          TEXT,
    -- 처리 결과 기술
    chargeback_triggered BOOLEAN     NOT NULL DEFAULT FALSE,
    -- TRUE이면 환수 자동 생성 대상
    settled_at          TIMESTAMP,
    -- 민원 종결 시각
    created_at          TIMESTAMP    NOT NULL DEFAULT NOW(),
    created_by          BIGINT,
    updated_at          TIMESTAMP,
    updated_by          BIGINT,
    CHECK (channel IN ('PHONE','EMAIL','VISIT','ONLINE','FAX')),
    CHECK (complaint_type IN ('MIS_SELLING','DELAY','UNFAIR','CANCELLATION','ETC')),
    CHECK (severity IN ('LOW','MID','HIGH')),
    CHECK (status IN ('OPEN','IN_PROGRESS','CLOSED','WITHDRAWN'))
);

COMMENT ON TABLE  complaint                      IS '민원 관리 — 고객 민원 접수·처리·환수 연동';
COMMENT ON COLUMN complaint.contract_id          IS '민원 대상 계약 FK (계약 특정 불가한 경우 NULL 허용)';
COMMENT ON COLUMN complaint.agent_id             IS '민원 책임 설계사 FK';
COMMENT ON COLUMN complaint.customer_name        IS '민원인 성명';
COMMENT ON COLUMN complaint.complaint_date       IS '민원 접수일';
COMMENT ON COLUMN complaint.channel              IS '접수 채널 (PHONE/EMAIL/VISIT/ONLINE/FAX)';
COMMENT ON COLUMN complaint.complaint_type       IS '민원 유형 (MIS_SELLING=불완전판매/DELAY=처리지연/UNFAIR=불공정/CANCELLATION=해지관련/ETC=기타)';
COMMENT ON COLUMN complaint.severity             IS '심각도 (LOW=낮음/MID=보통/HIGH=높음)';
COMMENT ON COLUMN complaint.status               IS '처리 상태 (OPEN=접수/IN_PROGRESS=처리중/CLOSED=완료/WITHDRAWN=취하)';
COMMENT ON COLUMN complaint.resolution           IS '처리 결과 상세 기술';
COMMENT ON COLUMN complaint.chargeback_triggered IS 'TRUE=환수 트리거 발생 (13M 이내 민원 등)';
COMMENT ON COLUMN complaint.settled_at           IS '민원 종결 시각';

CREATE INDEX idx_comp_agent_date     ON complaint(agent_id, complaint_date);
CREATE INDEX idx_comp_status         ON complaint(status, complaint_date);
CREATE INDEX idx_comp_contract       ON complaint(contract_id);
CREATE INDEX idx_comp_chargeback     ON complaint(chargeback_triggered, status)
    WHERE chargeback_triggered = TRUE;
-- 환수 트리거 미처리 건 조회용 부분 인덱스
