
using System.ComponentModel.DataAnnotations;
using BMA.EHR.Recurit.Exam.Service.Models;
using Microsoft.EntityFrameworkCore;

namespace BMA.EHR.Profile.Service.Models.HR
{
    public class Profile : EntityBase
    {        // [Key]
        // public Guid Id { get; set; }
        [MaxLength(13), Comment("รหัสบัตรประชาชน")]
        public string? CitizenId { get; set; }
        [MaxLength(50)]
        public string? ProfileType { get; set; }
        [MaxLength(20), Comment("ประเภทการจ้าง")]
        public string? EmployeeType { get; set; }
        [MaxLength(20), Comment("ประเภทลูกจ้าง")]
        public string? EmployeeClass { get; set; }
        // [Comment("Id คำนำหน้า")]
        // public Prefix? Prefix { get; set; }
        [Required, MaxLength(100), Comment("ชื่อ")]
        public string? FirstName { get; set; }
        [Required, MaxLength(100), Comment("นามสกุล")]
        public string? LastName { get; set; }
        [Comment("Id คำนำหน้า(เดิม)")]
        public Guid? PrefixOldId { get; set; }
        [Required, MaxLength(100), Comment("ชื่อ(เดิม)")]
        public string? FirstNameOld { get; set; }
        [Required, MaxLength(100), Comment("นามสกุล(เดิม)")]
        public string? LastNameOld { get; set; }
        [MaxLength(100)]
        public string AvatarRef { get; set; }
        // [Comment("Id เพศ")]
        // public Gender? Gender { get; set; }
        [MaxLength(100), Comment("สัญชาติ")]
        public string? Nationality { get; set; }
        [MaxLength(100), Comment("เชื้อชาติ")]
        public string? Race { get; set; }
        [Comment("Id ศาสนา")]
        public Guid? ReligionId { get; set; }
        [Required, Comment("วันเกิด")]
        public DateTime BirthDate { get; set; }
        [Comment("Id กลุ่มเลือด")]
        public Guid? BloodGroupId { get; set; }
        [Comment("Id สถานะภาพ")]
        public Guid? RelationshipId { get; set; }
        [MaxLength(50), Comment("เบอร์โทร")]
        public string? TelephoneNumber { get; set; }
        [Comment("คู่สมรส")]
        public bool? Couple { get; set; }
        [Comment("Id คำนำหน้าคู่สมรส")]
        public Guid? CouplePrefixId { get; set; }
        [MaxLength(100), Comment("ชื่อคู่สมรส")]
        public string? CoupleFirstName { get; set; }
        [MaxLength(100), Comment("นามสกุลคู่สมรส")]
        public string? CoupleLastName { get; set; }
        [MaxLength(100), Comment("นามสกุลคู่สมรส(เดิม)")]
        public string? CoupleLastNameOld { get; set; }
        [MaxLength(100), Comment("อาชีพคู่สมรส")]
        public string? CoupleCareer { get; set; }
        [MaxLength(20), Comment("เลขที่บัตรประชาชนคู่สมรส")]
        public string? CoupleCitizenId { get; set; }

        [Comment("มีชีวิตคู่สมรส")]
        public bool CoupleLive { get; set; } = true;
        [Comment("Id คำนำหน้าบิดา")]
        public Guid? FatherPrefixId { get; set; }
        [MaxLength(100), Comment("ชื่อบิดา")]
        public string? FatherFirstName { get; set; }

        [MaxLength(100), Comment("นามสกุลบิดา")]
        public string? FatherLastName { get; set; }

        [MaxLength(100), Comment("อาชีพบิดา")]
        public string? FatherCareer { get; set; }
        [MaxLength(20), Comment("เลขที่บัตรประชาชนบิดา")]
        public string? FatherCitizenId { get; set; }

        [Comment("มีชีวิตบิดา")]
        public bool FatherLive { get; set; } = true;
        [Comment("Id คำนำหน้ามารดา")]
        public Guid? MotherPrefixId { get; set; }

