diff --git a/LangLang/Core/Model/Tutor.cs b/LangLang/Core/Model/Tutor.cs index 512eb7e9..c47a8741 100644 --- a/LangLang/Core/Model/Tutor.cs +++ b/LangLang/Core/Model/Tutor.cs @@ -1,43 +1,102 @@ -using System; +using LangLang.Core.Repository.Serialization; +using LangLang.Core.Model; +using System; using System.Collections.Generic; using System.Linq; using System.Text; -using System.Threading.Tasks; -using System.Windows.Input; -using LangLang.Core.Model; +using System.Data; +using System.Reflection; + namespace LangLang.Core.Model { - class Tutor + public class Tutor : ISerializable { - // Profile attribute of type Profile - private Profile _profile { get; set; } - private Dictionary _languageSkills { get; set; } + private Dictionary _languageSkills; - // Constructor - public Tutor() + private DateTime _employmentDate; + + private Profile _profile; + + public Dictionary LanguageSkills { - // Initialize empty profile and language skills - _profile = new Profile(); - _profile.Role = UserType.Tutor; - _languageSkills = new Dictionary(); + get { return _languageSkills; } + set { _languageSkills = value; } } - public Tutor(Profile profile, Dictionary languageSkills) + public DateTime EmploymentDate { - _profile = profile; - _languageSkills = languageSkills; + get { return _employmentDate; } + set { _employmentDate = value; } } - - //Getters and setters public Profile Profile { get { return _profile; } private set { _profile = value; } } - public Dictionary LanguageSkills + + public Tutor(int id, string name, string lastName, UserGender gender, DateTime dateOfBirth, string phoneNumber, string email, string password, UserType role, DateTime employmentDate, Dictionary languageSkills) { + _profile = new Profile(id, name, lastName, gender, dateOfBirth, phoneNumber, email, password, role); + _employmentDate = employmentDate; + _languageSkills = languageSkills; + } + + public Tutor() { - get { return _languageSkills; } - private set { _languageSkills = value; } + _languageSkills = new Dictionary(); + _employmentDate = DateTime.MinValue; + _profile = new(); } + + public void FromCSV(string[] values) + { + _profile = new Profile(values[0], values[1], values[2], values[3], values[4], values[5], values[6], values[7], values[8]); + + if (!DateTime.TryParseExact(values[9], "yyyy-MM-dd", null, System.Globalization.DateTimeStyles.None, out _employmentDate)) + { + throw new FormatException("Date is not in the correct format."); + } + + for (int i = 10; i < values.Length; i++) + { + string[] languageSkill = values[i].Split(','); + + if (languageSkill.Length != 2) + { + throw new FormatException("Language and skill pair is not in the correct format."); + } + LanguageLevel level; + if (Enum.TryParse(languageSkill[1], out level)) + { + _languageSkills.Add(languageSkill[0], level); + } + } + } + + public string[] ToCSV() + { + string[] csvValues = + { + _profile.ToString(), + _employmentDate.ToString("yyyy-MM-dd"), + DictToCSV(_languageSkills) + }; + + return csvValues; + } + + public string DictToCSV(Dictionary skills) + { + StringBuilder sb = new StringBuilder(); + var length = skills.Count(); + foreach (var skill in skills) + { + sb.Append(skill.Key).Append(",").Append(skill.Value); + if (--length > 0) sb.Append("|"); + } + return sb.ToString(); + } + + + /* public List GetCourses(ref Dictionary courses) { @@ -63,3 +122,4 @@ public List GetExamSlots(ref Dictionary examSlots) //add searchCourses and searchExamSlots } } + \ No newline at end of file