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(); List matchups = GlobalConfig.MatchupFile.FullFilePath().LoadFile().ConvertToMatchupModels(); 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()); } if (cols[4].Length > 0) { 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 string[] rounds = cols[5].Split('|'); foreach (string round in rounds) { List ms = new List(); string[] mstext = round.Split('^'); foreach (string matchupModelTextId in mstext) { ms.Add(matchups.Where(x => x.Id == int.Parse(matchupModelTextId)).First()); } tm.Rounds.Add(ms); } 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 SaveRoundsToFile(this TournamentModel model,string matchupFile,string matchupEntryFile) { // Loop through each round // Loop through each matchup // Get the Id for the new matchup and save the record // Loop through each Entry , get the id, and save it foreach (List round in model.Rounds) { foreach (MatchupModel matchup in round) { // load all of the matchups // Get the top id and add one // Store the id // Svae the matchup record matchup.SaveMatchupToFile(matchupFile, matchupEntryFile); } } } public static List ConvertToMatchupEntryModels(this List lines) { List output = new List(); foreach (string line in lines) { string[] cols = line.Split(','); MatchupEntryModel me = new MatchupEntryModel(); me.Id = int.Parse(cols[0]); if(cols[1].Length == 0) { me.TeamCompeting = null; } else { me.TeamCompeting = LookupTeamById(int.Parse(cols[1])); } me.Score = double.Parse( cols[2]); int parentId = 0; if(int.TryParse(cols[3], out parentId)) { me.ParentMatchup = LookupMatchupById(parentId); } else { me.ParentMatchup = null; } output.Add(me); } return output; } private static List ConvertStringToMatchupEntryModels(string input) { string[] ids = input.Split('|'); List output = new List(); List entries = GlobalConfig.MatchupEntryFile.FullFilePath().LoadFile(); List matchingEntries = new List(); foreach (string id in ids) { foreach (string entry in entries) { string[] cols = entry.Split(','); if (cols[0] == id) { matchingEntries.Add(entry); } } } output = matchingEntries.ConvertToMatchupEntryModels(); return output; } private static TeamModel LookupTeamById(int id) { List teams = GlobalConfig.TeamFile.FullFilePath().LoadFile(); foreach (string team in teams) { string[] cols = team.Split(','); if (cols[0] == id.ToString()) { List matchingTeams = new List(); matchingTeams.Add(team); return matchingTeams.ConvertToTeamModels(GlobalConfig.PeopleFile).First(); } } return null; } private static MatchupModel LookupMatchupById(int id) { List matchups = GlobalConfig.MatchupFile.FullFilePath().LoadFile(); foreach (string matchup in matchups) { string[] cols = matchup.Split(','); if (cols[0] == id.ToString()) { List matchingMatchups = new List(); matchingMatchups.Add(matchup); return matchingMatchups.ConvertToMatchupModels().First(); } } return null; } public static List ConvertToMatchupModels(this List lines) { // id=0,entries=1(pipe delimited by id), winner=2 , matchupRound = 3 List output = new List(); foreach (string line in lines) { string[] cols = line.Split(','); MatchupModel p = new MatchupModel(); p.Id = int.Parse(cols[0]); p.Entries = ConvertStringToMatchupEntryModels(cols[1]); if (cols[2].Length == 0) { p.Winner = null; } else { p.Winner = LookupTeamById(int.Parse(cols[2])); } p.MatchupRound = int.Parse(cols[3]); output.Add(p); } return output; } public static void SaveMatchupToFile(this MatchupModel matchup, string matchupFile, string matchupEntryFile) { List matchups = GlobalConfig.MatchupFile.FullFilePath().LoadFile().ConvertToMatchupModels(); int currentId = 1; if(matchups.Count > 0) { currentId = matchups.OrderByDescending(x => x.Id).First().Id + 1; } matchup.Id = currentId; matchups.Add(matchup); foreach (MatchupEntryModel entry in matchup.Entries) { entry.SaveEntryToFile(matchupEntryFile); } List lines = new List(); foreach (MatchupModel m in matchups) { string winner = ""; if (m.Winner != null) { winner = m.Winner.Id.ToString(); ; } lines.Add($"{m.Id},{ConvertMatchupEntryListToString(m.Entries)},{winner},{m.MatchupRound}"); } File.WriteAllLines(GlobalConfig.MatchupFile.FullFilePath(), lines); } public static void SaveEntryToFile(this MatchupEntryModel entry, string matchupEntryFile) { List entries = GlobalConfig.MatchupEntryFile.FullFilePath().LoadFile().ConvertToMatchupEntryModels(); int currentId = 1; if (entries.Count > 0) { currentId = entries.OrderByDescending(x => x.Id).First().Id + 1; } entry.Id = currentId; entries.Add(entry); List lines = new List(); foreach (MatchupEntryModel e in entries) { string parent = ""; if(e.ParentMatchup != null) { parent = e.ParentMatchup.Id.ToString(); } string teamCompeting = ""; if(e.TeamCompeting != null) { teamCompeting = e.TeamCompeting.Id.ToString(); } lines.Add($"{e.Id},{teamCompeting},{e.Score},{parent}"); } File.WriteAllLines(GlobalConfig.MatchupEntryFile.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 ConvertMatchupEntryListToString(List entries) { string output = ""; if (entries.Count == 0) { return ""; } foreach (MatchupEntryModel me in entries) { output += $"{me.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; } } }