        [MaxLength(100), Comment("ชื่อมารดา")]
        public string? MotherFirstName { get; set; }

        [MaxLength(100), Comment("นามสกุลมารดา")]
        public string? MotherLastName { get; set; }

        [MaxLength(100), Comment("อาชีพมารดา")]
        public string? MotherCareer { get; set; }
        [MaxLength(20), Comment("เลขที่บัตรประชาชนมารดา")]
        public string? MotherCitizenId { get; set; }

        [Comment("มีชีวิตมารดา")]
        public bool MotherLive { get; set; } = true;
        [MaxLength(200), Comment("ที่อยู่ปัจจุบัน")]
        public string? CurrentAddress { get; set; }
        [Comment("Id แขวงปัจจุบัน")]
        public Guid? CurrentSubDistrictId { get; set; }
        [Comment("Id เขตปัจจุบัน")]
        public Guid? CurrentDistrictId { get; set; }
        [Comment("Id จังหวัดปัจจุบัน")]
        public Guid? CurrentProvinceId { get; set; }
        [MaxLength(5), Comment("รหัสไปรษณีย์ปัจจุบัน")]
        public string? CurrentZipCode { get; set; }
        [Comment("ที่อยู่ปัจจุบันตรงกับที่อยู่ตามทะเบียนบ้านหรือไม่")]
        public bool? RegistrationSame { get; set; } = false;
        [MaxLength(200), Comment("Id แขวงตามทะเบียนบ้าน")]
        public string? RegistrationAddress { get; set; }
        [Comment("แขวงตามทะเบียนบ้าน")]
        public Guid? RegistrationSubDistrictId { get; set; }
        [Comment("Id เขตตามทะเบียนบ้าน")]
        public Guid? RegistrationDistrictId { get; set; }
        [Comment("Id จังหวัดตามทะเบียนบ้าน")]
        public Guid? RegistrationProvinceId { get; set; }
        [MaxLength(5), Comment("รหัสไปรษณีย์ตามทะเบียนบ้าน")]
        public string? RegistrationZipCode { get; set; }

        public DateTime? DateAppoint { get; set; }

        public DateTime? DateStart { get; set; }

        public DateTime? DateRetire { get; set; }

        public string? ReasonSameDate { get; set; }
        // public Guid? AffiliationId { get; set; }
        // public Guid? PositionId { get; set; }
        // public Guid? WorkId { get; set; }
        // public Guid? TypeId { get; set; }
        // public Guid? LevelId { get; set; }
        // public Guid? NumberId { get; set; }
        // public Guid? BusinessId { get; set; }
        [Comment("Id สังกัด")]
        public Guid? OcId { get; set; }
        [Comment("สังกัด")]
        public string? Oc { get; set; }
        public Guid? OrganizationShortNameId { get; set; }
        public string? OrganizationShortName { get; set; }
        public string? GovernmentCode { get; set; }
        public Guid? OrganizationOrganizationId { get; set; }
        public string? OrganizationOrganization { get; set; }
        // [Comment("Id ตำแหน่ง")]
        // public PositionPath? Position { get; set; }
        // // [Comment("ตำแหน่ง")]
        // // public string? Position { get; set; }
        // [Comment("Id เลขที่ตำแหน่ง")]
        // public PositionNumberEntity? PosNo { get; set; }
        // [Comment("เลขที่ตำแหน่ง")]
        // public string? PosNo { get; set; }
        [Comment("เลขที่ตำแหน่งลูกจ้าง")]
        public string? PosNoEmployee { get; set; }
        [Comment("Id สายงาน")]
        public Guid? PositionLineId { get; set; }
        [Comment("สายงาน")]
        public string? PositionLine { get; set; }
        [Comment("Id ด้าน/สาขา")]
        public Guid? PositionPathSideId { get; set; }
        [Comment("ด้าน/สาขา")]
        public string? PositionPathSide { get; set; }
        // [Comment("Id ประเภทตำแหน่ง")]
        // public Guid? PositionTypeId { get; set; }
        // [Comment("ประเภทตำแหน่ง")]
        // public PositionType? PositionType { get; set; }
        // // [Comment(" Id ระดับ")]
        // // public Guid? PositionLevelId { get; set; }
        // [Comment("ระดับ")]
        // public PositionLevel? PositionLevel { get; set; }
        [Comment("Id ตำแหน่งทางการบริหาร")]
        public Guid? PositionExecutiveId { get; set; }
        [Comment("ตำแหน่งทางการบริหาร")]
        public string? PositionExecutive { get; set; }
        [Comment("Id ด้านทางการบริหาร")]
        public Guid? PositionExecutiveSideId { get; set; }
        [Comment("ด้านทางการบริหาร")]
        public string? PositionExecutiveSide { get; set; }

