using Lada.Framework.Data.Domains.BaseEntities;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace Lada.Framework.Data.Domains.Hr
{
    public class Candidate : BaseEntityWithKey<int>
    {
        /// <summary>
        /// Họ và tên
        /// </summary>
        [MaxLength(128)]
        public string FullName { get; set; }

        /// <summary>
        /// Số điện thoại
        /// </summary>
        [MaxLength(128)]
        public string PhoneNumber { get; set; }

        /// <summary>
        /// Năm sinh
        /// </summary>
        [MaxLength(64)]
        public string YearOfBirth { get; set; }

        /// <summary>
        /// Địa chỉ hiện tại
        /// </summary>
        [MaxLength(512)]
        public string Address { get; set; }

        /// <summary>
        /// Giới thiệu về bản thân
        /// </summary>
        [MaxLength(1024)]
        public string Introduction { get; set; }

        /// <summary>
        /// Trạng thái hồ sơ
        /// </summary>
        public CandidateStatus Status { get; set; } = CandidateStatus.New;

        /// <summary>
        /// Nội dung đánh dấu trạng thái
        /// </summary>
        [MaxLength(512)]
        public string StatusContent { get; set; }

        /// <summary>
        /// Thời gian hẹn phỏng vấn
        /// </summary>
        public DateTimeOffset? AppointmentTime { get; set; }

        [MaxLength(512)]
        public string Note { get; set; }

        public int? JobId { get; set; }

        public virtual JobPost Job { get; set; }

        #region Nguồn ứng viên
        /// <summary>
        /// Nguồn ứng viên
        /// </summary>
        public CandidateSource Source { get; set; }
        #endregion

        #region CV Information
        /// <summary>
        /// Tên file CV gốc
        /// </summary>
        [MaxLength(256)]
        public string CvFileName { get; set; } = "";

        /// <summary>
        /// Đường dẫn lưu trữ CV trong hệ thống
        /// </summary>
        [MaxLength(512)]
        public string CvFilePath { get; set; } = "";

        /// <summary>
        /// Kích thước file CV (bytes)
        /// </summary>
        public long CvFileSize { get; set; } = 0;

        /// <summary>
        /// Loại file CV (pdf, doc, docx, jpg, png, etc.)
        /// </summary>
        [MaxLength(10)]
        public string CvFileType { get; set; } = "";

        /// <summary>
        /// URL để truy cập CV
        /// </summary>
        [MaxLength(1024)]
        public string CvFileUrl { get; set; } = "";

        /// <summary>
        /// Thời gian upload CV
        /// </summary>
        public DateTimeOffset? CvUploadedTime { get; set; }
        #endregion

    }

    public enum CandidateStatus
    {
        [Description("Mới")]
        New = 1,
        [Description("Liên hệ lại")]
        ReConnect = 2,
        [Description("Phù hợp")]
        Agreeably = 3,
        [Description("Hẹn phỏng vấn")]
        WaitForInterview = 4,
        [Description("Gửi đề nghị")]
        SendOffer = 5,
        [Description("Nhận việc")]
        Onboard = 6,
        [Description("Từ chối")]
        Rejected = 7
    }
    public enum CandidateSource
    {
        [Description("Website")]
        Website = 1,
        [Description("Facebook")]
        Facebook = 2,
        [Description("Gọi điện trực tiếp")]
        Call = 3,
        [Description("Được giới thiệu")]
        Introduced = 4
    }
}
