using LY.App.Common;
using LY.App.Common.Redis;
using LY.App.Device;
using LY.App.Model;
using LY.App.Service;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace LY.App.Controllers
{
    /// 
    /// 首页控制器
    /// 
    [Route("api/[controller]")]
    [ApiController]
    public class HomeController : ControllerBase
    {
        private readonly DeviceService _deviceService;
        private readonly DeviceManager deviceManager = DeviceManager.Instance;
        private readonly PositionService _positionService;
        private readonly RedisService _redisService;
        private readonly AlarmService _alarmService;
        private readonly WeatherService _weatherService;
        /// 
        ///     
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public HomeController(DeviceService deviceService, PositionService positionService,
            RedisService redisService, AlarmService alarmService, WeatherService weatherService)
        {
            _deviceService = deviceService;
            _positionService = positionService;
            _redisService = redisService;
            _alarmService = alarmService;
            _weatherService = weatherService;
        }
        /// 
        /// 首页
        /// 
        /// 
        [HttpGet("index")]
        public async Task view()
        {
            ApiResult result = new ApiResult();
            var positions = await _positionService.Index();
            var alarmCount = await _redisService.GetOrSetAsync(RedisKeyList.index_data(),
                   async () => await _alarmService.IndexCount(),
                   TimeSpan.FromSeconds(DateTimeHelper.GetRemainSeconds()));
            var weather = await _redisService.GetOrSetAsync(RedisKeyList.Index_Weather,
                   async () => await _weatherService.GetWeather(),
                   TimeSpan.FromHours(3));
            result.data = new
            {
                positions,
                alarmCount,
                weather
            };
            return Ok(result);
        }
    }
}