using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using District_3_App.Enitities; namespace District_3_App.Repository { public class FancierProfile { public Guid ProfileId { get; set; } public List Links { get; set; } public string DailyMotto { get; set; } public DateTime? RemoveMottoDate { get; set; } public int FrameNumber { get; set; } public string Hashtag { get; set; } } public class FancierProfileRepo { private Dictionary profileRepo = new Dictionary(); private string filePath; public FancierProfileRepo() { filePath = GenerateDefaultFilePath(); Console.WriteLine(filePath); if (!File.Exists(filePath)) { CreateXml(filePath); } Load(filePath); } private string GenerateDefaultFilePath() { return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "FancierProfile.xml"); } private void CreateXml(string filePath) { XDocument xDocument = new XDocument(new XElement("FancierProfiles")); xDocument.Save(filePath); } private void Load(string filePath) { Console.WriteLine("Reading profile info fancy settings from file: " + filePath); XDocument xDocument = XDocument.Load(filePath); XElement root = xDocument.Element("FancierProfiles"); if (root != null && root.HasElements) { foreach (var userElem in root.Elements("FancierProfile")) { Guid userId; if (!Guid.TryParse((string)userElem.Attribute("ProfileId"), out userId)) { userId = Guid.NewGuid(); } FancierProfile profile = new FancierProfile(); try { profile.ProfileId = userId; profile.DailyMotto = (string)userElem.Attribute("DailyMotto"); profile.RemoveMottoDate = (DateTime)userElem.Attribute("RemoveMottoDate"); if (profile.RemoveMottoDate < DateTime.Now) { profile.DailyMotto = null; profile.RemoveMottoDate = null; } var linksElem = userElem.Element("Links"); if (linksElem != null) { profile.Links = linksElem.Elements("Link") .Select(e => e.Value) .Where(e => !string.IsNullOrEmpty(e)) .ToList(); } profile.FrameNumber = (int)userElem.Attribute("FrameNumber"); profile.Hashtag = (string)userElem.Attribute("Hashtag"); profileRepo.Add(userId, profile); } catch (Exception ex) { Console.WriteLine($"Error parsing profile: {ex.Message}"); } } } } public void SaveToXml() { try { XDocument xDocument; if (File.Exists(filePath)) { xDocument = XDocument.Load(filePath); } else { xDocument = new XDocument(new XElement("FancierProfiles")); } XElement root = xDocument.Element("FancierProfiles"); root?.RemoveAll(); foreach (var profileId in profileRepo.Keys) { FancierProfile profile = profileRepo[profileId]; XElement profileElement = new XElement("FancierProfile", new XAttribute("ProfileId", profile.ProfileId), new XAttribute("DailyMotto", profile.DailyMotto), new XAttribute("RemoveMottoDate", profile.RemoveMottoDate), new XAttribute("FrameNumber", profile.FrameNumber), new XAttribute("Hashtag", profile.Hashtag)); if (profile.Links != null && profile.Links.Any()) { XElement linksElement = new XElement("Links"); foreach (var link in profile.Links) { linksElement.Add(new XElement("Link", link)); } profileElement.Add(linksElement); } root.Add(profileElement); } xDocument.Save(filePath); } catch (Exception ex) { Console.WriteLine("Error saving profiles to XML: " + ex.Message); } } public bool AddLink(Guid userId, string newLink) { try { if (profileRepo.ContainsKey(userId)) { if (profileRepo[userId].Links == null) { profileRepo[userId].Links = new List(); } profileRepo[userId].Links.Add(newLink); SaveToXml(); return true; } else { FancierProfile profile = new FancierProfile { ProfileId = userId, Links = new List { newLink } }; profileRepo.Add(userId, profile); SaveToXml(); return true; } } catch (Exception ex) { Console.WriteLine("Error adding link: " + ex.Message); return false; } } public bool DeleteLink(Guid userId, string linkToDelete) { try { if (profileRepo.ContainsKey(userId)) { if (profileRepo[userId].Links != null) { profileRepo[userId].Links.Remove(linkToDelete); SaveToXml(); } return true; } else { Console.WriteLine("User ID not found."); return false; } } catch (Exception ex) { Console.WriteLine("Error deleting link: " + ex.Message); return false; } } public bool SetFrameNumber(Guid userId, int newFrameNumber) { try { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].FrameNumber = newFrameNumber; SaveToXml(); return true; } else { FancierProfile profile = new FancierProfile { ProfileId = userId, FrameNumber = newFrameNumber, }; profileRepo.Add(userId, profile); SaveToXml(); return true; } } catch (Exception ex) { Console.WriteLine("Error setting frame number: " + ex.Message); return false; } } public bool DeleteFrameNumber(Guid userId) { try { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].FrameNumber = 0; SaveToXml(); return true; } else { Console.WriteLine("User ID not found."); return false; } } catch (Exception ex) { Console.WriteLine("Error deleting frame number: " + ex.Message); return false; } } public bool SetHashtag(Guid userId, string newHashtag) { try { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].Hashtag = newHashtag; SaveToXml(); return true; } else { FancierProfile profile = new FancierProfile { ProfileId = userId, Hashtag = newHashtag, }; profileRepo.Add(userId, profile); SaveToXml(); return true; } } catch (Exception ex) { Console.WriteLine("Error setting hashtag: " + ex.Message); return false; } } public bool DeleteHashtag(Guid userId) { try { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].Hashtag = string.Empty; SaveToXml(); return true; } else { Console.WriteLine("User ID not found."); return false; } } catch (Exception ex) { Console.WriteLine("Error deleting hashtag: " + ex.Message); return false; } } public bool AddDailyMotto(Guid userId, string newMotto, DateTime dateToRemove) { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].DailyMotto = newMotto; profileRepo[userId].RemoveMottoDate = dateToRemove; SaveToXml(); return true; } else { FancierProfile profile = new FancierProfile(); profile.DailyMotto = newMotto; profile.RemoveMottoDate = dateToRemove; profileRepo.Add(userId, profile); return true; } return false; } public bool DeleteDailyMotto(Guid userId) { if (profileRepo.ContainsKey(userId)) { profileRepo[userId].DailyMotto = null; SaveToXml(); return true; } else { return false; } } public string GetDailyMotto(Guid userId) { if (profileRepo.ContainsKey(userId)) { return profileRepo[userId].DailyMotto; } else { return null; } } public List GetLinks(Guid userId) { if (profileRepo.ContainsKey(userId)) { return profileRepo[userId].Links; } else { return null; } } public int GetFrameNumber(Guid userId) { if (profileRepo.ContainsKey(userId)) { return profileRepo[userId].FrameNumber; } else { return -1; } } public string GetHashtag(Guid userId) { if (profileRepo.ContainsKey(userId)) { return profileRepo[userId].Hashtag; } else { return null; } } } }