using AutoMapper;
using OASystem.Domain;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.ViewModels.Financial;
using OASystem.Domain.ViewModels.Groups;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OASystem.Infrastructure.Repositories.Financial
{
    /// 
    /// 财务 - 付款信息类
    /// 雷怡 2023.08.16 16:19
    /// 
    public class CreditCardPaymentRepository : BaseRepository
    {
        private readonly IMapper _mapper;
        public CreditCardPaymentRepository(SqlSugarClient sqlSugar, IMapper mapper)
            : base(sqlSugar)
        {
            _mapper = mapper;
        }
        /// 
        /// 根据diid查询团组付款信息
        /// 
        /// 
        /// false 未支付 true 已支付
        /// 
        public async Task GetGroupPaymentInfoByDiid(int diid,bool isPay)
        {
            Result result = new() { Code = -2 };
            int _isPay = 0;
            if (isPay) { _isPay = 1; }
            string sql = string.Format(@"Select * From Grp_CreditCardPayment Where IsDel=0 And Diid={0} And IsPay={1}", diid, _isPay);
            var groupReceivablesList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
            result.Code = 0;
            result.Msg = "查询成功!";
            result.Data = groupReceivablesList;
            return result;
        }
        /// 
        /// 根据diid 数组 查询团组付款信息
        /// 
        /// 
        /// false 未支付 true 已支付
        /// 
        public async Task GetGroupPaymentInfoByDiids(int[] diids, bool isPay)
        {
            Result result = new() { Code = -2 };
            int _isPay = 0;
            if (isPay) { _isPay = 1; }
            var groupReceivablesList = await _sqlSugar.Queryable()
                .Where(ccp => ccp.IsDel == 0 && diids.Contains(ccp.DIId) && ccp.IsPay == _isPay) .ToListAsync();
            result.Code = 0;
            result.Msg = "查询成功!";
            result.Data = groupReceivablesList;
            return result;
        }
        /// 
        /// 团组 其他款项/退款
        /// 
        /// 团组Id
        /// 
        /// 
        public async Task GetGroupRefundByDiid(int diid, bool isPay)
        {
            Result result = new() { Code = -2 };
            int _isPay = 0;
            if (isPay) { _isPay = 1; }
            string sql = string.Format(@"Select ccp.DIId,ccp.CreateUserId,ccp.AuditGMDate,sd1.name As PayType,ccp.OrbitalPrivateTransfer,ccp.PayDid,
                                                            ccp.payee,ccp.IsPay,gdp.CreateTime,gdp.PriceName,gdp.Price,sd.[Name] Currency,
                                                            ccp.PayMoney As Spread,ccp.DayRate,gdp.Remark From Fin_OtherPrice gdp 
                                        join Grp_CreditCardPayment ccp On ccp.Diid = gdp.Diid and ccp.Cid = gdp.Id 
                                        join Sys_SetData sd On sd.Id =gdp.CurrencyId 
                                        join Sys_SetData sd1 On sd1.id=ccp.PayDid 
                                        Where ccp.DIId={0} And gdp.IsDel = 0 and ccp.isDel=0 and ccp.CTable=285 and ccp.IsPay = {1} ", diid, _isPay);
            var groupRefundList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
            result.Code = 0;
            result.Msg = "查询成功!";
            result.Data = groupRefundList;
            return result;
        }
        /// 
        /// 团组 根据diid 数组 查询 其他款项/退款
        /// 
        /// 团组Id
        /// 
        /// 
        public async Task GetGroupRefundByDiids(int[] diids, bool isPay)
        {
            Result result = new() { Code = -2 };
            int _isPay = 0;
            if (isPay) { _isPay = 1; }
            string _diidsStr = string.Empty;
            #region 处理Diid
            StringBuilder diidSb = new StringBuilder();
            for (int i = 0; i < diids.Length; i++)
            {
                if (i == diids.Length - 1)
                {
                    diidSb.Append(diids[i]);
                }
                else
                {
                    diidSb.Append(diids[i]).Append(",");
                }
            }
            _diidsStr = diidSb.ToString().Trim();
            #endregion
            string sql = string.Format(@"Select ccp.DIId,ccp.CreateUserId,ccp.AuditGMDate,sd1.name As PayType,ccp.OrbitalPrivateTransfer,ccp.PayDid,
                                                            ccp.payee,ccp.IsPay,gdp.CreateTime,gdp.PriceName,gdp.Price,sd.[Name] Currency,
                                                            ccp.PayMoney As Spread,ccp.DayRate,gdp.Remark From Fin_OtherPrice gdp 
                                        join Grp_CreditCardPayment ccp On ccp.Diid = gdp.Diid and ccp.Cid = gdp.Id 
                                        join Sys_SetData sd On sd.Id =gdp.CurrencyId 
                                        join Sys_SetData sd1 On sd1.id=ccp.PayDid 
                                        Where ccp.isDel=0 And gdp.IsDel = 0 And ccp.DIId In ({0}) And ccp.CTable=285 and ccp.IsPay = {1} ", _diidsStr, _isPay);
            var groupRefundList = await _sqlSugar.SqlQueryable(sql).ToListAsync();
            result.Code = 0;
            result.Msg = "查询成功!";
            result.Data = groupRefundList;
            return result;
        }
    }
}