namespace BoredCareers.Entities {
    public class Resume {
        public int? ID { get; set; } // PK
        public int AccountID { get; set; } // FK
        public string Title { get; set; } = "";
        public string Name { get; set; } = "";
        public string Field { get; set; } = "";
        public string Email { get; set; } = "";
        public string PhoneNumber { get; set; } = "";
        public string PostalCode { get; set; } = "";
        public string Country { get; set; } = ""; // 2 Letter Country Code
        public string StateOrRegion { get; set; } = "";
        public string City { get; set; } = "";
        public bool IsActive { get; set; } = false;
        public ResumeExperience[] Experiences { get; set; } = [];
        public ResumeMilitary? Military { get; set; } = null;
        public ResumeEducation[] Educations { get; set; } = [];
        public ResumeSkill[] Skills { get; set; } = [];
        public ResumeLanguage[] Languages { get; set; } = [];
        public ResumeCertification[] Certifications { get; set; } = [];
        public ResumeProject[] Projects { get; set; } = [];
    }

    public class ResumeExperience {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string JobTitle { get; set; } = "";
        public string Company { get; set; } = "";
        public string PostalCode { get; set; } = "";
        public string Country { get; set; } = ""; // 2 Letter Country Code
        public string StateOrRegion { get; set; } = "";
        public string City { get; set; } = "";
        public DateTime DateStarted { get; set; } = new DateTime();
        public bool StillEmployed { get; set; } = false;
        public DateTime DateEnded { get; set; } = new DateTime();
        public ResumeExperienceBullet[] ExperienceBullets { get; set; } = [];
    }

    public class ResumeExperienceBullet {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public int? ResumeExperienceID { get; set; } // FK
        public string JobFunction { get; set; } = "";
    }

    public class ResumeMilitary {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string Country { get; set; } = ""; // 2 Letter Country Code
        public string Rank { get; set; } = "";
        public DateTime DateStarted { get; set; } = new DateTime();
        public bool StillServing { get; set; } = false;
        public DateTime DateEnded { get; set; } = new DateTime();
        public ResumeMilitaryBullet[] MilitaryBullets { get; set; } = [];
    }

    public class ResumeMilitaryBullet {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public int? ResumeMilitaryID { get; set; } // FK
        public string Achievement { get; set; } = "";
        public string Description { get; set; } = "";
    }

    public class ResumeEducation {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string DegreeType { get; set; } = "";
        public string DegreeField { get; set; } = "";
        public string School { get; set; } = "";
        public string PostalCode { get; set; } = "";
        public string Country { get; set; } = ""; // 2 Letter Country Code
        public string StateOrRegion { get; set; } = "";
        public string City { get; set; } = "";
        public DateTime DateStarted { get; set; } = new DateTime();
        public bool StillStudying { get; set; } = false;
        public DateTime DateEnded { get; set; } = new DateTime();
    }

    public class ResumeSkill {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string Name { get; set; } = "";
        public string Description { get; set; } = "";
    }

    public class ResumeLanguage {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string Language { get; set; } = "";
        public string Proficiency { get; set; } = "";
    }

    public class ResumeCertification {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string Name { get; set; } = "";
        public string VerificationURL { get; set; } = "";
        public string Description { get; set; } = "";
    }

    public class ResumeProject {
        public int? ID { get; set; } // PK
        public int? ResumeID { get; set; } // FK
        public string Name { get; set; } = "";
        public string URL { get; set; } = "";
        public string Description { get; set; } = "";
    }
}