#!/usr/bin/env python3
"""
TK-MP-Project 자동 DB 마이그레이션 스크립트
배포 시 백엔드 시작 전에 자동으로 실행되어 DB 스키마를 동기화
"""

import sys
import os
import time
from datetime import datetime

# 백엔드 모듈 경로 추가
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))

def wait_for_db():
    """데이터베이스 연결 대기"""
    max_retries = 30
    retry_count = 0
    
    while retry_count < max_retries:
        try:
            from app.database import engine
            # 간단한 연결 테스트
            with engine.connect() as conn:
                conn.execute("SELECT 1")
            print("✅ 데이터베이스 연결 성공")
            return True
        except Exception as e:
            retry_count += 1
            print(f"⏳ 데이터베이스 연결 대기 중... ({retry_count}/{max_retries})")
            time.sleep(2)
    
    print("❌ 데이터베이스 연결 실패")
    return False

def sync_database_schema():
    """데이터베이스 스키마 동기화"""
    try:
        from app.models import Base
        from app.database import engine
        
        print("🔄 데이터베이스 스키마 동기화 중...")
        
        # 모든 테이블 생성/업데이트
        Base.metadata.create_all(bind=engine)
        
        print("✅ 데이터베이스 스키마 동기화 완료")
        return True
        
    except Exception as e:
        print(f"❌ 스키마 동기화 실패: {str(e)}")
        return False

def ensure_required_data():
    """필수 데이터 확인 및 생성"""
    try:
        from app.database import get_db
        from app.auth.models import User
        from sqlalchemy.orm import Session
        
        print("🔄 필수 데이터 확인 중...")
        
        db = next(get_db())
        
        # 관리자 계정 확인
        admin_user = db.query(User).filter(User.username == 'admin').first()
        if not admin_user:
            print("📝 기본 관리자 계정 생성 중...")
            admin_user = User(
                username='admin',
                password='$2b$12$ld4LDOW5mxkiRQEkXfMUIep/aIzFleQZ4yoL10ZQkUxGqnkYuhNMW',  # admin123
                name='시스템 관리자',
                email='admin@tkmp.com',
                role='admin',
                access_level='admin',
                department='IT',
                position='시스템 관리자',
                status='active'
            )
            db.add(admin_user)
            db.commit()
            print("✅ 기본 관리자 계정 생성 완료")
        
        db.close()
        print("✅ 필수 데이터 확인 완료")
        return True
        
    except Exception as e:
        print(f"❌ 필수 데이터 확인 실패: {str(e)}")
        return False

def main():
    """메인 실행 함수"""
    print("🚀 TK-MP-Project 자동 DB 마이그레이션 시작")
    print(f"⏰ 시작 시간: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    
    # 1. 데이터베이스 연결 대기
    if not wait_for_db():
        sys.exit(1)
    
    # 2. 스키마 동기화
    if not sync_database_schema():
        sys.exit(1)
    
    # 3. 필수 데이터 확인
    if not ensure_required_data():
        sys.exit(1)
    
    print("🎉 자동 DB 마이그레이션 완료!")
    print(f"⏰ 완료 시간: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

if __name__ == "__main__":
    main()
