using AutoMapper;
using EyeSoft.Extensions;
using OASystem.Domain.Dtos.Resource;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.ViewModels.Resource;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace OASystem.Infrastructure.Repositories.Resource
{
    /// 
    /// 世运会成本预算 仓储
    /// 
    public class GamesBudgetMasterRepository : BaseRepository
    {
        private readonly IMapper _mapper;
        private readonly JsonView _jv;
        public GamesBudgetMasterRepository(SqlSugarClient sqlSugar, IMapper mapper) : base(sqlSugar)
        {
            _mapper = mapper;
            _jv = new JsonView() { Code = StatusCodes.Status400BadRequest, Msg = "操作失败!" };
        }
        /// 
        /// List
        /// 
        /// 
        /// 
        public async Task ListAsync(GamesBudgetMasterListDto dto)
        {
            _jv.Msg = "暂无数据!";
            var search = dto.Search;
            RefAsync total = 0;
            var infos = await _sqlSugar.Queryable()
                .Where(x => x.IsDel == 0)
                .WhereIF(!string.IsNullOrEmpty(search), x => x.T0.Contains(search) || x.ProjectWork.Contains(search) || x.CalculationContent.Contains(search))
                .OrderByDescending(x => x.CreateTime)
                .Select()
                .ToPageListAsync(dto.PageIndex, dto.PageSize, total);
            _jv.Code = StatusCodes.Status200OK;
            _jv.Msg = $"操作成功!";
            _jv.Data = infos;
            _jv.Count = total;
            return _jv;
        }
        /// 
        /// 详情
        /// 
        /// 
        /// 
        public async Task InfoAsync(int id)
        {
            _jv.Msg = "暂无数据!";
            var info = await _sqlSugar.Queryable()
                .Where(x => x.IsDel == 0 && x.Id == id)
                .Select()
                .FirstAsync();
            if (info != null)
            {
                _jv.Code = StatusCodes.Status200OK;
                _jv.Msg = $"操作成功!";
                _jv.Data = info;
            }
            return _jv;
        }
        /// 
        /// 添加
        /// 
        /// 
        /// 
        public async Task AddAsync(GamesBudgetMasterAddDto dto)
        {
            var info = _mapper.Map(dto);
            var isNl = await _sqlSugar.Queryable()
                .FirstAsync(x => x.IsDel == 0 && 
                                 (x.T0.Equals(info.T0) || 
                                 x.ProjectWork.Equals (info.ProjectWork) || 
                                 x.CalculationContent.Equals(info.CalculationContent)));
            if (isNl != null)
            {
                _jv.Msg = "该项类型费用已存在,请勿重复添加!";
                return _jv;
            }
            info.LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            info.LastUpdateUserId = dto.CurrUserId;
            info.CreateTime = DateTime.Now;
            info.CreateUserId = dto.CurrUserId;
            var insert = await _sqlSugar.Insertable(info).ExecuteCommandAsync();
            if (insert > 0)
            {
                _jv.Msg = "操作成功!";
                _jv.Code = StatusCodes.Status200OK;
                return _jv;
            }
            return _jv;
        }
        /// 
        /// 编辑
        /// 
        /// 
        /// 
        public async Task EditAsync(GamesBudgetMasterEditDto dto)
        {
            var info = _mapper.Map(dto);
            info.LastUpdateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            info.LastUpdateUserId = dto.CurrUserId;
            var edit = await _sqlSugar.Updateable(info)
                .IgnoreColumns(x => new { x.CreateTime, x.CreateUserId, x.DeleteTime, x.DeleteUserId, x.IsDel })
                .ExecuteCommandAsync();
            if (edit > 0)
            {
                _jv.Msg = "操作成功!";
                _jv.Code = StatusCodes.Status200OK;
                return _jv;
            }
            return _jv;
        }
        /// 
        /// 删除
        /// 
        /// 
        /// 
        public async Task DelAsync(GamesBudgetMasterDelDto dto)
        {
            var del = await _sqlSugar.Updateable()
                .SetColumns(x => x.DeleteUserId == dto.CurrUserId)
                .SetColumns(x => x.DeleteTime == DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"))
                .SetColumns(x => x.IsDel == 1)
                .Where(x => x.Id == dto.Id)
                .ExecuteCommandAsync();
            if (del > 0)
            {
                _jv.Msg = "操作成功!";
                _jv.Code = StatusCodes.Status200OK;
                return _jv;
            }
            return _jv;
        }
    }
}