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

namespace BMA.EHR.Recurit.Exam.Service.Models
{
    public class Candidate : EntityBase
    {
        [Required, Comment("Id การสอบ")]
        public virtual PeriodExam? PeriodExam { get; set; }

        [Comment("Id ตำแหน่งสอบ")]
        public virtual PositionExam? PositionExam { get; set; }

        [Required, MaxLength(40), Comment("User Id ผู้สมัคร")]
        public string UserId { get; set; } = string.Empty;

        [Required, MaxLength(20), Comment("สถานะผู้สมัคร")]
        public string Status { get; set; } = "register";

        [Comment("เลขประจำตัวสอบ")]
        public string? ExamIdenNumber { get; set; }

        [Comment("เลขที่นั่งสอบ")]
        public string? SeatNumber { get; set; }

        [Comment("คะแนนเต็มภาค ก")]
        public string? PointTotalA { get; set; }

        [Comment("คะแนนภาค ก ความสามารถในการคิดวิเคราะห์")]
        public string? PointPath1A { get; set; }

        [Comment("คะแนนภาค ก ภาษาอังกฤษ")]
        public string? PointPath2A { get; set; }

        [Comment("คะแนนภาค ก ความรู้และลักษณะการเป็นข้าราชการที่ดี")]
        public string? PointPath3A { get; set; }

        [Comment("คะแนนภาค ก")]
        public string? PointA { get; set; }

        [Comment("คะแนนภาค ก เปอร์เซนต์")]
        public string? PointPerA { get; set; }

        [Comment("ผลสอบภาค ก")]
        public string? ResultA { get; set; }

        [Comment("คะแนนเต็มภาค ข")]
        public string? PointTotalB { get; set; }

        [Comment("คะแนนภาค ข")]
        public string? PointB { get; set; }

        [Comment("คะแนนภาค ข เปอร์เซนต์")]
        public string? PointPerB { get; set; }

        [Comment("ผลสอบภาค ข")]
        public string? ResultB { get; set; }

        [Comment("คะแนนเต็มภาค ค")]
        public string? PointTotalC { get; set; }

        [Comment("คะแนนภาค คทดสอบสมรรถนะหลัก")]
        public string? PointPath1C { get; set; }

        [Comment("คะแนนภาค ค สัมภาษณ์")]
        public string? PointPath2C { get; set; }

        [Comment("คะแนนภาค ค")]
        public string? PointC { get; set; }

        [Comment("คะแนนภาค ค เปอร์เซนต์")]
        public string? PointPerC { get; set; }

        [Comment("ผลสอบภาค ค")]
        public string? ResultC { get; set; }

        [Comment("Id รูปโปรไฟล์")]
        public virtual Document? ProfileImg { get; set; }

        [Comment("Id หลักฐานชำระเงิน")]
        public virtual Document? PaymentImg { get; set; }

        [Comment("ลำดับที่สอบได้")]
        public string? Number { get; set; }


        [Comment("Id คำนำหน้าชื่อ")]
        public Guid? PrefixId { get; set; }

        [Comment("คำนำหน้าชื่อ")]
        public string? PrefixName { get; set; }

        [MaxLength(100), Column(Order = 1), Comment("ชื่อจริง")]
        public string? FirstName { get; set; }

        [MaxLength(100), Column(Order = 2), Comment("นามสกุล")]
        public string? LastName { get; set; }

        [MaxLength(40), Column(Order = 3), Comment("สัญชาติ")]
        public string? Nationality { get; set; }

        [MaxLength(40), Comment("วันเกิด")]
        public DateTime? DateOfBirth { get; set; }

        [Comment("Id สถานภาพ")]
        public Guid? RelationshipId { get; set; }

        [Comment("สถานภาพ")]
        public string? RelationshipName { get; set; }

        [Comment("Id ศาสนา")]
        public Guid? ReligionId { get; set; }

        [Comment("ศาสนา")]
        public string? ReligionName { get; set; }

        [MaxLength(200), Comment("อีเมล")]
        public string? Email { get; set; }

