using Microsoft.EntityFrameworkCore; using Asistencia.Data; using Asistencia.Models; namespace Asistencia.Services; public class SyncService { private readonly AppDbContext _db; private readonly ConnectivityService _connectivity; public SyncService(AppDbContext db, ConnectivityService connectivity) { _db = db; _connectivity = connectivity; } public async Task ContarPendientesAsync() { var sesiones = await _db.AsistenciasProfesor .Where(a => a.Estado == "Finalizada") .CountAsync(); var asistencias = await _db.AsistenciasAlumno.CountAsync(); return sesiones + asistencias; } public async Task<(bool Success, string Message)> SincronizarAsync(string apiUrl) { if (!await _connectivity.HayConexionAsync()) return (false, "Sin conexion a internet"); var pendientes = await ContarPendientesAsync(); if (pendientes == 0) return (true, "No hay datos pendientes"); try { var sesiones = await _db.AsistenciasProfesor .Where(a => a.Estado == "Finalizada") .ToListAsync(); foreach (var sesion in sesiones) { // TODO: POST to apiUrl + "/api/asistencia-profesor" // await HttpClient.PostAsJsonAsync(apiUrl + "/api/asistencia-profesor", sesion); } var asistencias = await _db.AsistenciasAlumno.ToListAsync(); foreach (var asistencia in asistencias) { // TODO: POST to apiUrl + "/api/asistencia-alumno" // await HttpClient.PostAsJsonAsync(apiUrl + "/api/asistencia-alumno", asistencia); } _db.AsistenciasProfesor.RemoveRange(sesiones); _db.AsistenciasAlumno.RemoveRange(asistencias); await _db.SaveChangesAsync(); return (true, $"Sincronizados {sesiones.Count} sesiones y {asistencias.Count} asistencias"); } catch (Exception ex) { return (false, $"Error al sincronizar: {ex.Message}"); } } }