using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Serialization;
using OASystem.Domain.Dtos.Groups;
using OASystem.Domain.ViewModels.Groups;
using OASystem.Infrastructure.Repositories.Groups;

namespace OASystem.API.Controllers
{
    /// <summary>
    /// 团组相关
    /// </summary>
    //[Authorize]
    [Route("api/[controller]/[action]")]
    public class GroupsController : ControllerBase
    {
        private readonly GrpScheduleRepository _grpScheduleRep;
        private readonly IMapper _mapper;
        private readonly DelegationInfoRepository _groupRepository;

        public GroupsController(IMapper mapper, GrpScheduleRepository grpScheduleRep, DelegationInfoRepository groupRepository)
        {
            _mapper = mapper;
            _grpScheduleRep = grpScheduleRep;
            _groupRepository = groupRepository;
        }

        #region 流程管控

        /// <summary>
        /// 获取团组流程管控信息
        /// </summary>
        /// <param name="paras">参数Json字符串</param>
        /// <returns></returns>
        [HttpPost]
        [ProducesResponseType(typeof(JsonView), StatusCodes.Status200OK)]
        public async Task<IActionResult> PostGrpSchedule(string paras)
        {
            if (string.IsNullOrEmpty(paras))
            {
                return Ok(JsonView(false, "参数为空"));
            }

            Grp_ScheduleDto _ScheduleDto = JsonConvert.DeserializeObject<Grp_ScheduleDto>(paras);
            if (_ScheduleDto != null)
            {
                if (_ScheduleDto.SearchType == 2)//获取列表
                {

                }
                else//获取对象
                {
                    Grp_ScheduleView _grpScheduleView = await _grpScheduleRep.GetView_GrpSchedule(_ScheduleDto);
                    if (_grpScheduleView != null)
                    {
                        return Ok(JsonView(0, "获取成功", _grpScheduleView));
                    }
                }
            }
            else
            {
                return Ok(JsonView(false, "参数反序列化失败"));
            }

            return Ok(JsonView(false, "暂无数据!"));
        }

        #endregion

        #region 团组基本信息

        /// <summary>
        ///  接团信息列表
        /// </summary>
        /// <param name="dto">团组列表请求dto</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GetGroupList(GroupListDto dto)
        {
            var groupData = await _groupRepository.GetGroupList(dto);
            if (groupData.Code != 0)
            {
                return Ok(JsonView(false, groupData.Msg));
            }

            return Ok(JsonView(groupData.Data));
        }

        /// <summary>
        ///  接团信息详情
        /// </summary>
        /// <param name="dto">团组info请求dto</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GetGroupInfo(GroupInfoDto dto)
        {
            var groupData = await _groupRepository.GetGroupInfo(dto);
            if (groupData.Code != 0)
            {
                return Ok(JsonView(false, groupData.Msg));
            }

            return Ok(JsonView(groupData.Data));
        }

        /// <summary>
        /// 接团信息 编辑添加
        /// 基础信息数据源
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GroupEditBasicSource(GroupListDto dto)
        {

            var groupData = await _groupRepository.GroupEditBasicSource(dto);
            if (groupData.Code != 0)
            {
                return Ok(JsonView(false, groupData.Msg));
            }
            return Ok(JsonView(groupData.Data));

        }

        /// <summary>
        /// 接团信息 操作(增改)
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GroupOperation(GroupOperationDto dto)
        {
            try
            {
                var groupData = await _groupRepository.GroupOperation(dto);
                if (groupData.Code != 0)
                {
                    return Ok(JsonView(false, groupData.Msg));
                }

                return Ok(JsonView(true));
            }
            catch (Exception ex)
            {

                Logs("[response]" +  JsonConvert.SerializeObject( dto));
                Logs(ex.Message);
                return Ok(JsonView(false, ex.Message));
            }
        }

        /// <summary>
        /// 接团信息 操作(删除)
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GroupDel(GroupDelDto dto)
        {
            try
            {
                var groupData = await _groupRepository.GroupDel(dto);
                if (groupData.Code != 0)
                {
                    return Ok(JsonView(false, groupData.Msg));
                }

                return Ok(JsonView(true));
            }
            catch (Exception ex)
            {

                Logs("[response]" + JsonConvert.SerializeObject(dto));
                Logs(ex.Message);
                return Ok(JsonView(false, ex.Message));
            }
        }

        /// <summary>
        /// 获取团组销售报价号
        /// 团组添加时 使用
        /// </summary>
        /// <returns></returns>
        [HttpPost]
        public async Task<IActionResult> GetGroupSalesQuoteNo()
        {
            var groupData = await _groupRepository.GetGroupSalesQuoteNo();
            if (groupData.Code != 0)
            {
                return Ok(JsonView(false, groupData.Msg));
            }
            object salesQuoteNo = new
            {
                SalesQuoteNo = groupData.Data
            };

            return Ok(JsonView(salesQuoteNo));
        }
        #endregion
    }
}