using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.ViewModels.Groups;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;

namespace OASystem.Infrastructure.Repositories.Resource
{
    public class AirTicketResRepository : BaseRepository<Grp_AirTicketReservations, Grp_AirTicketReservations>
    {
        private readonly IMapper _mapper;
        public AirTicketResRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
        {
            _mapper = mapper;
        }

        public async Task<Result> AirTicketResList(AirTicketResListDto dto)
        {
            Result result = new Result() { Code = -2, Msg = "未知错误" };

            Grp_DelegationInfo _DelegationInfo = _sqlSugar.Queryable<Grp_DelegationInfo>().First(it => it.Id == dto.DiId);
            if (_DelegationInfo != null)
            {
                string sql = string.Format(@"select a.*,c.IsAuditGM,(select Name from Sys_SetData where Id=a.cType) as 'CTypeName',(select Name from 
                                                Sys_SetData where Id=a.PreCurrency) as 'PreCurrencyStr',(select Name from Sys_SetData where Id=a.Currency)
                                                as 'CurrencyStr' from Grp_AirTicketReservations a,Grp_CreditCardPayment c where  a.id=c.CId  and a.isdel={1}
                                                and a.DIId={0} Order By a.CreateTime desc", dto.DiId, 0);
                List<AirTicketReservationsView> _AirTicketReservations = _sqlSugar.SqlQueryable<AirTicketReservationsView>(sql).ToList();

                foreach (var item in _AirTicketReservations)
                {
                    if (item.FlightsDescription.Contains("\r\n"))
                    {
                        var spilitArr = Regex.Split(item.FlightsDescription, "\r\n");
                        int rowindex = 1;
                        foreach (var spilitItem in spilitArr)
                        {
                            try
                            {
                                var spDotandEmpty = spilitItem.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList();
                                var depCode = spDotandEmpty[3].Substring(0, 3);
                                var arrCode = spDotandEmpty[3].Substring(3, 3);
                                Res_ThreeCode depData = _sqlSugar.Queryable<Res_ThreeCode>().First(it => it.IsDel == 0 && it.Three == depCode);
                                Res_ThreeCode arrData = _sqlSugar.Queryable<Res_ThreeCode>().First(it => it.IsDel == 0 && it.Three == arrCode);

                                string day = spDotandEmpty[2].Substring(2, 2);//日
                                string monthAbbreviations = spDotandEmpty[1].Substring(4, 3).ToUpper();//月份
                                switch (monthAbbreviations)
                                {
                                    case "JAN":
                                        monthAbbreviations = "1";
                                        break;
                                    case "FEB":
                                        monthAbbreviations = "2";
                                        break;
                                    case "MAR":
                                        monthAbbreviations = "3";
                                        break;
                                    case "APR":
                                        monthAbbreviations = "4";
                                        break;
                                    case "MAY":
                                        monthAbbreviations = "5";
                                        break;
                                    case "JUN":
                                        monthAbbreviations = "6";
                                        break;
                                    case "JUL":
                                        monthAbbreviations = "7";
                                        break;
                                    case "AUG":
                                        monthAbbreviations = "8";
                                        break;
                                    case "SEP":
                                        monthAbbreviations = "9";
                                        break;
                                    case "OCT":
                                        monthAbbreviations = "10";
                                        break;
                                    case "NOV":
                                        monthAbbreviations = "11";
                                        break;
                                    case "DEC":
                                        monthAbbreviations = "12";
                                        break;
                                }
                                string tate = $"{monthAbbreviations}月{day}日";
                                item.FlightDescription += rowindex + ". " + depData.AirPort + " " + arrData.AirPort + "  (" + tate + ")\r\n";
                            }
                            catch (Exception)
                            {
                                item.FlightDescription = "录入数据不规范!请检查";
                                break;
                            }
                            rowindex++;
                        }
                    }
                    else
                    {
                        try
                        {
                            var spDotandEmpty = item.FlightsDescription.Split('.')[1].Split(' ').Where(x => !string.IsNullOrEmpty(x)).ToList();
                            var depCode = spDotandEmpty[3].Substring(0, 3);
                            var arrCode = spDotandEmpty[3].Substring(3, 3);
                            Res_ThreeCode depData = _sqlSugar.Queryable<Res_ThreeCode>().First(it => it.IsDel == 0 && it.Three == depCode);
                            Res_ThreeCode arrData = _sqlSugar.Queryable<Res_ThreeCode>().First(it => it.IsDel == 0 && it.Three == arrCode);
                            string day = spDotandEmpty[2].Substring(2, 2);//日
                            string monthAbbreviations = spDotandEmpty[2].Substring(4, 3).ToUpper();//月份
                            switch (monthAbbreviations)
                            {
                                case "JAN":
                                    monthAbbreviations = "1";
                                    break;
                                case "FEB":
                                    monthAbbreviations = "2";
                                    break;
                                case "MAR":
                                    monthAbbreviations = "3";
                                    break;
                                case "APR":
                                    monthAbbreviations = "4";
                                    break;
                                case "MAY":
                                    monthAbbreviations = "5";
                                    break;
                                case "JUN":
                                    monthAbbreviations = "6";
                                    break;
                                case "JUL":
                                    monthAbbreviations = "7";
                                    break;
                                case "AUG":
                                    monthAbbreviations = "8";
                                    break;
                                case "SEP":
                                    monthAbbreviations = "9";
                                    break;
                                case "OCT":
                                    monthAbbreviations = "10";
                                    break;
                                case "NOV":
                                    monthAbbreviations = "11";
                                    break;
                                case "DEC":
                                    monthAbbreviations = "12";
                                    break;
                            }
                            string tate = $"{monthAbbreviations}月{day}日";
                            item.FlightDescription +=depData.AirPort + " " + arrData.AirPort + "  (" + tate + ")\r\n";
                        }
                        catch (Exception)
                        {
                            item.FlightDescription = "录入数据不规范!请检查";
                        }
                    }
                }
                //团组成本预算表查询
                Grp_GroupCostParameter _GroupCostParameter = _sqlSugar.Queryable<Grp_GroupCostParameter>().First(a=>a.DiId==dto.DiId);

                AirGroupCostParameterView _AirgroupCostParameter = _mapper.Map<AirGroupCostParameterView>(_GroupCostParameter);
               
                var data = new
                {
                    DelegationInfo = _DelegationInfo,
                    AirTicketReservations = _AirTicketReservations,
                    AirGroupCostParameter= _AirgroupCostParameter
                };
                return result = new Result() { Code = 0, Msg = "查询成功!", Data = data };
            }
            else
            {
                return result = new Result() { Code = -1, Msg = "暂无团组数据!" };
            }

        }