        // [Comment("Id ตำแหน่ง")]
        // public PositionEmployeePosition? PositionEmployeePosition { get; set; }
        // // [Comment("ตำแหน่ง")]
        // // public string? PositionEmployeePosition { get; set; }
        // [Comment("Id ด้านของตำแหน่ง")]
        // public PositionEmployeePositionSide? PositionEmployeePositionSide { get; set; }
        // // [Comment("ด้านของตำแหน่ง")]
        // // public string? PositionEmployeePositionSide { get; set; }
        // [Comment(" Id ระดับชั้นงาน")]
        // public PositionEmployeeLevel? PositionEmployeeLevel { get; set; }
        // // [Comment("ระดับชั้นงาน")]
        // // public string? PositionEmployeeLevel { get; set; }
        // [Comment("Id กลุ่มงาน")]
        // public PositionEmployeeGroup? PositionEmployeeGroup { get; set; }
        // // [Comment("กลุ่มงาน")]
        // // public string? PositionEmployeeGroup { get; set; }
        // [Comment("Id สายงาน")]
        // public PositionEmployeeLine? PositionEmployeeLine { get; set; }
        // // [Comment("สายงาน")]
        // // public string? PositionEmployeeLine { get; set; }

        [MaxLength(100), Comment("สถานภาพทางกาย")]
        public string Physical { get; set; }

        [MaxLength(100)]
        public string Ability { get; set; }

        public bool IsActive { get; set; } = true;

        public bool IsLeave { get; set; } = false;

        public DateTime? LeaveDate { get; set; }

        [MaxLength(1000)]
        public string? LeaveReason { get; set; }
        public string? LeaveDetail { get; set; }
        public string? LeaveNumberOrder { get; set; }
        public DateTime? LeaveDateOrder { get; set; }

        public DateTime? CreatedDate { get; set; }

        public DateTime? ModifiedDate { get; set; }

        [MaxLength(250)]
        public string CreatedUser { get; set; } = string.Empty;

        [MaxLength(5)]
        public string EntryStatus { get; set; } = "st1"; // สถานะการตรวจสอบ st1 = create; st2 = pending  

        public bool IsTransfer { get; set; } = false;

        public DateTime? TransferDate { get; set; }

        public int GovAgeAbsent { get; set; } = 0;

        public int GovAgePlus { get; set; } = 0;

        // public OrganizationEntity? Organization { get; set; }

        // public PositionNumberEntity PositionNumber { get; set; }

        // public Position Position { get; set; }

        // public PositionExecutive PositionExecutive { get; set; }

        public bool IsVerified { get; set; } = false;

        [MaxLength(100)]
        public string VerifiedUser { get; set; } = string.Empty;

        public DateTime? VerifiedDate { get; set; }

        // public Document? Avatar { get; set; }

        public bool IsProbation { get; set; } = true;

        // public PositionType PositionType { get; set; } // ประเภทตำแหน่ง

        // public PositionLevel PositionLevel { get; set; } // ระดับ

