using Microsoft.EntityFrameworkCore;
using MTWorkHR.Core.Entities;
using MTWorkHR.Core.IDto;
using MTWorkHR.Core.IRepositories;
using MTWorkHR.Infrastructure.Entities;
using MTWorkHR.Infrastructure.DBContext;

namespace MTWorkHR.Infrastructure.Repositories
{
    public class AttendanceRepository : Repository<Attendance>, IAttendanceRepository
    {
        private readonly DbSet<Attendance> dbSet;

        public AttendanceRepository(HRDataContext context) : base(context)
        {
            dbSet = context.Set<Attendance>();

        }
       

        public async Task<Attendance> GetAttendanceByUserId(string userId, DateTime attendanceDate)
        {
             var result = await dbSet
                .FirstOrDefaultAsync(x => x.UserId == userId && x.AttendanceDate.Date == attendanceDate.Date && !x.CheckOutTime.HasValue);
            return result;
        }


        public async Task<Tuple<IQueryable<Attendance>, int>> GetAllWithChildrenAsync()
        {
            var query = dbSet.AsQueryable();
            var total = await query.CountAsync();

            return new Tuple<IQueryable<Attendance>, int>(query, total);
        }
    }
}