#!/usr/bin/env python3
"""
Notification DB 체크 제약 조건 수정 스크립트
실행 전 psycopg2 설치 필요: pip install psycopg2-binary
"""

import psycopg2
import sys

# 데이터베이스 연결 정보
DB_CONFIG = {
    'host': '4.230.159.143',
    'port': 5432,
    'database': 'notificationdb',
    'user': 'hgzerouser',
    'password': 'Hi5Jessica!'
}

# 실행할 SQL
SQL_DROP_CONSTRAINT = """
ALTER TABLE notifications
DROP CONSTRAINT IF EXISTS notifications_notification_type_check;
"""

SQL_ADD_CONSTRAINT = """
ALTER TABLE notifications
ADD CONSTRAINT notifications_notification_type_check
CHECK (notification_type IN (
    'MEETING_INVITATION',
    'TODO_ASSIGNED',
    'TODO_REMINDER',
    'MEETING_REMINDER',
    'MINUTES_UPDATED',
    'TODO_COMPLETED'
));
"""

SQL_VERIFY = """
SELECT constraint_name, check_clause
FROM information_schema.check_constraints
WHERE constraint_name = 'notifications_notification_type_check';
"""

def main():
    print("=" * 70)
    print("Notification DB 체크 제약 조건 수정 시작")
    print("=" * 70)

    conn = None
    cursor = None

    try:
        # 데이터베이스 연결
        print(f"\n1. 데이터베이스 연결 중...")
        print(f"   Host: {DB_CONFIG['host']}")
        print(f"   Database: {DB_CONFIG['database']}")

        conn = psycopg2.connect(**DB_CONFIG)
        cursor = conn.cursor()
        print("   ✅ 연결 성공")

        # 기존 제약 조건 삭제
        print("\n2. 기존 체크 제약 조건 삭제 중...")
        cursor.execute(SQL_DROP_CONSTRAINT)
        print("   ✅ 삭제 완료")

        # 새로운 제약 조건 추가
        print("\n3. 새로운 체크 제약 조건 추가 중...")
        cursor.execute(SQL_ADD_CONSTRAINT)
        print("   ✅ 추가 완료")

        # 변경 사항 커밋
        conn.commit()
        print("\n4. 변경 사항 커밋 완료")

        # 결과 확인
        print("\n5. 제약 조건 확인 중...")
        cursor.execute(SQL_VERIFY)
        result = cursor.fetchone()

        if result:
            print("   ✅ 제약 조건이 정상적으로 생성되었습니다")
            print(f"   - Constraint Name: {result[0]}")
            print(f"   - Check Clause: {result[1]}")
        else:
            print("   ⚠️  제약 조건을 찾을 수 없습니다")

        print("\n" + "=" * 70)
        print("✅ 모든 작업이 성공적으로 완료되었습니다!")
        print("=" * 70)
        print("\n다음 단계:")
        print("1. notification 서비스를 재시작하세요")
        print("2. 로그에서 에러가 사라졌는지 확인하세요")
        print("   tail -f notification/logs/notification-service.log")

        return 0

    except psycopg2.Error as e:
        print(f"\n❌ 데이터베이스 오류 발생: {e}")
        if conn:
            conn.rollback()
        return 1

    except Exception as e:
        print(f"\n❌ 예기치 않은 오류 발생: {e}")
        if conn:
            conn.rollback()
        return 1

    finally:
        # 연결 종료
        if cursor:
            cursor.close()
        if conn:
            conn.close()
            print("\n6. 데이터베이스 연결 종료")

if __name__ == "__main__":
    try:
        import psycopg2
    except ImportError:
        print("❌ psycopg2 모듈이 설치되지 않았습니다.")
        print("\n다음 명령어로 설치하세요:")
        print("  pip install psycopg2-binary")
        print("\n또는 conda를 사용하는 경우:")
        print("  conda install -c conda-forge psycopg2")
        sys.exit(1)

    sys.exit(main())
