import mysql.connector
from app.core.config import A_DB_CONFIG, logger, get_gemini_model
from google.genai import types
from typing import Dict, Optional

def get_summary_data(session_id: str) -> Dict:
    """
    user_profile_summary 테이블에서 모든 데이터를 조회합니다.
    """
    conn = None
    summary = {
        "username": None,
        "goal": None,
        "mbti": None,
        "spi": None,
        "studyplan": None,
        "it_level": None
    }
    
    try:
        conn = mysql.connector.connect(**A_DB_CONFIG)
        cursor = conn.cursor(dictionary=True)
        
        # user_profile_summary에서 모든 데이터 조회
        sql = """
            SELECT 
                username,
                final_goal,
                mbti,
                spi_language,
                spi_nonverbal,
                spi_personality,
                studyplan_duration,
                studyplan_status,
                studyplan_weekday_hours,
                studyplan_weekend_hours,
                studyplan_time_slot,
                it_level
            FROM user_profile_summary
            WHERE session_id = %s
        """
        cursor.execute(sql, (session_id,))
        row = cursor.fetchone()
        
        if row:
            summary["username"] = row.get("username")
            summary["goal"] = row.get("final_goal")
            summary["mbti"] = row.get("mbti")
            
            # SPI 데이터 구성
            if row.get("spi_language") or row.get("spi_nonverbal") or row.get("spi_personality"):
                summary["spi"] = {
                    "language_grade": row.get("spi_language"),
                    "nonverbal_grade": row.get("spi_nonverbal"),
                    "personality": row.get("spi_personality")  # AI 코멘트
                }
            
            # StudyPlan 데이터 구성
            if row.get("studyplan_duration"):
                summary["studyplan"] = {
                    "duration": row.get("studyplan_duration"),
                    "status": row.get("studyplan_status"),
                    "weekday_hours": row.get("studyplan_weekday_hours"),
                    "weekend_hours": row.get("studyplan_weekend_hours"),
                    "time_slot": row.get("studyplan_time_slot")
                }
            
            summary["it_level"] = row.get("it_level")
        
        return summary
        
    except Exception as e:
        logger.error(f"Get Summary Data Error: {e}")
        return summary
    finally:
        if conn:
            cursor.close()
            conn.close()


async def generate_ai_analysis(data: Dict) -> str:
    """
    user_profile_summary 데이터를 기반으로 AI가 유저 분석 코멘트 생성
    
    Args:
        data: user_profile_summary에서 가져온 데이터
    
    Returns:
        AI 분석 코멘트 (일본어)
    """
    try:
        client = get_gemini_model()
        
        # 데이터 요약 텍스트 생성
        profile_text = []
        
        if data.get("goal"):
            profile_text.append(f"目標: {data['goal']}")
        
        if data.get("mbti"):
            profile_text.append(f"MBTI: {data['mbti']}")
        
        if data.get("spi"):
            spi = data["spi"]
            spi_parts = []
            if spi.get("language_grade"):
                spi_parts.append(f"言語能力: {spi['language_grade']}")
            if spi.get("nonverbal_grade"):
                spi_parts.append(f"非言語能力: {spi['nonverbal_grade']}")
            if spi.get("personality"):
                spi_parts.append(f"性格分析: {spi['personality']}")
            if spi_parts:
                profile_text.append("SPI: " + " / ".join(spi_parts))
        
        if data.get("studyplan"):
            sp = data["studyplan"]
            sp_parts = []
            if sp.get("duration"):
                sp_parts.append(f"学習期間: {sp['duration']}")
            if sp.get("status"):
                sp_parts.append(f"現在の状態: {sp['status']}")
            if sp.get("weekday_hours"):
                sp_parts.append(f"平日: {sp['weekday_hours']}時間")
            if sp.get("weekend_hours"):
                sp_parts.append(f"週末: {sp['weekend_hours']}時間")
            if sp_parts:
                profile_text.append("学習計画: " + " / ".join(sp_parts))
        
        if data.get("it_level"):
            profile_text.append(f"IT基礎レベル: {data['it_level']}")
        
        profile_summary = "\n".join(profile_text) if profile_text else "データなし"
        
        # AI 프롬프트
        prompt = f"""
あなたはキャリアカウンセラーです。
以下のユーザープロフィール情報を基に、この人の特徴を客観的かつ簡潔に分析してください。

【ユーザープロフィール】
{profile_summary}

【分析の指針】
1. この人の強みや特徴を3〜4文で簡潔にまとめる
2. 目標達成への適性や学習スタイルを評価する
3. 励ましのトーンではなく、客観的な分析トーンで書く
4. 100文字以内で簡潔に

分析コメント:
"""
        
        response = client.models.generate_content(
            model="gemini-2.5-flash",
            contents=[types.Content(role="user", parts=[types.Part(text=prompt)])],
            config=types.GenerateContentConfig(temperature=0.4)
        )
        
        ai_comment = response.text.strip()
        
        if not ai_comment:
            # Fallback
            return "プロフィール情報を基に、あなたに最適なカリキュラムを作成します。"
        
        return ai_comment
        
    except Exception as e:
        logger.error(f"AI Analysis Generation Error: {e}")
        return "プロフィール情報を基に、あなたに最適なカリキュラムを作成します。"

