using Admin.Core.Model;
using Admin.Core.Common.Resource;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
using Admin.Core.Common;
using Admin.Core.IService.ISys;
using Admin.Core.Model.Sys;

namespace Admin.Core.Api
{
    /// <summary>
    /// SysDictDataController
    /// </summary>
	[Route("api/[controller]/[action]")]
    [ApiController]
    [Authorize(Permissions.Name)]
    public class SysDictDataController : BaseApiUserController
    {

        /// <summary>
        /// _sysDictDataService
        /// </summary>
        private readonly ISysDictDataService _sysDictDataService;

        /// <summary>
        /// 构造方法
        /// </summary>
        /// <param name="SysDictDataService"></param>
        /// <param name="sysUserService"></param>
        public SysDictDataController(ISysDictDataService SysDictDataService, ISysUserService sysUserService) : base(sysUserService)
        {
            _sysUserService = sysUserService;
            _sysDictDataService = SysDictDataService;
        }

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <param name="pageQuery"></param>
        /// <returns></returns>
        [HttpPost]
        public async Task<MessageModel<PageModel<SysDictData>>> GetByPage([FromBody] PageQuery<SysDictData> pageQuery)
        {
            if (!pageQuery.Query.IsNotEmptyOrNull())
            {
                pageQuery.Query = new SysDictData();
            }
            var model = await _sysDictDataService.SelectDictDataList(pageQuery);

            return Success(model);
        }

        /// <summary>
        /// 根据ID查询
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns></returns>
        [HttpGet]
        public async Task<MessageModel<SysDictData>> GetByID(int id)
        {
            return new MessageModel<SysDictData>()
            {
                msg = Resource_SysBase.OprateSuccess,
                success = true,
                data = await _sysDictDataService.SelectDictDataById(id)
            };
        }

        /// <summary>
        /// 新增一条数据
        /// </summary>
        /// <param name="request">SysDictData</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<MessageModel<int>> Add([FromBody] SysDictData request)
        {
            var data = new MessageModel<int>();
            request.CreateBy = CurrentUser.LoginName;
            request.UpdateBy = CurrentUser.LoginName;
            data.data = await _sysDictDataService.InsertDictData(request);

            if (data.data > 0)
            {
                data.success = true;
                data.msg = Resource_SysBase.OprateSuccess;
            }
            else
            {
                data.success = false;
                data.msg = Resource_SysBase.OprateFail;
            }

            return data;
        }

        /// <summary>
        /// 更新一条数据
        /// </summary>
        /// <param name="request">SysDictData</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<MessageModel<bool>> Update([FromBody] SysDictData request)
        {
            var data = new MessageModel<bool>();
            request.UpdateBy = CurrentUser.LoginName;
            data.success = await _sysDictDataService.UpdateDictData(request);
            if (data.success)
            {
                data.msg = Resource_SysBase.OprateSuccess;
            }
            else
            {
                data.msg = Resource_SysBase.OprateFail;
            }
            return data;
        }

        /// <summary>
        /// 删除一条数据
        /// </summary>
        /// <param name="ids">主键</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<MessageModel<bool>> Del(List<int> ids)
        {
            var data = new MessageModel<bool>();
            data.success = await _sysDictDataService.DeleteDictDataByIds(ids);
            if (data.success)
            {
                data.msg = Resource_SysBase.OprateSuccess;
            }
            else
            {
                data.msg = Resource_SysBase.OprateFail;
            }

            return data;
        }

        /// <summary>
        /// 根据字典类型查询字典数据信息
        /// </summary>
        /// <param name="dictType"></param>
        /// <returns></returns>
        [HttpGet]
        public async Task<MessageModel<List<SysDictData>>> DictType(string dictType)
        {
            return Success(await _sysDictDataService.QueryAsync(x => x.DictType == dictType && x.Status == SysConst.ENABLE));
        }
    }
}