using System.ComponentModel.DataAnnotations; using Core.Models; namespace Core.Entities; public class Team { public int Id { get; set; } [Required] public EventDefinition Event { get; set; } = null!; public List Students { get; set; } = []; public Student? Captain { get; set; } [Display(Name = "Team Identifier")] [StringLength(32)] public string? Identifier { get; set; } // public Tuple? RegionalTimeSlotObj //{ // get // { // if (string.IsNullOrEmpty(RegionalTimeSlot)) // return null; // var times = Regex.Matches(RegionalTimeSlot, @"(.*)\s*-\s*(.*)"); // if (times.Count == 0) // return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null); // var match = times[0]; // if (!match.Success) // return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null); // return Tuple.Create(P(match.Groups[1].Value), (DateTime?)P(match.Groups[2].Value)); // return null; // } //} private DateTime P(string s) { var dt = DateTime.Parse(s); if (dt.TimeOfDay < TimeSpan.FromHours(7)) return dt + TimeSpan.FromHours(12); return dt; } public virtual Team CloneWithOmittedStudents(IEnumerable studentsToOmit) { var studentsToOmitList = studentsToOmit.ToList(); var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList(); if (omittedStudents.Count == 0) return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), Identifier = Identifier, Id = Id}; var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList(); return new PartialTeam { Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents, Identifier = Identifier, Id = Id}; } public Team Clone() => CloneWithOmittedStudents([]); public override string ToString() { return $"{Event?.Name ?? "(no event)"} {(Identifier != null ? $"({Identifier})" : "")}"; } }