-- 프로젝트별 순번(project_sequence_no) 자동 할당 개선
-- 수신함에서 진행 중/완료로 상태 변경 시 프로젝트별 순번이 자동 할당되도록 개선

DO $migration$
DECLARE
    issue_record RECORD;
    seq_no INTEGER;
    updated_count INTEGER := 0;
BEGIN
    RAISE NOTICE '=== 프로젝트별 순번 자동 할당 개선 마이그레이션 시작 ===';
    
    -- 1. generate_project_sequence_no 함수가 존재하는지 확인
    IF NOT EXISTS (SELECT 1 FROM pg_proc WHERE proname = 'generate_project_sequence_no') THEN
        RAISE EXCEPTION '❌ generate_project_sequence_no 함수가 존재하지 않습니다. 016_add_management_fields.sql을 먼저 실행하세요.';
    END IF;
    
    -- 2. 진행 중 또는 완료 상태인데 project_sequence_no가 NULL인 이슈들 찾기
    RAISE NOTICE '🔍 project_sequence_no가 누락된 이슈들을 찾는 중...';
    
    FOR issue_record IN 
        SELECT id, project_id, review_status
        FROM issues 
        WHERE review_status IN ('in_progress', 'completed') 
        AND project_sequence_no IS NULL
        ORDER BY project_id, reviewed_at NULLS LAST, report_date
    LOOP
        -- 프로젝트별 순번 생성
        SELECT generate_project_sequence_no(issue_record.project_id) INTO seq_no;
        
        -- 순번 할당
        UPDATE issues 
        SET project_sequence_no = seq_no 
        WHERE id = issue_record.id;
        
        updated_count := updated_count + 1;
        
        RAISE NOTICE '✅ 이슈 ID: %, 프로젝트 ID: %, 할당된 순번: %', 
                     issue_record.id, issue_record.project_id, seq_no;
    END LOOP;
    
    -- 3. 결과 요약
    RAISE NOTICE '=== 마이그레이션 완료 ===';
    RAISE NOTICE '📊 총 %개의 이슈에 프로젝트별 순번이 할당되었습니다.', updated_count;
    
    -- 4. 검증
    DECLARE
        missing_count INTEGER;
        total_managed_count INTEGER;
    BEGIN
        -- 관리 중인 이슈 중 순번이 없는 것들 확인
        SELECT COUNT(*) INTO missing_count
        FROM issues 
        WHERE review_status IN ('in_progress', 'completed') 
        AND project_sequence_no IS NULL;
        
        -- 전체 관리 중인 이슈 수
        SELECT COUNT(*) INTO total_managed_count
        FROM issues 
        WHERE review_status IN ('in_progress', 'completed');
        
        RAISE NOTICE '=== 검증 결과 ===';
        RAISE NOTICE '전체 관리 중인 이슈: %개', total_managed_count;
        RAISE NOTICE '순번이 누락된 이슈: %개', missing_count;
        
        IF missing_count > 0 THEN
            RAISE WARNING '⚠️ 여전히 %개의 이슈에 순번이 누락되어 있습니다.', missing_count;
        ELSE
            RAISE NOTICE '✅ 모든 관리 중인 이슈에 순번이 정상적으로 할당되었습니다.';
        END IF;
    END;
    
EXCEPTION
    WHEN OTHERS THEN
        RAISE EXCEPTION '❌ 마이그레이션 실행 중 오류 발생: %', SQLERRM;
END $migration$;

-- 마이그레이션 로그 기록
INSERT INTO migration_log (migration_file, executed_at, status, notes) 
VALUES (
    '017_fix_project_sequence_no.sql', 
    NOW(), 
    'SUCCESS',
    '프로젝트별 순번 자동 할당 개선: 수신함에서 진행중/완료로 상태 변경시 project_sequence_no 자동 할당되도록 백엔드 로직 개선 및 기존 데이터 보정'
) ON CONFLICT (migration_file) DO UPDATE SET 
    executed_at = NOW(),
    status = EXCLUDED.status,
    notes = EXCLUDED.notes;
