-- V52: 첨부파일 (attachment)
--      도메인 무관 공통 첨부. ref_type + ref_id 조합으로 어느 도메인 레코드에도 첨부 가능.
--      파일 실체는 스토리지(로컬/S3). file_path에 경로 저장.

CREATE TABLE attachment (
    attachment_id  BIGSERIAL    PRIMARY KEY,
    ref_type       VARCHAR(50)  NOT NULL,
    ref_id         BIGINT       NOT NULL,
    file_name      VARCHAR(300) NOT NULL,
    file_path      VARCHAR(1000) NOT NULL,
    file_size      BIGINT       NOT NULL,
    -- bytes 단위
    mime_type      VARCHAR(100),
    uploaded_by    BIGINT       NOT NULL,
    -- 업로더 user_id (느슨한 참조)
    uploaded_at    TIMESTAMP    NOT NULL DEFAULT NOW(),
    CHECK (ref_type IN (
        'AGENT_CONTRACT','COMPLAINT','APPROVAL_REQUEST',
        'WITHDRAW_REQUEST','NOTICE','DISPUTE','INCENTIVE',
        'AGENT_LICENSE','AGENT_TRAINING'
    )),
    CHECK (file_size > 0)
);

COMMENT ON TABLE  attachment              IS '공통 첨부파일 — ref_type+ref_id 조합으로 모든 도메인에 첨부 연결';
COMMENT ON COLUMN attachment.ref_type     IS '첨부 대상 도메인 유형 (AGENT_CONTRACT/COMPLAINT/APPROVAL_REQUEST 등)';
COMMENT ON COLUMN attachment.ref_id       IS '첨부 대상 레코드 PK';
COMMENT ON COLUMN attachment.file_name    IS '원본 파일명';
COMMENT ON COLUMN attachment.file_path    IS '저장 경로 (로컬 절대경로 또는 S3 키)';
COMMENT ON COLUMN attachment.file_size    IS '파일 크기 (bytes)';
COMMENT ON COLUMN attachment.mime_type    IS 'MIME 타입 (예: application/pdf)';
COMMENT ON COLUMN attachment.uploaded_by  IS '업로더 user_id';

-- ref_type + ref_id 복합 인덱스 — 도메인별 첨부 목록 조회
CREATE INDEX idx_att_ref       ON attachment(ref_type, ref_id);
CREATE INDEX idx_att_uploader  ON attachment(uploaded_by, uploaded_at);
