#!/usr/bin/env python3
"""
SPECIAL 카테고리 마이그레이션 실행 스크립트
생성일: 2025.09.30
목적: SPECIAL 카테고리 지원 추가 및 기존 자재 재분류
"""

import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from sqlalchemy import create_engine, text
from app.database import DATABASE_URL

def execute_special_migration():
    """SPECIAL 카테고리 마이그레이션 실행"""
    engine = create_engine(DATABASE_URL)
    
    with engine.connect() as conn:
        print("🚀 SPECIAL 카테고리 마이그레이션 시작...")
        print("=" * 60)
        
        try:
            # 1. 마이그레이션 스크립트 실행
            print("📋 1단계: 마이그레이션 스크립트 실행...")
            script_path = os.path.join(os.path.dirname(__file__), '24_add_special_category_support.sql')
            with open(script_path, 'r', encoding='utf-8') as f:
                sql_content = f.read()
                
                # SQL 명령어들을 분리하여 실행
                sql_commands = sql_content.split(';')
                for i, command in enumerate(sql_commands):
                    command = command.strip()
                    if command and not command.startswith('--') and command != 'COMMIT':
                        try:
                            conn.execute(text(command))
                            if i % 10 == 0:  # 진행상황 표시
                                print(f"  - 명령어 {i+1}/{len(sql_commands)} 실행 중...")
                        except Exception as e:
                            print(f"  ⚠️  명령어 실행 중 오류 (무시됨): {e}")
                            continue
            
            print("✅ 마이그레이션 스크립트 실행 완료")
            
            # 2. 기존 자재 재분류 확인
            print("\n📊 2단계: 기존 자재 재분류 결과 확인...")
            
            # SPECIAL 키워드가 포함된 자재 개수 확인
            result = conn.execute(text("""
                SELECT COUNT(*) as count 
                FROM materials 
                WHERE classified_category = 'SPECIAL'
            """)).fetchone()
            
            special_count = result.count if result else 0
            print(f"  - SPECIAL 카테고리로 분류된 자재: {special_count}개")
            
            # 키워드별 분류 결과 확인
            keyword_results = conn.execute(text("""
                SELECT 
                    CASE 
                        WHEN UPPER(original_description) LIKE '%SPECIAL%' THEN 'SPECIAL'
                        WHEN UPPER(original_description) LIKE '%스페셜%' THEN '스페셜'
                        WHEN UPPER(original_description) LIKE '%SPEC%' THEN 'SPEC'
                        WHEN UPPER(original_description) LIKE '%SPL%' THEN 'SPL'
                    END as keyword_type,
                    COUNT(*) as count
                FROM materials 
                WHERE classified_category = 'SPECIAL'
                GROUP BY keyword_type
                ORDER BY count DESC
            """)).fetchall()
            
            if keyword_results:
                print("  - 키워드별 분류 결과:")
                for row in keyword_results:
                    print(f"    * {row.keyword_type}: {row.count}개")
            
            # 3. 테이블 생성 확인
            print("\n🏗️  3단계: 새 테이블 생성 확인...")
            
            # special_classification_patterns 테이블 확인
            patterns_count = conn.execute(text("""
                SELECT COUNT(*) as count 
                FROM special_classification_patterns
            """)).fetchone()
            
            patterns_count = patterns_count.count if patterns_count else 0
            print(f"  - special_classification_patterns 테이블: {patterns_count}개 패턴 등록됨")
            
            # special_material_details 테이블 확인
            details_exists = conn.execute(text("""
                SELECT EXISTS (
                    SELECT 1 FROM information_schema.tables 
                    WHERE table_name = 'special_material_details'
                ) as exists
            """)).fetchone()
            
            if details_exists.exists:
                print("  - special_material_details 테이블: 생성 완료")
            else:
                print("  - ❌ special_material_details 테이블: 생성 실패")
            
            # 4. 인덱스 생성 확인
            print("\n🔍 4단계: 인덱스 생성 확인...")
            
            special_indexes = conn.execute(text("""
                SELECT indexname 
                FROM pg_indexes 
                WHERE indexname LIKE '%special%'
                ORDER BY indexname
            """)).fetchall()
            
            if special_indexes:
                print("  - SPECIAL 관련 인덱스:")
                for idx in special_indexes:
                    print(f"    * {idx.indexname}")
            else:
                print("  - ⚠️  SPECIAL 관련 인덱스가 생성되지 않았습니다.")
            
            # 커밋
            conn.commit()
            
            print("\n" + "=" * 60)
            print("🎉 SPECIAL 카테고리 마이그레이션 완료!")
            print(f"📊 총 {special_count}개 자재가 SPECIAL 카테고리로 분류되었습니다.")
            print("🔧 새로운 기능:")
            print("   - SPECIAL 키워드 자동 감지")
            print("   - 도면 업로드 관리")
            print("   - 특수 제작 요구사항 추적")
            print("   - 승인 프로세스 지원")
            
        except Exception as e:
            print(f"\n❌ 마이그레이션 실행 중 오류 발생: {e}")
            conn.rollback()
            raise
        
def main():
    """메인 실행 함수"""
    print("SPECIAL 카테고리 마이그레이션 실행")
    print("TK-MP-Project - 특수 자재 관리 시스템")
    print("=" * 60)
    
    try:
        execute_special_migration()
    except Exception as e:
        print(f"\n💥 마이그레이션 실패: {e}")
        sys.exit(1)

if __name__ == "__main__":
    main()