        public async Task<Result> AirTicketResSelect(AirTicketResDto dto)
        {
            Result result = new Result() { Code = -2, Msg = "未知错误" };
            try
            {
                List<Grp_GroupsTaskAssignment> grp_GroupsTaskAssignment = Query<Grp_GroupsTaskAssignment>(a => a.IsDel == 0 && a.UId == dto.UserId && a.CTId == 85).ToList();
                if (grp_GroupsTaskAssignment.Count != 0)
                {
                    string DiId = "";
                    foreach (var item in grp_GroupsTaskAssignment)
                    {
                        DiId += item.DIId + ",";
                    }
                    DiId = DiId.Substring(0, DiId.Length - 1);
                    string sql = string.Format(@"select * from Grp_DelegationInfo where Id in({0}) and IsDel={1}", DiId, 0);
                    List<Grp_DelegationInfo> grp_Delegations = _sqlSugar.SqlQueryable<Grp_DelegationInfo>(sql).ToList();
                    if (grp_Delegations.Count == 0)
                    {
                        return result = new Result() { Code = -1, Msg = "查询失败!" };
                    }
                    List<GroupNameView> grp_NameView = new List<GroupNameView>();
                    foreach (var item in grp_Delegations)
                    {
                        GroupNameView groupNameView = new GroupNameView();
                        groupNameView.Id = item.Id;
                        groupNameView.GroupName = item.TeamName;
                        grp_NameView.Add(groupNameView);
                    }
                    return result = new Result() { Code = 0, Msg = "查询成功!", Data = grp_NameView };
                }
                else
                {
                    return result = new Result() { Code = -1, Msg = "暂无可操作团组" };
                }
            }
            catch (Exception ex)
            {
                return result = new Result() { Code = -2, Msg = "程序错误" };
                throw;
            }
        }
    }
}