using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Ropin.Inspection.Api.Common;
using Ropin.Inspection.Model;
using Ropin.Inspection.Model.SearchModel;
using Ropin.Inspection.Model.ViewModel;
using Ropin.Inspection.Service.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace Ropin.Inspection.Api.Controllers
{
    /// <summary>
    /// 巡检点人员
    /// </summary>
    public class TispSpotUserController : BaseController
    {
        public ILogger<TispSpotUserController> _logger { get; }
        private readonly ITispSpotUserService _tispSpotUserService;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="tispSpotUserService"></param>
        /// <param name="logger"></param>
        public TispSpotUserController(ITispSpotUserService tispSpotUserService, ILogger<TispSpotUserController> logger)
        {
            _tispSpotUserService = tispSpotUserService;
            _logger = logger;
        }
        /// <summary>
        /// 通过ID获取巡检点人员信息
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpGet("GetSpotUserAsync/{id}")]
        public async Task<ApiResult> GetSpotUserAsync(Guid id)
        {
            if (Guid.Empty == id)
            {
                return new ApiResult(ReturnCode.GeneralError);
            }
            try
            {
                var spot = await _tispSpotUserService.GetByIdAsync(id);
                return new ApiResult<TispSpotUserViewModel>(spot);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }

        /// <summary>
        /// 获取所有巡检点人员
        /// </summary>
        /// <returns></returns>
        [HttpGet("GetSpotUsersAsync")]
        public async Task<ApiResult> GetSpotUsersAsync()
        {
            try
            {
                var spotList = await _tispSpotUserService.GetAllAsync();
                return new ApiResult<IEnumerable<TispSpotUserViewModel>>(spotList);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }
        /// <summary>
        /// 分组获取巡检点人员分配列表
        /// </summary>
        /// <param name="searchViewModel"></param>
        /// <returns></returns>
        //[HttpGet("GetSpotUsersAsyncByPage")]
        //public async Task<ApiResult> GetSpotUsersAsyncByPage([FromQuery] TispSpotUserSearchModel searchViewModel)
        [HttpPost("GetSpotUsersAsyncByPage")]
        public async Task<ApiResult> GetSpotUsersAsyncByPage(TispSpotUserSearchModel searchViewModel)
        {
            try
            {
                if (null == searchViewModel)
                {
                    return new ApiResult(ReturnCode.ArgsError);
                }
                var list = await _tispSpotUserService.GetSpotUsersAsyncByPage(searchViewModel);
                return new ApiResult<PagesModel<TispSpotUsersViewModel>>(new PagesModel<TispSpotUsersViewModel>(list?.ToList(), searchViewModel));
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }

        /// <summary>
        /// 创建巡检点人员
        /// </summary>
        /// <param name="spot"></param>
        /// <returns></returns>
        [Route("CreateSpotUserAsync")]
        [HttpPost]
        public async Task<ApiResult> CreateSpotUserAsync(TispSpotUserViewModel spot)
        {
            if (spot == null)
            {
                return new ApiResult(ReturnCode.ArgsError);
            }
            try
            {
                await _tispSpotUserService.CreateOneAsync(spot);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
            return new ApiResult(ReturnCode.Success);
        }
        /// <summary>
        /// 人员分配巡检点
        /// </summary>
        /// <param name="createViewModel"></param>
        /// <returns></returns>
        [Route("CreateSpotUsersAsync")]
        [HttpPost]
        public async Task<ApiResult> CreateSpotUsersAsync(TispSpotUserCreateViewModel createViewModel)
        {
            if (createViewModel == null)
            {
                return new ApiResult(ReturnCode.ArgsError);
            }
            if (createViewModel.spotIdList == null)
            {
                throw new Exception("请选择巡检点");
            }
            if (createViewModel.userIdList == null)
            {
                throw new Exception("请巡检点所分配的人员");
            }
            try
            {
                await _tispSpotUserService.CreateSpotsUserAsync(createViewModel);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
            return new ApiResult(ReturnCode.Success);
        }
        /// <summary>
        /// 巡检点分配人员
        /// </summary>
        /// <param name="createViewModel"></param>
        /// <returns></returns>
        [Route("CreateSpotsUsersAsync")]
        [HttpPost]
        public async Task<ApiResult> CreateSpotsUsersAsync(TispSpotUserCreateViewModel createViewModel)
        {
            if (createViewModel == null)
            {
                return new ApiResult(ReturnCode.ArgsError);
            }
            if (createViewModel.spotIdList == null)
            {
                throw new Exception("请选择巡检点");
            }
            if (createViewModel.userIdList == null)
            {
                throw new Exception("请巡检点所分配的人员");
            }
            try
            {
                await _tispSpotUserService.CreateSpotsUsersAsync(createViewModel);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
            return new ApiResult(ReturnCode.Success);
        }
        /// <summary>
        /// 删除巡检点人员
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        [HttpDelete("DeleteSpotUserAsync/{id}")]
        public async Task<ApiResult> DeleteSpotUserAsync(Guid id)
        {
            if (Guid.Empty == id)
            {
                return new ApiResult(ReturnCode.GeneralError);
            }
            try
            {
                await _tispSpotUserService.DeleteAsync(id);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
            return new ApiResult(ReturnCode.Success);
        }

        /// <summary>
        /// 更新巡检点人员
        /// </summary>
        /// <param name="id"></param>
        /// <param name="updateModel"></param>
        /// <returns></returns>
        [HttpPut("UpdateSpotUserAsync/{id}")]
        public async Task<ApiResult> UpdateSpotUserAsync(Guid id, TispSpotUserUpdateViewModel updateModel)
        {
            if (Guid.Empty == id)
            {
                return new ApiResult(ReturnCode.GeneralError);
            }
            try
            {
                await _tispSpotUserService.UpdateAsync(id, updateModel);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
            return new ApiResult(ReturnCode.Success);
        }


        //指定巡检点修改相关的巡检人员

        //指定巡检人员修改相关的巡检点

        /// <summary>
        /// 指定巡检点Id查询分配的巡检人员信息
        /// </summary>
        /// <param name="spotId">巡检点Id</param>
        /// <returns></returns>
        [Route("GetBySpotIdAsync/{spotId}")]
        [HttpGet]
        public async Task<ApiResult> GetBySpotIdAsync(Guid spotId)
        {
            try
            {
                var list = await _tispSpotUserService.GetBySpotIdAsync(spotId);
                return new ApiResult<IEnumerable<TispSpotUserViewModel>>(list);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }
        /// <summary>
        /// 指定人员Id查询分配的巡检点信息
        /// </summary>
        /// <param name="userId"></param>
        /// <returns></returns>
        [Route("GetByUserIdAsync/{userId}")]
        [HttpGet]
        public async Task<ApiResult> GetByUserIdAsync(Guid userId)
        {
            try
            {
                var list = await _tispSpotUserService.GetByUserIdAsync(userId);
                return new ApiResult<IEnumerable<TispUserStoreRouteSpotViewModel>>(list);
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }
        /// <summary>
        /// 分页获取所有巡检点的分配人员详细信息
        /// </summary>
        /// <returns></returns>
        [Route("GetAsyncByPage")]
        [HttpGet]
        public async Task<ApiResult> GetAsyncByPage([FromQuery] TispSpotUserSearchModel searchViewModel)
        {
            try
            {
                if (null == searchViewModel)
                {
                    return new ApiResult(ReturnCode.ArgsError);
                }
                var list = await _tispSpotUserService.GetAsyncByPage(searchViewModel.PageSize, searchViewModel.PageIndex);
                return new ApiResult<PagesModel<TispSpotUserViewModel>>(new PagesModel<TispSpotUserViewModel>(list?.ToList(), searchViewModel));
            }
            catch (Exception ex)
            {
                return new ApiResult(ReturnCode.GeneralError, ex.Message);
            }
        }
        
    }
}