using Core.Entities;
namespace WebApp.Models;
///
/// Extension methods for sorting teams with group teams (EventFormat.Team) appearing before individual teams (EventFormat.Individual).
///
public static class TeamExtensions
{
///
/// Orders teams with group teams (EventFormat.Team) first, then individual teams (EventFormat.Individual).
/// For use with EF Core IQueryable queries.
///
/// The queryable collection of teams to sort.
/// An ordered queryable with group teams first, then individual teams.
public static IOrderedQueryable OrderByEventFormatFirst(this IQueryable teams)
{
return teams.OrderByDescending(t => t.Event.EventFormat == EventFormat.Team ? 1 : 0);
}
///
/// Orders teams with group teams (EventFormat.Team) first, then individual teams (EventFormat.Individual).
/// For use with in-memory IEnumerable collections.
///
/// The collection of teams to sort.
/// An ordered enumerable with group teams first, then individual teams.
public static IOrderedEnumerable OrderByEventFormatFirst(this IEnumerable teams)
{
return teams.OrderByDescending(t => t.Event.EventFormat == EventFormat.Team ? 1 : 0);
}
///
/// Orders teams with group teams first, then applies default secondary sorting:
/// Event.Name (ascending), then Identifier (ascending with nulls last).
///
/// The collection of teams to sort.
/// An ordered enumerable with group teams first and default secondary sorting applied.
public static IOrderedEnumerable OrderByEventFormatFirstWithDefaults(this IEnumerable teams)
{
return teams
.OrderByEventFormatFirst()
.ThenBy(t => t.Event.Name)
.ThenBy(t => t.Identifier ?? "");
}
}