"""
DB 업데이트 스크립트: User 테이블에 승인 관련 필드 추가
- is_approved: 가입 승인 여부
- approval_token: 승인 토큰 (텔레그램 버튼 콜백용)
"""
import sys
import os

# 프로젝트 루트를 sys.path에 추가
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

from app import app
from backend.models.user import db

def update_user_table():
    """User 테이블에 승인 관련 컬럼 추가"""
    with app.app_context():
        try:
            # 컬럼 존재 여부 확인
            inspector = db.inspect(db.engine)
            columns = [col['name'] for col in inspector.get_columns('user')]
            
            if 'is_approved' not in columns:
                print("✅ is_approved 컬럼 추가 중...")
                db.session.execute(db.text(
                    "ALTER TABLE user ADD COLUMN is_approved BOOLEAN DEFAULT 0 NOT NULL"
                ))
                print("✅ is_approved 컬럼 추가 완료")
            else:
                print("ℹ️  is_approved 컬럼이 이미 존재합니다.")
            
            if 'approval_token' not in columns:
                print("✅ approval_token 컬럼 추가 중...")
                # SQLite는 UNIQUE 제약조건을 ALTER TABLE에서 직접 추가할 수 없음
                # 먼저 컬럼만 추가하고, 나중에 인덱스로 UNIQUE 처리
                db.session.execute(db.text(
                    "ALTER TABLE user ADD COLUMN approval_token VARCHAR(100)"
                ))
                print("✅ approval_token 컬럼 추가 완료")
                
                # UNIQUE 인덱스 생성
                try:
                    db.session.execute(db.text(
                        "CREATE UNIQUE INDEX idx_user_approval_token ON user(approval_token)"
                    ))
                    print("✅ approval_token UNIQUE 인덱스 생성 완료")
                except Exception as e:
                    print(f"ℹ️  UNIQUE 인덱스 생성 스킵 (이미 존재하거나 NULL 값 때문): {e}")
            else:
                print("ℹ️  approval_token 컬럼이 이미 존재합니다.")
            
            # 기존 사용자들은 자동 승인 처리
            print("✅ 기존 사용자 자동 승인 처리 중...")
            db.session.execute(db.text(
                "UPDATE user SET is_approved = 1 WHERE is_approved = 0"
            ))
            
            db.session.commit()
            print("✅ 데이터베이스 업데이트 완료!")
            
        except Exception as e:
            print(f"❌ 오류 발생: {e}")
            db.session.rollback()
            raise

if __name__ == "__main__":
    update_user_table()
