using Nonemm.Core; using Nonemm.Core.Country; namespace Nonemm.Contests; /// A QSO together with what the country file says about it, so a contest can /// score by country, zone or continent without looking anything up itself. public sealed record QsoContext(Qso Qso, CountryLookup? Country, StationInfo Me) { public Band? Band => Qso.Band; public ModeCategory ModeCategory => Qso.Mode.Category; /// What the contact says wins over the country file. The two agree unless /// the operator corrected the country by hand, and then the correction is /// the point. public string Continent => Qso.Continent.Length > 0 ? Qso.Continent : Country?.Continent ?? ""; public string CountryPrefix => Qso.CountryPrefix.Length > 0 ? Qso.CountryPrefix : Country?.Entity.PrimaryPrefix ?? ""; public int CqZone => Country?.CqZone ?? Qso.Zone; public int ItuZone => Country?.ItuZone ?? 0; public bool IsSameCountry => CountryPrefix.Length > 0 && CountryPrefix == Me.CountryPrefix; public bool IsSameContinent => Continent.Length > 0 && Continent == Me.Continent; }