using System.Collections.Generic;
using System.Threading.Tasks;
using GxPress.Entity.WorkCar;
using GxPress.Repository.Interface.WorkCar;
using GxPress.Request.App.WorkCar;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace GxPress.Api.AdminControllers
{
    /// <summary>
    /// 会议
    /// </summary>
    [Route("api/admin/car")]
    [ApiController]
    [Authorize]
    public class AdminCarController : ControllerBase
    {
        private readonly ICarTypeRepository _carTypeRepository;
        private readonly ICarOrderRepository _carOrderRepository;
        private readonly ICarRepository _carRepository;

        public AdminCarController(ICarTypeRepository carTypeRepository, ICarOrderRepository carOrderRepository, ICarRepository carRepository)
        {
            _carTypeRepository = carTypeRepository;
            _carOrderRepository = carOrderRepository;
            _carRepository = carRepository;
        }

        /// <summary>
        /// 新增车辆类型
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost("type")]
        public async Task<CarType> TypeAdd([FromBody] CarType request)
        {
            request.Id = await _carTypeRepository.InsertAsync(request);
            return request;
        }

        /// <summary>
        /// 修改车辆类型
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPut("type")]
        public async Task TypeEdit([FromBody] CarType request)
        {
            await _carTypeRepository.UpdateAsync(request);
        }

        /// <summary>
        /// 获取车辆类型列表
        /// </summary>
        /// <returns></returns>
        [HttpGet("type")]
        public async Task<IEnumerable<CarType>> TypeList()
        {
            return await _carTypeRepository.GetListAsync();
        }

        /// <summary>
        /// 删除车辆类型
        /// </summary>
        /// <returns></returns>
        [HttpDelete("type/{id}")]
        public async Task<bool> TypeRemove([FromRoute]int id)
        {
            return await _carTypeRepository.DeleteAsync(id);
        }

        /// <summary>
        /// 新增车辆
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPost("")]
        public async Task<Car> CarAdd([FromBody] Car request)
        {
            request.Id = await _carRepository.InsertAsync(request);
            return request;
        }

        /// <summary>
        /// 修改车辆
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        [HttpPut("")]
        public async Task CarEdit([FromBody] Car request)
        {
            await _carRepository.UpdateAsync(request);
        }

        /// <summary>
        /// 获取车辆列表
        /// </summary>
        /// <returns></returns>
        [HttpGet("")]
        public async Task<IEnumerable<Car>> CarList([FromQuery] CarRequest request)
        {
            return await _carRepository.GetListAsync(request.TypeId);
        }

        /// <summary>
        /// 删除车辆
        /// </summary>
        /// <returns></returns>
        [HttpDelete("{id}")]
        public async Task<bool> CarRemove([FromRoute]int id)
        {
            return await _carRepository.DeleteAsync(id);
        }
    }
}