        [MaxLength(20), Comment("เลขประจำตัวประชาชน")]
        public string? CitizenId { get; set; }

        [Comment("Id เขตที่ออกบัตรประชาชน")]
        public Guid? CitizenDistrictId { get; set; }

        [Comment("เขตที่ออกบัตรประชาชน")]
        public string? CitizenDistrictName { get; set; }

        [Comment("Id จังหวัดที่ออกบัตรประชาชน")]
        public Guid? CitizenProvinceId { get; set; }

        [Comment("จังหวัดที่ออกบัตรประชาชน")]
        public string? CitizenProvinceName { get; set; }

        [Comment("วันที่ออกบัตร")]
        public DateTime? CitizenDate { get; set; }

        [MaxLength(20), Comment("โทรศัพท์")]
        public string? Telephone { get; set; }

        [MaxLength(20), Comment("โทรศัพท์มือถือ")]
        public string? MobilePhone { get; set; }

        [Comment("ความสามารถพิเศษ")]
        public string? Knowledge { get; set; }




        [Comment("ที่อยู่ตามทะเบียนบ้าน")]
        public string? RegistAddress { get; set; }

        [Comment("Id จังหวัดที่อยู่ตามทะเบียนบ้าน")]
        public Guid? RegistProvinceId { get; set; }

        [Comment("จังหวัดที่อยู่ตามทะเบียนบ้าน")]
        public string? RegistProvinceName { get; set; }

        [Comment("Id อำเภอที่อยู่ตามทะเบียนบ้าน")]
        public Guid? RegistDistrictId { get; set; }

        [Comment("อำเภอที่อยู่ตามทะเบียนบ้าน")]
        public string? RegistDistrictName { get; set; }

        [Comment("Id ตำบลที่อยู่ตามทะเบียนบ้าน")]
        public Guid? RegistSubDistrictId { get; set; }

        [Comment("ตำบลที่อยู่ตามทะเบียนบ้าน")]
        public string? RegistSubDistrictName { get; set; }

        [MaxLength(10), Comment("รหัสไปรษณีย์ที่อยู่ตามทะเบียนบ้าน")]
        public string? RegistZipCode { get; set; }

        [Comment("ที่อยู่ปัจจุบันเหมือนที่อยู่ตามทะเบียนบ้าน")]
        public bool? RegistSame { get; set; }

        [Comment("ที่อยู่ปัจจุบัน")]
        public string? CurrentAddress { get; set; }

        [Comment("Id จังหวัดที่อยู่ปัจจุบัน")]
        public Guid? CurrentProvinceId { get; set; }

        [Comment("จังหวัดที่อยู่ปัจจุบัน")]
        public string? CurrentProvinceName { get; set; }

        [Comment("Id อำเภอที่อยู่ปัจจุบัน")]
        public Guid? CurrentDistrictId { get; set; }

        [Comment("อำเภอที่อยู่ปัจจุบัน")]
        public string? CurrentDistrictName { get; set; }

        [Comment("Id ตำบลที่อยู่ปัจจุบัน")]
        public Guid? CurrentSubDistrictId { get; set; }

        [Comment("ตำบลที่อยู่ปัจจุบัน")]
        public string? CurrentSubDistrictName { get; set; }

        [MaxLength(10), Comment("รหัสไปรษณีย์ที่อยู่ปัจจุบัน")]
        public string? CurrentZipCode { get; set; }



        [Comment("คู่สมรส")]
        public bool? Marry { get; set; }

        [Comment("Id คำนำหน้าชื่อคู่สมรส")]
        public Guid? MarryPrefixId { get; set; }

        [Comment("คำนำหน้าชื่อคู่สมรส")]
        public string? MarryPrefixName { get; set; }

        [MaxLength(100), Comment("ชื่อจริงคู่สมรส")]
        public string? MarryFirstName { get; set; }

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

        [MaxLength(200), Comment("อาชีพคู่สมรส")]
        public string? MarryOccupation { get; set; }

