-- 수신함 추가 정보 필드 추가
-- 원인부서, 해당자, 원인 상세 정보를 기록하기 위한 필드들

DO $migration$
DECLARE
    col_count INTEGER := 0;
    idx_count INTEGER := 0;
BEGIN
    RAISE NOTICE '=== 수신함 추가 정보 필드 추가 마이그레이션 시작 ===';
    
    -- 1. 해당자 상세 정보 (responsible_person과 별도)
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'responsible_person_detail') THEN
        ALTER TABLE issues ADD COLUMN responsible_person_detail VARCHAR(200);
        RAISE NOTICE '✅ issues.responsible_person_detail 컬럼이 추가되었습니다.';
    ELSE
        RAISE NOTICE 'ℹ️ issues.responsible_person_detail 컬럼이 이미 존재합니다.';
    END IF;
    
    -- 2. 원인 상세 정보 (기록용)
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'cause_detail') THEN
        ALTER TABLE issues ADD COLUMN cause_detail TEXT;
        RAISE NOTICE '✅ issues.cause_detail 컬럼이 추가되었습니다.';
    ELSE
        RAISE NOTICE 'ℹ️ issues.cause_detail 컬럼이 이미 존재합니다.';
    END IF;
    
    -- 3. 추가 정보 입력 시간 (언제 입력되었는지 기록)
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'additional_info_updated_at') THEN
        ALTER TABLE issues ADD COLUMN additional_info_updated_at TIMESTAMP WITH TIME ZONE;
        RAISE NOTICE '✅ issues.additional_info_updated_at 컬럼이 추가되었습니다.';
    ELSE
        RAISE NOTICE 'ℹ️ issues.additional_info_updated_at 컬럼이 이미 존재합니다.';
    END IF;
    
    -- 4. 추가 정보 입력자 ID (누가 입력했는지 기록)
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns WHERE table_name = 'issues' AND column_name = 'additional_info_updated_by_id') THEN
        ALTER TABLE issues ADD COLUMN additional_info_updated_by_id INTEGER REFERENCES users(id);
        RAISE NOTICE '✅ issues.additional_info_updated_by_id 컬럼이 추가되었습니다.';
    ELSE
        RAISE NOTICE 'ℹ️ issues.additional_info_updated_by_id 컬럼이 이미 존재합니다.';
    END IF;
    
    -- 인덱스 추가 (검색 성능 향상)
    IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE tablename = 'issues' AND indexname = 'idx_issues_additional_info_updated_at') THEN
        CREATE INDEX idx_issues_additional_info_updated_at ON issues (additional_info_updated_at);
        RAISE NOTICE '✅ idx_issues_additional_info_updated_at 인덱스가 생성되었습니다.';
    ELSE
        RAISE NOTICE 'ℹ️ idx_issues_additional_info_updated_at 인덱스가 이미 존재합니다.';
    END IF;
    
    -- 검증
    SELECT COUNT(*) INTO col_count FROM information_schema.columns 
    WHERE table_name = 'issues' AND column_name IN (
        'responsible_person_detail', 'cause_detail', 'additional_info_updated_at', 'additional_info_updated_by_id'
    );
    
    SELECT COUNT(*) INTO idx_count FROM pg_indexes 
    WHERE tablename = 'issues' AND indexname = 'idx_issues_additional_info_updated_at';
    
    RAISE NOTICE '=== 마이그레이션 검증 결과 ===';
    RAISE NOTICE '추가된 컬럼: %/4개', col_count;
    RAISE NOTICE '생성된 인덱스: %/1개', idx_count;
    
    IF col_count = 4 AND idx_count = 1 THEN
        RAISE NOTICE '✅ 모든 추가 정보 필드가 성공적으로 추가되었습니다.';
    ELSE
        RAISE WARNING '⚠️ 일부 필드나 인덱스가 누락되었습니다.';
    END IF;
    
EXCEPTION
    WHEN OTHERS THEN
        RAISE EXCEPTION '❌ 마이그레이션 실행 중 오류 발생: %', SQLERRM;
END $migration$;

-- 마이그레이션 로그 기록
INSERT INTO migration_log (migration_file, executed_at, status, notes) 
VALUES (
    '018_add_additional_info_fields.sql', 
    NOW(), 
    'SUCCESS',
    '수신함 추가 정보 필드 추가: 해당자 상세(responsible_person_detail), 원인 상세(cause_detail), 입력 시간/입력자 추적 필드'
) ON CONFLICT (migration_file) DO UPDATE SET 
    executed_at = NOW(),
    status = EXCLUDED.status,
    notes = EXCLUDED.notes;
