using System; using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using TrackerLibrary.Models; namespace TrackerLibrary.DataAccess.TextHelpers { public static class TextConnectorProcessor { public static string FullFilePath(this string fileName) // PrizeModel.csv { return $"{ConfigurationManager.AppSettings["filePath"]}\\{fileName}"; } public static List LoadFile(this string file) { if (!File.Exists(file)) { return new List(); } return File.ReadAllLines(file).ToList(); } public static List ConvertToPrizeModels(this List lines) { List output = new List(); foreach (string line in lines) { string[] cols = line.Split(','); PrizeModel p = new PrizeModel(); p.Id = int.Parse(cols[0]); p.PlaceNumber = int.Parse(cols[1]); p.PlaceName = cols[2]; p.PrizeAmount = decimal.Parse(cols[3]); p.PrizePercentage = double.Parse(cols[4]); output.Add(p); } return output; } public static List ConvertToPersonModels(this List lines) { List output = new List(); foreach (string line in lines) { string[] cols = line.Split(','); PersonModel p = new PersonModel(); p.Id = int.Parse(cols[0]); p.FirstName = cols[1]; p.LastName = cols[2]; p.EmailAddress = cols[3]; p.CellPhoneNumber = cols[4]; output.Add(p); } return output; } public static List ConvertToTeamModels(this List lines, string peopleFileName) { // id, team name,list of ids separated by pipe // 3,Start Team, 1|4 List output = new List(); List people = peopleFileName.FullFilePath().LoadFile().ConvertToPersonModels(); foreach (string line in lines) { string[] cols = line.Split(','); TeamModel t = new TeamModel(); t.Id = int.Parse(cols[0]); t.TeamName = cols[1]; string[] personIds = cols[2].Split('|'); foreach (string id in personIds) { t.TeamMembers.Add(people.Where(x => x.Id == int.Parse(id)).First()); } output.Add(t); } return output; } public static List ConvertToTournamentModels( this List lines, string teamFileName, string peopleFileName, string prizesFileName ) { // id = 0 // TournamentName = 1 // EntryFee = 2 // EnteredTeams = 3 // Prizes = 4 // Rounds = 5 // id, TournamentName, EntryFee, (id|id|id - entered teams), (id|id|id - entered prizes), (rounds - id^id^id|id^id^id|id^id^id) List output = new List(); List teams = teamFileName.FullFilePath().LoadFile().ConvertToTeamModels(peopleFileName); List prizes = prizesFileName.FullFilePath().LoadFile().ConvertToPrizeModels(); foreach (string line in lines) { string[] cols = line.Split(','); TournamentModel tm = new TournamentModel(); tm.Id = int.Parse(cols[0]); tm.TournamentName = cols[1]; tm.EntryFee = decimal.Parse(cols[2]); string[] teamIds = cols[3].Split('|'); foreach (string teamId in teamIds) { tm.EnteredTeams.Add(teams.Where(x => x.Id == int.Parse(teamId)).First()); } string[] prizeIds = cols[4].Split('|'); foreach (string prizeId in prizeIds) { tm.Prizes.Add(prizes.Where(x => x.Id == int.Parse(prizeId)).First()); } // Capture rounds information output.Add(tm); } return output; } public static void SaveToPrizeFile(this List models, string fileName) { List lines = new List(); foreach (PrizeModel p in models) { lines.Add($"{p.Id},{p.PlaceNumber},{p.PlaceName}, {p.PrizeAmount}, {p.PrizePercentage}"); } File.WriteAllLines(fileName.FullFilePath(), lines); } public static void SaveToPeopleFile(this List models, string fileName) { List lines = new List(); foreach (PersonModel p in models) { lines.Add($"{p.Id},{p.FirstName},{p.LastName},{p.EmailAddress},{p.CellPhoneNumber}"); } File.WriteAllLines(fileName.FullFilePath(), lines); } public static void SaveToTeamFile(this List models, string fileName) { List lines = new List(); foreach (TeamModel t in models) { lines.Add($"{t.Id},{t.TeamName},{ConvertPeopleListToString(t.TeamMembers)}"); } File.WriteAllLines(fileName.FullFilePath(), lines); } public static void SaveToTournamentFile(this List models, string fileName) { List lines = new List(); foreach (TournamentModel tm in models) { lines.Add($@"{tm.Id}, {tm.TournamentName}, {tm.EntryFee}, {ConvertTeamListToString(tm.EnteredTeams)}, {ConvertPrizeListToString(tm.Prizes)}, {ConvertRoundListToString(tm.Rounds)}"); } File.WriteAllLines(fileName.FullFilePath(), lines); } private static string ConvertRoundListToString(List> rounds) { // (rounds - id^id^id|id^id^id|id^id^id) string output = ""; if (rounds.Count == 0) { return ""; } foreach (List r in rounds) { output += $"{ConvertMatchupListToString(r)}|"; } output = output.Substring(0, output.Length - 1); return output; } private static string ConvertMatchupListToString(List matchups) { string output = ""; if (matchups.Count == 0) { return ""; } foreach (MatchupModel p in matchups) { output += $"{p.Id}^"; } output = output.Substring(0, output.Length - 1); return output; } private static string ConvertPrizeListToString(List prizes) { string output = ""; if (prizes.Count == 0) { return ""; } foreach (PrizeModel p in prizes) { output += $"{p.Id}|"; } output = output.Substring(0, output.Length - 1); return output; } private static string ConvertTeamListToString(List teams) { string output = ""; if (teams.Count == 0) { return ""; } foreach (TeamModel t in teams) { output += $"{t.Id}|"; } output = output.Substring(0, output.Length - 1); return output; } private static string ConvertPeopleListToString(List people) { string output = ""; if (people.Count == 0) { return ""; } foreach (PersonModel p in people) { output += $"{p.Id}|"; } output = output.Substring(0, output.Length - 1); return output; } } }