# app/models/mbti_module.py

import mysql.connector
from app.core.config import A_DB_CONFIG, logger

def insert_chat_log(session_id, sender, message):
    conn = None
    try:
        conn = mysql.connector.connect(**A_DB_CONFIG)
        cursor = conn.cursor()
        
        sql = "INSERT INTO mbti_log (session_id, sender, message) VALUES (%s, %s, %s)"
        cursor.execute(sql, (session_id, sender, message))
        
        conn.commit()
    except Exception as e:
        raise e
    finally:
        if conn:
            conn.close()

def save_mbti_result_transaction(session_id, system_msg, mbti_type, scores_json):
    conn = None
    try:
        conn = mysql.connector.connect(**A_DB_CONFIG)
        conn.start_transaction() # 트랜잭션 시작
        cursor = conn.cursor()

        # 1. 채팅 로그 저장 (시스템 메시지)
        sql_chat = "INSERT INTO mbti_log (session_id, sender, message) VALUES (%s, %s, %s)"
        cursor.execute(sql_chat, (session_id, 'system', system_msg))

        # 2.結果データ保存
        sql_result = """
            INSERT INTO mbti_Output (session_id, result, scores) 
            VALUES (%s, %s, %s)
            ON DUPLICATE KEY UPDATE 
                result = VALUES(result),
                scores = VALUES(scores)
        """

        cursor.execute(sql_result, (session_id, mbti_type, scores_json))

        conn.commit() # 二つとも成功してこそ保存
        
        # user_profile_summary에도 동기화
        sync_to_user_profile_summary(session_id, mbti_type)
        
    except Exception as e:
        if conn:
            conn.rollback() # 一つでも失敗したら取り消し
        raise e
    finally:
        if conn:
            conn.close()

def sync_to_user_profile_summary(session_id: str, mbti_type: str):
    """MBTI 완료 시 user_profile_summary 테이블에도 동기화"""
    conn = None
    try:
        conn = mysql.connector.connect(**A_DB_CONFIG)
        cursor = conn.cursor()
        
        sql = """
            INSERT INTO user_profile_summary
            (session_id, mbti)
            VALUES (%s, %s)
            ON DUPLICATE KEY UPDATE
                mbti = VALUES(mbti),
                updated_at = NOW()
        """
        cursor.execute(sql, (session_id, mbti_type))
        conn.commit()
        
        logger.info(f"MBTI synced to user_profile_summary for session: {session_id}")
        
    except Exception as e:
        logger.error(f"MBTI Summary Sync Error: {e}")
        # 동기화 실패해도 메인 로직은 계속 진행되도록 에러를 raise하지 않음
        pass
    finally:
        if conn:
            cursor.close()
            conn.close()