        [MaxLength(100), Comment("สัญชาติคู่สมรส")]
        public string? MarryNationality { get; set; }

        [Comment("Id คำนำหน้าชื่อบิดา")]
        public Guid? FatherPrefixId { get; set; }

        [Comment("คำนำหน้าชื่อบิดา")]
        public string? FatherPrefixName { get; set; }

        [MaxLength(100), Comment("ชื่อจริงบิดา")]
        public string? FatherFirstName { get; set; }

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

        [MaxLength(200), Comment("อาชีพบิดา")]
        public string? FatherOccupation { get; set; }

        [MaxLength(100), Comment("สัญชาติบิดา")]
        public string? FatherNationality { get; set; }

        [Comment("Id คำนำหน้าชื่อมารดา")]
        public Guid? MotherPrefixId { get; set; }

        [Comment("คำนำหน้าชื่อมารดา")]
        public string? MotherPrefixName { get; set; }

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

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

        [MaxLength(200), Comment("อาชีพมารดา")]
        public string? MotherOccupation { get; set; }

        [MaxLength(100), Comment("สัญชาติมารดา")]
        public string? MotherNationality { get; set; }

        [Comment("ตำแหน่งปัจจุบัน ชื่อตำแหน่ง")]
        public string? OccupationOrg { get; set; }
        [Comment("ตำแหน่งปัจจุบัน กอง")]
        public string? OccupationPile { get; set; }
        [Comment("ตำแหน่งปัจจุบัน กลุ่ม/ฝ่าย")]
        public string? OccupationGroup { get; set; }
        [Comment("ตำแหน่งปัจจุบัน เงินเดือน")]
        public double? OccupationSalary { get; set; }
        [Comment("ตำแหน่งปัจจุบัน สังกัด")]
        public string? OccupationPosition { get; set; }
        [Comment("ตำแหน่งปัจจุบัน ประเภทราชการ")]
        public string? OccupationPositionType { get; set; }

        [MaxLength(20), Comment("ตำแหน่งปัจจุบัน เบอร์โทรที่ทำงาน")]
        public string? OccupationTelephone { get; set; }

        [Comment("เหตุผลการไม่อนุมัติ")]
        public string? RejectDetail { get; set; }

        [Comment("ผลสมัครสอบ")]
        public string? Pass { get; set; }

        [Comment("หมายเหตุ")]
        public string? ExamReason { get; set; }

        [Comment("คะแนนความพึงพอใจ")]
        public int? ReviewPoint { get; set; }

        [Comment("ข้อแนะนำ")]
        public string? Review { get; set; }

        [MaxLength(40), Comment("วันที่สมัคร")]
        public DateTime? RegisterDate { get; set; }

        [Comment("วันที่ชำระเงิน")]
        public DateTime? PaymentDate { get; set; }



        [Comment("Id คำนำหน้า บุคคลที่สามารถติดต่อได้")]
        public Guid? ContactPrefixId { get; set; }

        [Comment("คำนำหน้า บุคคลที่สามารถติดต่อได้")]
        public string? ContactPrefixName { get; set; }

        [Comment("ชื่อ บุคคลที่สามารถติดต่อได้")]
        public string? ContactFirstname { get; set; }

        [Comment("สกุล บุคคลที่สามารถติดต่อได้")]
        public string? ContactLastname { get; set; }

        [Comment("เกี่ยวข้องเป็น บุคคลที่สามารถติดต่อได้")]
        public string? ContactRelations { get; set; }

        [Comment("โทรศัพท์ บุคคลที่สามารถติดต่อได้")]
        public string? ContactTel { get; set; }

        [Comment("สถานะ เปิดให้ดาวน์โหลดใบสมัคร แสดงสถานที่สอบ และเลขประจำตัวสอบ")]
        public bool IsShowExamInfo { get; set; } = false;
        public virtual List<Education> Educations { get; set; } = new List<Education>();
        public virtual List<Career> Careers { get; set; } = new List<Career>();

    }
}
