-- V47: 보수교육 (agent_training + training_requirement)
--      보험업법 시행령 제17조 기준 의무 교육 이수 시간 추적.
--      연간 12시간 의무 기준은 training_requirement에 외부화.

-- ============================================================
-- 1. training_requirement — 연도별 의무 교육 시간 마스터
-- ============================================================

CREATE TABLE training_requirement (
    req_id          SERIAL       PRIMARY KEY,
    target_year     INT          NOT NULL UNIQUE,
    required_hours  INT          NOT NULL DEFAULT 12,
    -- 기본값 12시간/년 (보험업법 시행령 제17조)
    description     VARCHAR(300),
    created_at      TIMESTAMP    NOT NULL DEFAULT NOW(),
    created_by      BIGINT,
    updated_at      TIMESTAMP
);

COMMENT ON TABLE  training_requirement              IS '보수교육 의무 시간 마스터 — 연도별 의무 교육 시간 기준';
COMMENT ON COLUMN training_requirement.target_year  IS '적용 연도';
COMMENT ON COLUMN training_requirement.required_hours IS '연간 의무 교육 시간 (기본 12시간)';

-- 현재 연도 + 차기 연도 기본값 삽입
INSERT INTO training_requirement (target_year, required_hours, description) VALUES
    (2025, 12, '보험업법 시행령 제17조 기준 연간 의무 보수교육'),
    (2026, 12, '보험업법 시행령 제17조 기준 연간 의무 보수교육')
ON CONFLICT (target_year) DO NOTHING;

-- ============================================================
-- 2. agent_training — 설계사 보수교육 이수 이력
-- ============================================================

CREATE TABLE agent_training (
    training_id      BIGSERIAL    PRIMARY KEY,
    agent_id         BIGINT       NOT NULL REFERENCES agent(agent_id),
    course_name      VARCHAR(200) NOT NULL,
    course_type      VARCHAR(20)  NOT NULL,
    training_date    DATE         NOT NULL,
    hours            NUMERIC(5,1) NOT NULL,
    certificate_no   VARCHAR(100),
    instructor       VARCHAR(100),
    created_at       TIMESTAMP    NOT NULL DEFAULT NOW(),
    created_by       BIGINT,
    updated_at       TIMESTAMP,
    CHECK (course_type IN ('REGULAR','COMPLIANCE','PRODUCT')),
    CHECK (hours > 0)
);

COMMENT ON TABLE  agent_training              IS '보수교육 이수 이력 — 설계사 연간 의무 교육 이수 시간 추적';
COMMENT ON COLUMN agent_training.agent_id     IS '설계사 FK';
COMMENT ON COLUMN agent_training.course_name  IS '교육 과목명';
COMMENT ON COLUMN agent_training.course_type  IS '교육 유형 (REGULAR=정기보수/COMPLIANCE=컴플라이언스/PRODUCT=상품교육)';
COMMENT ON COLUMN agent_training.training_date IS '교육 이수일';
COMMENT ON COLUMN agent_training.hours        IS '이수 시간';
COMMENT ON COLUMN agent_training.certificate_no IS '이수증 번호';
COMMENT ON COLUMN agent_training.instructor   IS '강사명 또는 교육기관';

CREATE INDEX idx_at_agent_date  ON agent_training(agent_id, training_date);
CREATE INDEX idx_at_course_type ON agent_training(course_type, training_date);
