using System.ComponentModel.DataAnnotations; namespace Core.Entities; public class Team { public int Id { get; set; } [Required] [Display(Name = "Team Name")] public int? Number { get; set; } public EventDefinition Event { get; set; } public List Students { get; set; } = []; public Student? Captain { get; set; } [Display(Name = "Team Id")] public string? TeamId { 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.Any()) return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), TeamId = TeamId, Number = Number}; var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList(); return new PartialTeam { Number = Number, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents}; } public Team Clone() => CloneWithOmittedStudents([]); public override string ToString() { return $"{Event.Name} {(Number != null ? $"(#{Number})" : "")}"; } }