using Microsoft.AspNetCore.Mvc;
using NPOI.SS.Formula.Functions;
using OASystem.API.OAMethodLib.ALiYun;
using OASystem.API.OAMethodLib.ExcelOutput;
using OASystem.Domain.Common;
using OASystem.Domain.Dtos.Business;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.Entities.Business;
using OASystem.Domain.Entities.Groups;
using OASystem.Domain.Entities.Resource;
using OASystem.Domain.ViewModels.Business;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Infrastructure.Repositories.Business;
using Org.BouncyCastle.Asn1.Mozilla;

namespace OASystem.API.Controllers
{
    /// <summary>
    /// 通用业务操作
    /// </summary>
    [Route("api/[controller]/[action]")]
    public class BusinessController : ControllerBase
    {
        private readonly IMapper _mapper;
        private readonly CommonBusRepository _busRep;
        public BusinessController(IMapper mapper, CommonBusRepository busRep)
        {
            _mapper = mapper;
            _busRep = busRep;
        }

        #region 会务物料单

        /// <summary>
        /// 获取会务活动列表
        /// </summary>
        /// <param name="paras"></param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> PostConferenceList()
        {
            List<Grp_DelegationInfo> listSource = _busRep.Query<Grp_DelegationInfo>(s => s.TeamDid == 691 && s.IsDel == 0).ToList();
            List<GroupNameView> viewList = new List<GroupNameView>();
            foreach (var group in listSource)
            {
                GroupNameView _view = new GroupNameView();
                _view.Id = group.Id;
                _view.GroupName = group.TeamName;
            }

            return Ok(JsonView(viewList));
        }

        /// <summary>
        /// 获取会务的采购物品计划清单
        /// </summary>
        /// <param name="ConfId">会务活动Id</param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> PostConfItemList(int ConfId)
        {
            Bus_ConfItemListView view = new Bus_ConfItemListView();

            Bus_ConfItemListInfo _confListInfo = await _busRep.Query<Bus_ConfItemListInfo>(s => s.Diid == ConfId).FirstAsync();
            if (_confListInfo != null)
            {
                view.TotalCost = _confListInfo.TotalCost;

                string sqlItem = string.Format(@" Select c.Id,c.ItemId,d.ItemName,c.[Count],c.CurrCost,c.OpRemark
From Bus_ConfItem as c With(Nolock) 
Inner Join Res_ItemDetail as d with(Nolock) On c.ItemId=d.Id
Where c.ConfListId = {0}", ConfId);
                List<Bus_ConfItemView> confItemList = await _busRep._sqlSugar.SqlQueryable<Bus_ConfItemView>(sqlItem).ToListAsync();
                view.ItemList = new List<Bus_ConfItemView>(confItemList);
            }
            else
            {
                view.ItemList = new List<Bus_ConfItemView>();
                view.TotalCost = 0;
            }

            return Ok(JsonView(view));
        }

        /// <summary>
        /// 获取会务可采购的物料集合
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> PostOptionalItemList()
        {
            List<OptionalBusRangeView> result = await _busRep.GetViewList_OptionalItem();

            return Ok(JsonView(result));
        }

        /// <summary>
        /// 编辑物料采购清单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> PostEditOptionalItemList(JsonDtoBase jsonDto)
        {
            if (string.IsNullOrEmpty(jsonDto.Paras))
            {
                return Ok(JsonView(false, "参数为空"));
            }
            Edit_OptionalItemListDto _dto = JsonConvert.DeserializeObject<Edit_OptionalItemListDto>(jsonDto.Paras);
            //Edit_OptionalItemListDto _dto = System.Text.Json.JsonSerializer.Deserialize<Edit_OptionalItemListDto>(jsonDto.Paras);

            if (_dto.DiId < 1)
            {
                return Ok(JsonView(false, "团组Id为空"));
            }

            if (_dto.ConfItemListId < 1)
            {
                //新增
                int rstInsert = await _busRep.Insert_ConfItemList(_dto);
                return Ok(JsonView(rstInsert == 0));
            }
            else
            {
                //修改
                int rstUpdate = await _busRep.Edit_ConfItemList(_dto);
                return Ok(JsonView(rstUpdate == 0));
            }

            return Ok(JsonView(false));
        }

        /// <summary>
        /// 获取会务采购物料清单Excel
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> Excel_ConfItemList(JsonDtoBase jsonDto)
        {
            if (string.IsNullOrEmpty(jsonDto.Paras))
            {
                return Ok(JsonView(false, "参数为空"));
            }

            dynamic confList = JsonConvert.DeserializeObject<dynamic>(jsonDto.Paras);
            int confListId = confList.ConfListId;
            Bus_ConfItemListInfo _entityConfList = await _busRep.Query<Bus_ConfItemListInfo>(s => s.Id == confListId).FirstAsync();
            if (_entityConfList != null)
            {
                string result = new Excel_BusConfItemList().Excel(_entityConfList);


            }
            else
            {
                return Ok(JsonView(false, "请先保存数据"));
            }

            return Ok(JsonView(false));
        }

        #endregion

        #region 阿里云短信测试

        /// <summary>
        /// 编辑物料采购清单
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> AliMessageTest(string mobile)
        {

            string add2dayZH = DateTime.Now.AddDays(2).ToString("yyyy年MM月dd日");
            string templateParam = JsonConvert.SerializeObject(new { teams = "测试团组", date = add2dayZH });
            AliMessagePost.PostMessage(mobile, "泛美国际团组", "SMS_461575447", templateParam);
            return Ok(JsonView(true));
        }

        #endregion
    }
}