# app/services/it_scoring.py
# IT 기초 테스트 점수 계산 및 레벨 판정

from typing import Dict, List

def calculate_level(score: int) -> str:
    """
    점수에 따른 레벨 판정
    - 15~20문제: 上級 (HIGH)
    - 10~14문제: 中級
    - 5~9문제: 初級
    - 0~4문제: 入門
    
    Args:
        score: 맞힌 문제 수 (0~20)
    
    Returns:
        레벨 문자열
    """
    if score >= 15:
        return "上級"
    elif score >= 10:
        return "中級"
    elif score >= 5:
        return "初級"
    else:
        return "入門"


def get_level_message(level: str, score: int) -> str:
    """
    레벨별 멘트 생성
    
    Args:
        level: 레벨 (上級/中級/初級/入門)
        score: 맞힌 문제 수
    
    Returns:
        레벨별 안내 메시지
    """
    messages = {
        "上級": (
            f"素晴らしいです！{score}問正解で「上級」レベルです。\n\n"
            "あなたはITの基礎知識がしっかりと身についています。\n"
            "実務レベルのカリキュラムで、さらに高度なスキルを習得していきましょう！"
        ),
        "中級": (
            f"お疲れ様でした！{score}問正解で「中級」レベルです。\n\n"
            "基礎は理解できていますが、まだ実務に必要な知識が不足しています。\n"
            "体系的に学習することで、確実にレベルアップできます。一緒に頑張りましょう！"
        ),
        "初級": (
            f"お疲れ様でした！{score}問正解で「初級」レベルです。\n\n"
            "ITの基礎を少しずつ理解し始めています。\n"
            "焦らず、基礎からしっかりと学んでいくことで、着実に成長できます。応援しています！"
        ),
        "入門": (
            f"お疲れ様でした！{score}問正解で「入門」レベルです。\n\n"
            "ITの世界は広いですが、一歩ずつ学んでいけば必ず理解できます。\n"
            "基礎から丁寧に学べるカリキュラムで、一緒にスタートしましょう！"
        )
    }
    
    return messages.get(level, "診断が完了しました。")


def calculate_final_result(session_id: str, answers: List[Dict]) -> Dict:
    """
    최종 결과 계산
    
    Args:
        session_id: 세션 ID
        answers: 답변 리스트 [{"question_id": 1, "selected_answer": "A", "is_correct": True}, ...]
    
    Returns:
        {
            "total_score": 15,
            "level": "上級",
            "message": "레벨별 멘트",
            "total_questions": 20
        }
    """
    from app.services.it_questions import get_it_questions
    
    total_questions = len(get_it_questions())
    correct_count = sum(1 for ans in answers if ans.get("is_correct", False))
    
    level = calculate_level(correct_count)
    message = get_level_message(level, correct_count)
    
    return {
        "total_score": correct_count,
        "level": level,
        "message": message,
        "total_questions": total_questions
    }
