using Microsoft.EntityFrameworkCore; using Asistencia.Models; namespace Asistencia.Data.Repositories; public class AsistenciaRepository { private readonly AppDbContext _context; public AsistenciaRepository(AppDbContext context) { _context = context; } public async Task BuscarSesionActivaAsync(int idCursoAbierto, DateTime fecha) { return await _context.AsistenciasProfesor .FirstOrDefaultAsync(a => a.IdCursoAbierto == idCursoAbierto && a.FechaAsistencia.Date == fecha.Date && a.Estado == "Activa"); } public async Task IniciarSesionAsync(int idCursoAbierto, string rut, DateTime fecha, string horaInicio) { var sesion = new AsistenciaProfesor { IdCursoAbierto = idCursoAbierto, RutPasaporte = rut, FechaAsistencia = fecha, HoraInicio = horaInicio, Estado = "Activa" }; _context.AsistenciasProfesor.Add(sesion); await _context.SaveChangesAsync(); return sesion; } public async Task FinalizarSesionAsync(int idSesion, string horaFin) { var sesion = await _context.AsistenciasProfesor.FindAsync(idSesion); if (sesion == null) return false; sesion.HoraFin = horaFin; sesion.Estado = "Finalizada"; await _context.SaveChangesAsync(); return true; } public async Task> ObtenerAsistenciaAlumnosAsync(int idCursoAbierto, DateTime fecha) { var alumnos = await _context.DetallesContrato .Where(d => d.IdCursoAbierto == idCursoAbierto) .ToListAsync(); var asistencias = await _context.AsistenciasAlumno .Where(a => alumnos.Select(al => al.IdDetalleContrato).Contains(a.IdDetalleContrato) && a.FechaAsistencia.Date == fecha.Date) .ToListAsync(); return asistencias.ToDictionary(a => a.IdDetalleContrato, a => a.IdTipoAsistencia); } public async Task GuardarAsistenciaAlumnoAsync(int idDetalleContrato, DateTime fecha, string hora, int tipoAsistencia) { var existing = await _context.AsistenciasAlumno .FirstOrDefaultAsync(a => a.IdDetalleContrato == idDetalleContrato && a.FechaAsistencia.Date == fecha.Date); if (existing != null) { existing.IdTipoAsistencia = tipoAsistencia; existing.Hora = hora; } else { _context.AsistenciasAlumno.Add(new AsistenciaAlumno { IdDetalleContrato = idDetalleContrato, FechaAsistencia = fecha, Hora = hora, IdTipoAsistencia = tipoAsistencia }); } await _context.SaveChangesAsync(); } }