from .models import PlayerDevelopmentProgress, PlayerRatingMaterializationRun, PlayerSeasonAgingResult, TrainingDevelopmentResult, TrainingSession


def get_training_session(*, session_id):
    return TrainingSession.objects.filter(pk=session_id).first()


def get_player_training_history(*, player_id):
    return (
        TrainingDevelopmentResult.objects
        .filter(player_id=player_id)
        .select_related("participant__session")
        .order_by("training_date", "created_at", "id")
    )


def get_player_development_progress(*, player_id):
    return PlayerDevelopmentProgress.objects.filter(player_id=player_id).order_by("attribute_name")


def get_club_training_sessions(*, club_id):
    return TrainingSession.objects.filter(club_id=club_id).order_by("training_date", "created_at")


def get_player_rating_history(*, player_id, limit=50):
    return (
        PlayerRatingMaterializationRun.objects.filter(player_id=player_id)
        .prefetch_related("attribute_changes")
        .order_by("-created_at")[: max(1, min(int(limit), 200))]
    )


def get_player_aging_history(*, player_id):
    return (
        PlayerSeasonAgingResult.objects.filter(player_id=player_id)
        .select_related("season", "materialization_run")
        .order_by("-season__end_date")
    )


def get_player_legacy_assets(*, owner_id, assigned_player_id=None):
    from .models import PlayerLegacyAsset
    qs = PlayerLegacyAsset.objects.filter(owner_id=owner_id).select_related("origin_player", "assigned_player")
    if assigned_player_id is not None:
        qs = qs.filter(assigned_player_id=assigned_player_id)
    return qs.order_by("asset_type", "created_at", "id")