        // public OrganizationPositionEntity? OrganizationPosition { get; set; }
        // public LimitLeave? LimitLeave { get; set; }
        public Guid? KeycloakId { get; set; }
        [Comment("สังกัด")]
        public string? EmployeeOc { get; set; }
        [Comment("ค่าจ้าง")]
        public double? EmployeeWage { get; set; }
        [Comment("ประเภทบุคคล")]
        public string? EmployeeTypeIndividual { get; set; }
        [Comment("เงินเพิ่มการครองชีพชั่วคราว")]
        public double? EmployeeMoneyIncrease { get; set; }
        [Comment("เงินช่วยเหลือค่าครองชีพชั่วคราว")]
        public double? EmployeeMoneyAllowance { get; set; }
        [Comment("เงินสมทบประกันสังคม(ลูกจ้าง)")]
        public double? EmployeeMoneyEmployee { get; set; }
        [Comment("เงินสมทบประกันสังคม(นายจ้าง)")]
        public double? EmployeeMoneyEmployer { get; set; }

        // public virtual List<ProfileEducation> Educations { get; set; } = new List<ProfileEducation>();

        // public virtual List<ProfileHonor> Honors { get; set; } = new List<ProfileHonor>();
        // public virtual List<ProfileAssessment> Assessments { get; set; } = new List<ProfileAssessment>();

        // public virtual List<ProfileDiscipline> Disciplines { get; set; } = new List<ProfileDiscipline>();

        // public virtual List<ProfileCertificate> Certificates { get; set; } = new List<ProfileCertificate>();

        // public virtual List<ProfileTraining> Trainings { get; set; } = new List<ProfileTraining>();

        // public virtual List<ProfileInsignia> Insignias { get; set; } = new List<ProfileInsignia>();

        public virtual List<ProfileSalary> Salaries { get; set; } = new List<ProfileSalary>();

        // public virtual List<ProfileHistory> ProfileHistory { get; set; } = new List<ProfileHistory>();

        // public virtual List<ProfileCoupleHistory> CoupleHistory { get; set; } = new List<ProfileCoupleHistory>();

        // public virtual List<ProfileFatherHistory> FatherHistory { get; set; } = new List<ProfileFatherHistory>();

        // public virtual List<ProfileMotherHistory> MotherHistory { get; set; } = new List<ProfileMotherHistory>();

        // public virtual List<ProfileFamilyHistory> FamilyHistory { get; set; } = new List<ProfileFamilyHistory>();

        // public virtual List<ProfileGovernmentHistory> GovernmentHistory { get; set; } = new List<ProfileGovernmentHistory>();

        // public virtual List<ProfileLeave> Leaves { get; set; } = new List<ProfileLeave>();

        // public virtual List<ProfileCurrentAddressHistory> CurrentAddressHistory { get; set; } = new List<ProfileCurrentAddressHistory>();

        // public virtual List<ProfileRegistrationAddressHistory> RegistrationAddressHistory { get; set; } = new List<ProfileRegistrationAddressHistory>();

        // public virtual List<ProfileAddressHistory> AddressHistory { get; set; } = new List<ProfileAddressHistory>();

        // public virtual List<ProfileOther> Others { get; set; } = new List<ProfileOther>();

        // public virtual List<ProfileAbility> Abilitys { get; set; } = new List<ProfileAbility>();

        // public virtual List<ProfileDuty> Dutys { get; set; } = new List<ProfileDuty>();

        // public virtual List<ProfileNopaid> Nopaids { get; set; } = new List<ProfileNopaid>();

        // public virtual List<ProfileAvatarHistory> AvatarHistory { get; set; } = new List<ProfileAvatarHistory>();

        // public virtual List<ProfilePaper> Papers { get; set; } = new List<ProfilePaper>();

        // public virtual List<ProfileChildren> Childrens { get; set; } = new List<ProfileChildren>();
        // public virtual List<ProfileChangeName> ChangeNames { get; set; } = new List<ProfileChangeName>();
    }
}
