using FluentValidation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace OASystem.Domain.Dtos.System
{
    /// <summary>
    /// 员工表查询dto
    /// </summary>
    public class UserDto : DtoBase
    {
        /// <summary>
        /// 公司Id
        /// </summary>
        public int CompanyId { get; set; }
        /// <summary>
        /// 部门Id
        /// </summary>
        public int DepId { get;set; }

        /// <summary>
        /// 岗位Id
        /// </summary>
        public int JobPostId { get; set; }
    }
    /// <summary>
    /// 修改用户信息
    /// </summary>
    public class EditUserDto
    {
        /// <summary>
        /// 当前用户ID
        /// </summary>
        public int CurrUserId { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 工号
        /// </summary>
        public string Number { get; set; }
        /// <summary>
        /// 公司Id
        /// </summary>
        public int CompanyId { get; set; }
        /// <summary>
        /// 部门Id
        /// </summary>
        public int DepId { get; set; }
        /// <summary>
        /// 岗位Id
        /// </summary>
        public int JobPostId { get; set; }
        /// <summary>
        /// 分机号
        /// </summary>
        public string Ext { get; set; }
        /// <summary>
        /// 试用期
        /// </summary>
        public string UsePeriod { get; set; }
        /// <summary>
        /// 人事审核 0未审核(初始状态) 1 已通过(可用)2已拒绝
        /// </summary>
        //public int HrAudit { get; set; }
    }

    /// <summary>
    /// 修改个人信息
    /// </summary>
    public class EditMyUserDto
    {
        /// <summary>
        /// 用户Id
        /// </summary>
        public int Id { get; set; }
        /// <summary>
        /// 中文姓名
        /// </summary>
        public string CnName { get; set; }
        /// <summary>
        /// 英文姓名
        /// </summary>
        public string EnName { get; set; }

        /// <summary>
        /// 性别0 男1 女  2 未设置
        /// </summary>
        public int Sex { get; set; }

        private string phone;
        /// <summary>
        /// 手机号
        /// </summary>
        public string Phone
        {
            get
            {
                return phone;
            }
            set
            {
                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
                {
                    phone = value;
                }
                else
                {
                    phone = "";
                }
            }
        }
        private string urgentPhone;
        /// <summary>
        /// 紧急联系人 手机号
        /// </summary>
        public string UrgentPhone
        {
            get { return urgentPhone; }
            set
            {
                if (Regex.IsMatch(value, @"^[1]+[2,3,4,5,6,7,8,9]+\d{9}"))
                {
                    urgentPhone = value;
                }
                else
                {
                    urgentPhone = "";
                }
            }
        }
        private string email;
        /// <summary>
        /// 邮箱
        /// </summary>
        public string Email
        {
            get { return email; }
            set
            {
                if (Regex.IsMatch(value, @"^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(com|cn|net)$"))
                {
                    email = value;
                }
                else
                {
                    email = "";
                }
            }
        }
        /// <summary>
        /// 住址
        /// </summary>
        public string Address { get; set; }
        /// <summary>
        /// 入职时间
        /// </summary>
        public DateTime Edate { get; set; }
        /// <summary>
        /// 生日
        /// </summary>
        public DateTime Birthday { get; set; }
        /// <summary>
        /// 身份证号码
        /// </summary>
        public string IDCard { get; set; }

        /// <summary>
        /// 毕业学校
        /// </summary>
        public string GraduateInstitutions { get; set; }
        /// <summary>
        /// 专业
        /// </summary>
        public string Professional { get; set; }
        /// <summary>
        /// 学历
        /// </summary>
        public int Education { get; set; }
        /// <summary>
        /// 学历类型
        /// </summary>
        public int TheOrAdultEducation { get; set; }
        /// <summary>
        /// 婚姻状态
        /// </summary>
        public string MaritalStatus { get; set; }
        /// <summary>
        /// 家庭地址
        /// </summary>
        public string HomeAddress { get; set; }

        /// <summary>
        /// 工作经历
        /// </summary>
        public string WorkExperience { get; set; }
        /// <summary>
        /// 证书上传
        /// </summary>
        public string Certificate { get; set; }

    }

    /// <summary>
    /// 删除用户信息
    /// 即为离职
    /// </summary>
    public class UserDelDto : PortDtoBase
    {
        /// <summary>
        /// 数据Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 操作人Id
        /// </summary>
        public int OperateUserId { get; set; }
    }

    public class PersonnelAuditDto
    {
        public int UserId { get; set; }

        /// <summary>
        /// 数据Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 审核是否通过 1:通过 2拒绝
        /// </summary>
        public int IsAudit { get; set; }
    }

    public class QueryUserByDepartDto
    {
        public int DepartId { get; set; }
    }

    public class UserInfoDto : PortDtoBase
    {
        public int Id { get; set; }

    }

    public class EditUserInfoDto
    {
        public int CurrUserId { get; set; }

        public int Id { get; set; }

        /// <summary>
        /// 中文姓名
        /// </summary>
        public string CnName { get; set; }
        /// <summary>
        /// 英文姓名
        /// </summary>
        public string EnName { get; set; }
        /// <summary>
        /// 工号
        /// </summary>
        public string Number { get; set; }
        /// <summary>
        /// 公司Id
        /// </summary>
        public int CompanyId { get; set; }
        /// <summary>
        /// 部门Id
        /// </summary>
        public int DepId { get; set; }
        /// <summary>
        /// 岗位Id
        /// </summary>
        public int JobPostId { get; set; }
        /// <summary>
        /// 密码
        /// </summary>
        public string Password { get; set; }
        /// <summary>
        /// 确认密码
        /// </summary>
        public string ComfirmPassword { get; set; }

        /// <summary>
        /// 性别0 男 1 女  2 未设置
        /// </summary>
        public int Sex { get; set; }
        /// <summary>
        /// 分机号
        /// </summary>
        public string Ext { get; set; }
        /// <summary>
        /// 手机号
        /// </summary>
        public string Phone { get; set; }
        /// <summary>
        /// 紧急联系人 手机号
        /// </summary>
        public string UrgentPhone { get; set; }
        /// <summary>
        /// 邮箱
        /// </summary>
        public string Email { get; set; }
        /// <summary>
        /// 住址
        /// </summary>
        public string Address { get; set; }
        /// <summary>
        /// 入职时间
        /// </summary>
        public string? Edate { get; set; } = null;
        ///// <summary>
        ///// 离职时间
        ///// </summary>
        //public DateTime Rdate { get; set; }
        ///// <summary>
        ///// 工龄
        ///// </summary>
        //public int Seniority { get; set; }
        ///// <summary>
        ///// 生日
        ///// </summary> 
        //public string? Birthday { get; set; } = null;
        /// <summary>
        /// 身份证号码
        /// </summary>
        public string IDCard { get; set; }
        ///// <summary>
        ///// 开始工作时
        ///// </summary>
        //public string? StartWorkDate { get; set; }= null;
        /// <summary>
        /// 毕业学校
        /// </summary>
        public string GraduateInstitutions { get; set; }
        /// <summary>
        /// 专业
        /// </summary>
        public string Professional { get; set; }

        /// <summary>
        /// 学历
        /// 0 未设置 1 小学、2 初中、3 高中、4 专科、5 本科、6 研究生
        /// </summary>
        public int Education { get; set; }
        /// <summary>
        /// 学历类型
        ///0 未设置 1 成教 2 统招 3 留学
        /// </summary>
        public int TheOrAdultEducation { get; set; }
        /// <summary>
        /// 婚姻状态
        /// </summary>
        public string MaritalStatus { get; set; }
        /// <summary>
        /// 家庭地址
        /// </summary>
        public string HomeAddress { get; set; }
        /// <summary>
        /// 试用期
        /// </summary>
        public string UsePeriod { get; set; }
        /// <summary>
        /// 工作经历
        /// </summary>
        public string WorkExperience { get; set; }
        /// <summary>
        /// 证书上传
        /// </summary>
        public string Certificate { get; set; }
        ///// <summary>
        ///// 企微Id
        ///// </summary>
        //public string QiyeChatUserId { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }
    }

    public class EditUserInfoDtoValidator : AbstractValidator<EditUserInfoDto>
    {
        public EditUserInfoDtoValidator()
        {
            //RuleFor(x => x.CurrUserId).LessThan(1).WithMessage("暂无修改权限!");
            RuleFor(x => x.CnName).NotEmpty().WithMessage("姓名不能为空!");
            RuleFor(x => x.EnName).NotEmpty().WithMessage("英文名不能为空!");
            RuleFor(x => x.Number).NotEmpty().WithMessage("工号不能为空!");
            RuleFor(x => x.Password).NotEmpty().WithMessage("密码不能为空!")
                                    .Length(6, 20).WithMessage("密码长度必须在6到20个字符之间!");
            RuleFor(x => x.ComfirmPassword).NotEmpty().WithMessage("确认密码不能为空!")
                                           .Equal(x => x.Password).WithMessage("两次密码输入不一致!");
            RuleFor(x => x.Sex).InclusiveBetween(0,2).WithMessage("性别:0 男;1 女;2 未设置;");
            RuleFor(x => x.Phone).NotEmpty().WithMessage("手机号不能为空!");
            RuleFor(x => x.UrgentPhone).NotEmpty().WithMessage("手机号不能为空!");
            RuleFor(x => x.Email).NotEmpty().WithMessage("邮箱不能为空!");
            RuleFor(x => x.Address).NotEmpty().WithMessage("住址不能为空!");
            //RuleFor(x => x.Edate).NotEmpty().WithMessage("入职时间不能为空!");
            //RuleFor(x => x.Birthday).NotEmpty().WithMessage("生日不能为空!");
            RuleFor(x => x.IDCard).NotEmpty().WithMessage("身份证号码不能为空!");
            RuleFor(x => x.TheOrAdultEducation).InclusiveBetween(0, 3).WithMessage("学历类型 0 未设置 1 成教 2 统招 3 留学");
            RuleFor(x => x.Education).InclusiveBetween(0, 6).WithMessage("学历 0 未设置 1 小学、2 初中、3 高中、4 专科、5 本科、6 研究生");
        }
    }
}