using FluentValidation;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OASystem.Domain.Dtos.Groups
{
    /// <summary>
    /// 获取团组列表 请求实体类
    /// </summary>
    public class GroupListDto : DtoBase
    {
    }

    /// <summary>
    /// 获取团组列表 Page 请求实体类
    /// </summary>
    public class GroupPageListDto : UserPageFuncDtoBase
    {
        public int PageIndex { get; set; } = 1;
        public int PageSize { get; set; } = 10;

        /// <summary>
        /// 是否操作完成 
        /// -1 全部 0否 1是
        /// </summary>
        public int IsSure { get; set; }

        /// <summary>
        /// 搜索条件
        /// 团组类型/团队名称/客户名称/客户单位/接团操作人
        /// </summary>
        public string? SearchCriteria { get; set; }
    }

    /// <summary>
    /// 获取团组singe Share 请求实体类
    /// </summary>
    public class ShareGroupInfoDto : PortDtoBase
    {
        /// <summary>
        /// 团组Id 
        /// </summary>
        public int Id { get; set; }
    }

    /// <summary>
    /// 获取团组singe 请求实体类
    /// </summary>
    public class GroupInfoDto : DtoBase
    {
        /// <summary>
        /// 团组Id 
        /// </summary>
        public int Id { get; set; }
    }

    /// <summary>
    /// 团组信息 操作
    /// 请求dto
    /// </summary>
    public class GroupOperationDto : DtoBase
    {
        /// <summary>
        /// 操作状态
        /// 1 添加 
        /// 2 修改 
        /// 3 删除
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 团组Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }

        /// <summary>
        /// 销售报价号
        /// </summary>
        public string SalesQuoteNo { get; set; }

        ///// <summary>
        ///// 团组号
        ///// </summary>
        //public string TeamNo { get; set; }

        /// <summary>
        /// 团组操作人
        /// </summary>
        public int JietuanOperator { get; set; }

        /// <summary>
        /// 客户级别
        /// setData Id
        /// </summary>
        public int TeamLevSId { get; set; }

        /// <summary>
        /// 团组类型 
        /// setData Id
        /// </summary>
        public int TeamDid { get; set; }

        /// <summary>
        /// 团组名称
        /// </summary>
        public string TeamName { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string ClientName { get; set; }

        /// <summary>
        /// 客户单位
        /// </summary>
        public string ClientUnit { get; set; }

        /// <summary>
        /// 出访国家
        /// 多个国家 | 隔开 eg:韩国|日本
        /// </summary>
        public string VisitCountry { get; set; }

        /// <summary>
        /// 出访时间
        /// </summary>
        public string VisitDate { get; set; }

        /// <summary>
        /// 出访天数
        /// </summary>
        public int VisitDays { get; set; }

        /// <summary>
        /// 出访人数
        /// </summary>
        public int VisitPNumber { get; set; }

        /// <summary>
        /// 合同时间
        /// </summary>
        public string TontractTime { get; set; }

        /// <summary>
        /// 是否用于投标
        /// 0 是 1 否
        /// </summary>
        public int IsBid { get; set; }

        /// <summary>
        /// 预付期限
        /// </summary>
        public int PayDay { get; set; }

        /// <summary>
        /// 支付款项(预付)
        /// </summary>
        public decimal PaymentMoney { get; set; }

        /// <summary>
        /// 出访目的
        /// </summary>
        public string VisitPurpose { get; set; }

        /// <summary>
        /// 特殊需求
        /// </summary>
        public string SpecialNeeds { get; set; }

        /// <summary>
        /// 其他需求
        /// </summary>
        public string OtherNeeds { get; set; }

        /// <summary>
        /// 出国任务审批部门名称
        /// </summary>
        public string CGRWSPBMMC { get; set; }

        /// <summary>
        /// 出国任务审批文号
        /// </summary>
        public string CGRWSPWH { get; set; }

        /// <summary>
        /// 政治审查部门名称
        /// </summary>
        public string ZZSCBMMC { get; set; }

        /// <summary>
        /// 政治审查部门审批文号
        /// </summary>
        public string ZZSCSPWH { get; set; }

        /// <summary>
        /// 手机号
        /// </summary>
        public string TellPhone { get; set; }

        /// <summary>
        /// 微信号
        /// </summary>
        public string WeChatNo { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// OP提成等级
        /// </summary>
        public int OpRoyaltyLv { get; set; }
        /// <summary>
        /// 等级说明
        /// </summary>
        public string opRoyaltyRemark { get; set; }

        /// <summary>
        ///  公务需求
        /// </summary>
        public string Officialneeds { get; set; }
    }

    /// <summary>
    /// 团组信息删除
    /// </summary>
    public class GroupDelDto : DtoBase
    {
        /// <summary>
        /// 团组Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }
    }

    /// <summary>
    /// 团组名称
    /// </summary>
    public class GroupNameDto : PortDtoBase
    {

    }

    public class GroupNameScreenDto : DtoBase
    {
        public string groupName { get; set; } = "";

        public int userId { get; set; } = -1;
    }

    #region GroupNameScreenDto 验证

    public class GroupNameScreenDtoFoaValidator : AbstractValidator<GroupNameScreenDto>
    {
        public GroupNameScreenDtoFoaValidator() {
            RuleFor(it => it.PortType)
                .NotNull()
                .NotEmpty()
                .InclusiveBetween(1, 3)
                .WithMessage(MsgTips.Port);
        }
    }

    #endregion

    /// <summary>
    /// 
    /// </summary>
    public class GroupListByCTableAndUserIdDto : DtoBase
    {
        /// <summary>
        /// 业务类型Id
        /// 酒店预定,机票预定,等等
        /// 76	酒店预订 77	行程           79  车/导游地接
        /// 80	签证     81	邀请/公务活动  82  团组客户保险
        /// 85	机票预订 98	其他款项       751 酒店早餐
        /// </summary>
        public int CTable { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }

        public string TeamName { get; set; } = "";
    }


    /// <summary>
    /// 确认出团dto
    /// </summary>
    public class ConfirmationGroupDto : PortDtoBase
    {
        /// <summary>
        /// 团组Id
        /// </summary>
        public int GroupId { get; set; }

        /// <summary>
        /// 团组信息操作人
        /// </summary>
        public int GroupsOperator { get; set; }

    }


    /// <summary>
    /// 根据团组ID获取签证人员请
    /// 求实体类
    /// </summary>
    public class ClientByGroupIdDto : DtoBase
    {
        /// <summary>
        /// 团组Id
        /// </summary>
        public int GroupId { get; set; }
    }

    public class GroupListByWhere : DtoBase
    {


        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }

        /// <summary>
        /// 页面Id
        /// </summary>
        public int PageId { get; set; }

        /// <summary>
        /// 团组类型id
        /// </summary>
        public int TeamDid { get; set; }

        /// <summary>
        /// 团组状态
        /// </summary>
        public int IsSure { get; set; }

        /// <summary>
        /// 团组名称
        /// </summary>
        public string TeamName { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string ClientName { get; set; }

        /// <summary>
        /// 客户单位
        /// </summary>
        public string ClientUnit { get; set; }

        /// <summary>
        /// 出访时间
        /// </summary>
        public string visitDataTime { get; set; }

    }

    public class GroupProcessOperationDto : PortDtoBase
    {
        /// <summary>
        /// 操作状态
        /// 1 添加 
        /// 2 修改 
        /// 3 删除
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 团组Id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 用户Id
        /// </summary>
        public int UserId { get; set; }

        /// <summary>
        /// 销售报价号
        /// </summary>
        public string SalesQuoteNo { get; set; }

        ///// <summary>
        ///// 团组号
        ///// </summary>
        //public string TeamNo { get; set; }

        /// <summary>
        /// 团组操作人
        /// </summary>
        public int JietuanOperator { get; set; }

        /// <summary>
        /// 客户级别
        /// setData Id
        /// </summary>
        public int TeamLevSId { get; set; }

        /// <summary>
        /// 团组类型 
        /// setData Id
        /// </summary>
        public int TeamDid { get; set; }

        /// <summary>
        /// 团组名称
        /// </summary>
        public string TeamName { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string ClientName { get; set; }

        /// <summary>
        /// 客户单位
        /// </summary>
        public string ClientUnit { get; set; }

        /// <summary>
        /// 出访国家
        /// 多个国家 | 隔开 eg:韩国|日本
        /// </summary>
        public string VisitCountry { get; set; }

        /// <summary>
        /// 出访时间
        /// </summary>
        public string VisitDate { get; set; }

        /// <summary>
        /// 出访天数
        /// </summary>
        public int VisitDays { get; set; }

        /// <summary>
        /// 出访人数
        /// </summary>
        public int VisitPNumber { get; set; }

        /// <summary>
        /// 合同时间
        /// </summary>
        public string TontractTime { get; set; }

        /// <summary>
        /// 预付期限
        /// </summary>
        public int PayDay { get; set; }

        /// <summary>
        /// 支付款项(预付)
        /// </summary>
        public decimal PaymentMoney { get; set; }

        /// <summary>
        /// 出访目的
        /// </summary>
        public string VisitPurpose { get; set; }

        /// <summary>
        /// 特殊需求
        /// </summary>
        public string SpecialNeeds { get; set; }

        /// <summary>
        /// 其他需求
        /// </summary>
        public string OtherNeeds { get; set; }

        /// <summary>
        /// 出国任务审批部门名称
        /// </summary>
        public string CGRWSPBMMC { get; set; }

        /// <summary>
        /// 出国任务审批文号
        /// </summary>
        public string CGRWSPWH { get; set; }

        /// <summary>
        /// 政治审查部门名称
        /// </summary>
        public string ZZSCBMMC { get; set; }

        /// <summary>
        /// 政治审查部门审批文号
        /// </summary>
        public string ZZSCSPWH { get; set; }

        /// <summary>
        /// 手机号
        /// </summary>
        public string TellPhone { get; set; }

        /// <summary>
        /// 微信号
        /// </summary>
        public string WeChatNo { get; set; }

        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// OP提成等级
        /// </summary>
        public int OpRoyaltyLv { get; set; }
        /// <summary>
        /// 等级说明
        /// </summary>
        public string opRoyaltyRemark { get; set; }

        /// <summary>
        ///  公务需求
        /// </summary>
        public string Officialneeds { get; set; }

        /// <summary>
        /// 接团客户名单
        /// AddMultiple Infos
        /// </summary>
        public List<TourClientListProcessInfo> TourClientListInfos { get; set; }
    }

}