"""
Klausur-Service Grading Service

Functions for grade calculation.
"""

from typing import Dict

from models.grading import GRADE_THRESHOLDS, DEFAULT_CRITERIA


def calculate_grade_points(percentage: float) -> int:
    """
    Calculate 15-point grade from percentage.

    Args:
        percentage: Score as percentage (0-100)

    Returns:
        Grade points (0-15)
    """
    for points, threshold in sorted(GRADE_THRESHOLDS.items(), reverse=True):
        if percentage >= threshold:
            return points
    return 0


def calculate_raw_points(criteria_scores: Dict[str, Dict]) -> int:
    """
    Calculate weighted raw points from criteria scores.

    Args:
        criteria_scores: Dict mapping criterion name to score data

    Returns:
        Weighted raw points
    """
    total = 0.0
    for criterion, data in criteria_scores.items():
        weight = DEFAULT_CRITERIA.get(criterion, {}).get("weight", 0.2)
        score = data.get("score", 0)
        total += score * weight
    return int(total)
