using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using CsvHelper; using CsvHelper.Configuration; namespace FabStarterDeckGen { public class ReferenceCardRow { public string Identifiers; public string Set_Identifiers; public string Name; public string Pitch; public string Rarity; } public class ReferenceCardRowMap : ClassMap { public ReferenceCardRowMap() { Map(m => m.Identifiers).Name("Identifiers"); Map(m => m.Set_Identifiers).Name("Set Identifiers"); Map(m => m.Name).Name("Name"); Map(m => m.Pitch).Name("Pitch"); Map(m => m.Rarity).Name("Rarity"); } } public class CardInstance { private Regex clean_card_name_regex = new Regex(@"[^a-zA-Z0-9_ ]+"); public CardInstance(ReferenceCardRow pBase) { Name = pBase.Name; Pitch = pBase.Pitch; Rarity = pBase.Rarity; foreach (var part in pBase.Identifiers.Split(',')) { if (part == "null") continue; Identifiers.Add(part); } foreach (var part in pBase.Set_Identifiers.Split(',')) { if (part == "null") continue; Set_Identifiers.Add(part); } CleanName = clean_card_name_regex.Replace(Name, ""); } public List Identifiers = new List(); public List Set_Identifiers = new List(); public string Name; public string CleanName; public string Pitch; public string Rarity; public bool IsPitchless => Pitch == ""; public bool IsRed => Pitch == "1"; public bool IsYellow => Pitch == "2"; public bool IsBlue => Pitch == "3"; public string CleanNameRed => CleanName + " - R"; public string CleanNameYellow => CleanName + " - Y"; public string CleanNameBlue => CleanName + " - B"; } public class ReferenceSetRow { public string Identifier; public string Name; public string Initial_Release_Dates; } public class ReferenceSetRowMap : ClassMap { public ReferenceSetRowMap() { Map(m => m.Identifier).Name("Identifier"); Map(m => m.Initial_Release_Dates).Name("Initial Release Dates"); Map(m => m.Name).Name("Name"); } } public class SetInstance { public SetInstance(ReferenceSetRow pBase) { Identifier = pBase.Identifier; Name = pBase.Name; var release_dates = new List(); foreach (var part in pBase.Initial_Release_Dates.Split(',')) { if (part == "null") continue; release_dates.Add(DateTime.Parse(part)); } if (release_dates.Count > 0) { release_dates.Sort(); EarliestReleaseDate = release_dates[0]; } else { EarliestReleaseDate = DateTime.UnixEpoch; } } public string Identifier; public string Name; public DateTime EarliestReleaseDate; public bool IsPromoSet; public bool IsDeckSet; public bool IsClassicBattleSet; } public class ReferenceCardLoader { private List ReferenceSets; private List ReferenceCards; public List Sets = new List(); public List Cards = new List(); public void LoadSetCSV(string pFilePath) { var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = "\t", Encoding = Encoding.UTF8 }; using (var reader = new StreamReader(pFilePath)) using (var csv = new CsvReader(reader, config)) { csv.Context.RegisterClassMap(); ReferenceSets = csv.GetRecords().ToList(); } foreach (var set in ReferenceSets) { Sets.Add(new SetInstance(set)); } } public void LoadCardCSV(string pFilePath) { var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = "\t", Encoding = Encoding.UTF8 }; using (var reader = new StreamReader(pFilePath)) using (var csv = new CsvReader(reader, config)) { csv.Context.RegisterClassMap(); ReferenceCards = csv.GetRecords().ToList(); } foreach (var card in ReferenceCards) { Cards.Add(new CardInstance(card)); } } public List GetCardsWithName(string pName) { List card_list = new List(); foreach (var card in Cards) { if(card.Name != pName) continue; card_list.Add(card); } return card_list; } } }