using AutoMapper.Execution;
using OASystem.Domain.Dtos.System;
using OASystem.Domain.ViewModels;
using OASystem.Domain.ViewModels.CRM;
using Org.BouncyCastle.Asn1.Ocsp;
using Org.BouncyCastle.Asn1.X9;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using static Google.Protobuf.Reflection.SourceCodeInfo.Types;

namespace OASystem.Domain.Dtos.CRM
{
    public class NewClientDataQueryDto:DtoBase
    {
        public int OperationUserId { get; set; }

        /// <summary>
        /// 联系人
        /// </summary>
        public string Contact { get; set; }

        /// <summary>
        /// 地区
        /// </summary>
        public string Location { get; set; }

        /// <summary>
        /// 单位
        /// </summary>
        public string Client { get; set; }

        /// <summary>
        /// 负责人
        /// </summary>
        public string Userid { get; set; }

        /// <summary>
        /// 客户级别(地市州)
        /// </summary>
        public int Lvlid { get; set; }

        /// <summary>
        /// 业务分类
        /// </summary>
        public string Business { get; set; }

        /// <summary>
        /// 省域
        /// </summary>
        public int Range { get; set; }

        /// <summary>
        /// 客户类别
        /// </summary>
        public int Category { get; set; }

    }

    public class NewClientDataExcelDownloadDto : NewClientDataQueryDto
    {
        public int PageId { get; set; }
    }

    public class NewClientDataRecordInitDto : UserPageFuncDtoBase
    { }

    public class NewClientDataRecordDto : UserPageFuncDtoBase
    {
        public int PageIndex { get; set; } = 1;

        public int PageSize { get; set; } = 10;

        /// <summary>
        /// 操作类型 全部不传值、多个逗号隔开 
        /// NoOperation, List, Details, Add, Edit, Del, Audit, Upload, Download, BatchAssignment, Login
        /// </summary>
        public string OpTypeLabel { get; set; }

        /// <summary>
        /// 操作用户  userId=21 时传值
        /// 全部不传值、多个逗号隔开
        /// 21, 22, 23
        /// </summary>
        public string OpUserLabel { get; set; }

        public string BeginTime { get; set; }
        public string EndTime { get; set; }
    }

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

        /// <summary>
        /// 编号
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 序号
        /// </summary>
        public int Number { get; set; }

        /// <summary>
        /// 地市州Id
        /// </summary>
        public int Lvlid { get; set; }

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

        /// <summary>
        /// 权重
        /// </summary>
        public string Weight { get; set; }

        /// <summary>
        /// 客户单位简写
        /// </summary>
        public string Clientshort { get; set; }

        /// <summary>
        /// 联系人
        /// </summary>
        public string Contact { get; set; }

        /// <summary>
        /// 联系人性别
        /// </summary>
        public int Gender { get; set; }

        /// <summary>
        /// 护照
        /// </summary>
        public string Passport { get; set; }

        /// <summary>
        /// 护照日期
        /// </summary>
        public DateTime PassportDate { get; set; }

        /// <summary>
        /// 职位
        /// </summary>
        public string Job { get; set; }

        /// <summary>
        /// 联系手机号
        /// </summary>
        public string Telephone { get; set; }

        /// <summary>
        /// 联系座机号
        /// </summary>
        public string Phone { get; set; }

        /// <summary>
        /// 邮件
        /// </summary>
        public string Email { get; set; }

        /// <summary>
        /// 所属区域(所在城市)
        /// </summary>
        public string Location { get; set; }

        /// <summary>
        /// 地址
        /// </summary>
        public string Address { get; set; }

        /// <summary>
        /// 生日
        /// </summary>
        public string Birthday { get; set; }

        /// <summary>
        /// 其他信息
        /// </summary>
        public string Otherinfo { get; set; }

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

        /// <summary>
        /// 分类
        /// </summary>
        public int Category { get; set; }

        /// <summary>
        /// 预计出团
        /// </summary>
        public int Predele { get; set; }

        /// <summary>
        /// 已出团
        /// </summary>
        public int FinlishedDele { get; set; }
        /// <summary>
        /// 创建者Id
        /// </summary>
        public int CreateUserId { get; set; }
        /// <summary>
        /// 备注
        /// </summary>
        public string Remark { get; set; }

        /// <summary>
        /// 负责人
        /// </summary>
        public List<int> AscribedUser { get; set; }
        /// <summary>
        /// 业务归属
        /// </summary>
        public List<int> AscribedDepartment { get; set; }

    }

    /// <summary>
    /// 详情 Dto
    /// </summary>
    public class NewClientDataDetailsDto:PortDtoBase
    {
        public int UserId { get; set; }
        public int Id { get; set; }
    }
    /// <summary>
    /// 批量指派
    /// </summary>
    public class BatchAssignmentDto : PortDtoBase
    {
        public int UserId { get; set; }

        /// <summary>
        /// 客户资料表Id集合
        /// </summary>
        public List<int>? ClientDataIdItem { get; set; }

        /// <summary>
        /// 用户Id集合
        /// </summary>
        public List<int>? UserIdItem { get; set; }
    }

    public class MarketCustomerInitDto : PortDtoBase
    {
       public int UserId { get; set;}
    }

    public class QueryClientTypeDto
    {
        public List<int> SetDataIdArr { get; set; }
    }

    public class MCRLvSettingDto
    {
        public List<int> SetDataIdArr { get; set; }
    }

    public class RemakeComparer : IComparer
    {
        public int Compare(object x, object y)
        {
            // 使用反射获取remake属性的值
            PropertyInfo xProperty = x.GetType().GetProperty("Remark");
            PropertyInfo yProperty = y.GetType().GetProperty("Remark");

            if (xProperty == null || yProperty == null)
            {
                throw new ArgumentException("Both objects must have a 'remake' property.");
            }

            string xRemake = xProperty.GetValue(x, null) as string;
            string yRemake = yProperty.GetValue(y, null) as string;

            // 使用TryParse安全地将字符串转换为整数
            bool xIsInt = int.TryParse(xRemake, out int xValue);
            bool yIsInt = int.TryParse(yRemake, out int yValue);

            // 如果x是整数而y不是,则x应该排在y前面
            if (xIsInt && !yIsInt)
                return -1;
            // 如果y是整数而x不是,则x应该排在后面
            else if (!xIsInt && yIsInt)
                return 1;
            // 如果x和y都是整数,则比较它们的值
            else if (xIsInt && yIsInt)
                return xValue.CompareTo(yValue);
            // 如果x和y都不是整数,则认为它们相等
            else
                return 0;
        }
    }

    
}