using langguanApi.Model;
using NPOI.SS.Formula.Functions;
using System.Linq.Expressions;
namespace langguanApi.Service
{
    /// 
    /// Statistics service
    /// 
    public class StatisticsService
    {
        private Hj212Service _hj212Service;
        /// 
        /// Constructor
        /// 
        /// 
        public StatisticsService(Hj212Service hj212Service)
        {
            _hj212Service = hj212Service;
        }
        /// 
        /// Get statistics
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        /// 
        public async Task GetStatistics(int type, int Organized, string deviceId, DateTime? startTime, DateTime? endTime, int pageIndex = 1, int pageSize = 10)
        {
            var result = await GetData(type, Organized, deviceId, startTime, endTime, pageIndex, pageSize);
            return new ApiResult()
            {
                code = 0,
                msg = "success",
                data = new
                {
                    items = result.Item2,
                    total = result.Item1
                }
            };
        }
        public async Task ExportGetStatistics(int type, int Organized, string deviceId, DateTime? startTime, DateTime? endTime, int pageIndex = 1, int pageSize = 10)
        {
            var result = await GetData(type, Organized, deviceId, startTime, endTime, pageIndex, pageSize);
            var items = result.Item2;
            return new ApiResult()
            {
                code = 0,
                msg = "success",
            };
        }
        private async Task>> GetData(int type, int Organized, string deviceId, DateTime? startTime, DateTime? endTime, int pageIndex = 1, int pageSize = 10)
        {
            endTime = endTime ?? DateTime.Now;
            startTime = startTime ?? DateTime.Now.AddDays(-7);
            Expression> exp = filter =>
            filter.CreateDateTime >= startTime && filter.CreateDateTime <= endTime && filter.Id == deviceId;
            ReqPaing reqPaing = new ReqPaing()
            {
                pageSize = pageSize,
                current = pageIndex
            };
            return await _hj212Service.GetListByPage(reqPaing, exp);
        }
    }
}