using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.AesEncryption;
using OASystem.Domain.Dtos.Financial;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Entities.Customer;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Infrastructure.Repositories.System;
namespace OASystem.Infrastructure.Repositories.Groups
{
    /// 
    /// 接团信息
    /// 
    public class DelegationInfoRepository : BaseRepository
    {
        private readonly SetDataRepository _setDataRepository;
        private readonly UsersRepository _usersRepository;
        private readonly TaskAssignmentRepository _taskAssignmentRep;
        private readonly IMapper _mapper;
        //private readonly TeamRateRepository _teamRateRep;
        //public readonly Logs _logs;
        public DelegationInfoRepository(SqlSugarClient sqlSugar, SetDataRepository setDataRepository, UsersRepository usersRepository,
            TaskAssignmentRepository taskAssignmentRep, IMapper mapper)
            : base(sqlSugar)
        {
            _setDataRepository = setDataRepository;
            _usersRepository = usersRepository;
            _taskAssignmentRep = taskAssignmentRep;
            _mapper = mapper;
            //_teamRateRep = teamRateRep;
        }
        #region 团组信息 团组详情共享Api
        /// 
        /// 查询团组简略详情列表
        /// Page 根据Ctable And User 返回可操作的团
        /// 
        /// 
        /// 
        public async Task ListByCTableAndUserId(GroupListByCTableAndUserIdDto dto)
        {
            var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
            if (dto.CTable < 1)
            {
                view.Msg = MsgTips.UserId;
                return view;
            }
            if (dto.CTable < 1)
            {
                view.Msg = "请输入正确的CTable Id !76 酒店预订
77 行程
79 车/导游地接
80 签证
81 邀请/公务活动
82 团组客户保险
85 机票预订
98 其他款项
751 酒店早餐";
                return view;
            }
            if (dto.PortType == 1 || dto.PortType == 2 || dto.PortType == 3)
            {
                //2025-02-17 更改团组列表排序功能 按照团出访时间排序(降序)
                string sql = string.Format(@"Select row_number() over(order by di.VisitStartDate Desc) as Row_Number, 
									         di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate,
									         di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime
									         From Grp_GroupsTaskAssignment gta
									         Inner Join Grp_DelegationInfo di On gta.DIId = di.Id
									         Where gta.IsDel = 0 And di.IsDel = 0 And gta.IsEnable = 1
									         And gta.CTId = {0} And gta.UId = {1}", dto.CTable, dto.UserId);
                if (!string.IsNullOrEmpty(dto.TeamName))
                {
                    sql = string.Format($"{sql} And di.TeamName Like '%{dto.TeamName}%'");
                }
                //去重
                sql = $"{sql} GROUP BY di.Id,di.TeamName,di.TourCode,di.ClientName,di.VisitCountry,di.VisitStartDate,di.VisitEndDate,di.VisitDays,di.VisitPNumber,di.CreateTime";
                RefAsync total = 0;//REF和OUT不支持异步,想要真的异步这是最优解
                var data = await _sqlSugar.SqlQueryable(sql).ToPageListAsync(dto.PageIndex, dto.PageSize, total); //ToPageAsync
                foreach (var item in data)
                {
                    item.VisitStartDate = item.VisitStartDate == "" ? "" : Convert.ToDateTime(item.VisitStartDate).ToString("yyyy-MM-dd");
                    item.VisitEndDate = item.VisitEndDate == "" ? "" : Convert.ToDateTime(item.VisitEndDate).ToString("yyyy-MM-dd");
                    item.VisitCountry = !string.IsNullOrEmpty(item.VisitCountry) && item.VisitCountry.Contains("|") ? item.VisitCountry.Replace("|", "、") : item.VisitCountry;
                }
                view.Code = StatusCodes.Status200OK;
                view.Msg = "操作成功!";
                view.Data = data;
                view.Count = total;
                return view;
            }
            else
            {
                view.Msg = "请输入正确的PortType 1 Web 2 Android 3 IOS ";
                return view;
            }
        }
        /// 
        /// 团组信息 团组预览详情共享Api
        /// 
        /// 
        /// 
        public async Task PostShareGroupInfo(ShareGroupInfoDto dto)
        {
            var view = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
            string sql = string.Format(@"Select Id,TeamName,TourCode,ClientName,VisitCountry,VisitStartDate,VisitEndDate,VisitDays,VisitPNumber 
                                             From Grp_DelegationInfo Where Id = {0} And IsDel = 0", dto.Id);
            if (dto.PortType == 1) //Web
            {
                var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync();
                if (_DelegationInfo != null)
                {
                    _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
                }
                else
                {
                    view.Msg = "暂无该团组信息";
                    return view;
                }
                view.Data = _DelegationInfo;
            }
            else if (dto.PortType == 2 || dto.PortType == 3) //IOS Or Android
            {
                var _DelegationInfo = await _sqlSugar.SqlQueryable(sql).FirstAsync();
                if (_DelegationInfo != null)
                {
                    _DelegationInfo.VisitCountry = FormartTeamName(_DelegationInfo.VisitCountry);
                    view.Data = _DelegationInfo;
                }
                else
                {
                    view.Msg = "暂无该团组信息";
                    return view;
                }
                view.Data = _DelegationInfo;
            }
            else
            {
                view.Msg = "请输入正确的端口号。1 Web 2 Android 3 IOS";
                return view;
            }
            view.Code = StatusCodes.Status200OK;
            view.Msg = "成功!";
            return view;
        }
        /// 
        /// 团组信息List 团组预览详情共享Api
        /// 
        /// 
        /// 
        public async Task PostShareGroupInfos(int portType)
        {
            var result = new Result() { Code = -2, Msg = "未知错误", Data = new List