using AutoMapper;
using HanyadikHetVan.Data;
using HanyadikHetVan.Data.Entities;
using HanyadikHetVan.DTO;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace HanyadikHetVan.Services
{
    public class HanyadikHetVanEntityService
    {
        private readonly ApplicationDbContext _dbContext;
        private readonly IMapper _mapper;

        public HanyadikHetVanEntityService(ApplicationDbContext dbContext, IMapper mapper)
        {
            _dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
            _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper));
        }

        public async Task<int> GetDefaultWeek()
        {
            var latest = await _dbContext.WeeklyTimeSpans.Include(x => x.Pauses).OrderBy(x => x.Id).LastAsync();
            var latestDto = _mapper.Map<WeeklyTimeSpan, WeeklyTimeSpanDTO>(latest);
            return latestDto.CurrentWeek;
        }

        public async Task<int> GetUserDefaultWeek(string userId)
        {
            var latest = await _dbContext.WeeklyTimeSpans.Include(x => x.Pauses).Where(x => x.UserId == userId).OrderBy(x => x.Id).LastAsync();
            var latestDto = _mapper.Map<WeeklyTimeSpan, WeeklyTimeSpanDTO>(latest);
            return latestDto.CurrentWeek;
        }

        public async Task<int> GetWeekById(int weeklytimespanId)
        {
            var wts = await _dbContext.WeeklyTimeSpans.Include(x => x.Pauses).Where(x => x.Id == weeklytimespanId).FirstOrDefaultAsync();
            var wtsDto = _mapper.Map<WeeklyTimeSpan, WeeklyTimeSpanDTO>(wts);
            return wtsDto.CurrentWeek;
        }
    }
}
