from datetime import date, datetime

from .constants import TRAINABLE_PLAYER_ATTRIBUTES
from .exceptions import InvalidTrainingAttributeError, InvalidTrainingDateError


def validate_training_attribute(attribute_name: str) -> str:
    if not isinstance(attribute_name, str):
        raise InvalidTrainingAttributeError("Training attribute must be a string.")
    normalized = attribute_name.strip()
    if normalized not in TRAINABLE_PLAYER_ATTRIBUTES:
        raise InvalidTrainingAttributeError(
            f"'{attribute_name}' is not a trainable Player attribute."
        )
    return normalized


def validate_training_date(value) -> date:
    if isinstance(value, datetime) or not isinstance(value, date):
        raise InvalidTrainingDateError("training_date must be a date (not datetime).")
    return value
