// src/Elecciones.Infrastructure/Services/FakeElectoralApiService.cs using Elecciones.Core.DTOs; using Microsoft.Extensions.Logging; namespace Elecciones.Infrastructure.Services; public class FakeElectoralApiService : IElectoralApiService { private readonly ILogger _logger; public FakeElectoralApiService(ILogger logger) { _logger = logger; } public Task GetAuthTokenAsync() { _logger.LogWarning("--- USANDO SERVICIO FALSO (FAKE) ---"); _logger.LogInformation("Simulando obtención de token..."); string fakeToken = "FAKE_TOKEN_FOR_DEVELOPMENT"; return Task.FromResult(fakeToken); } public Task?> GetCatalogoCompletoAsync(string authToken) { _logger.LogInformation("Simulando obtención de Catálogo Completo..."); var catalogo = new List { new() // Simulamos el catálogo para la categoría de Diputados (ID 5) { Version = 1, CategoriaId = 5, Ambitos = [ new() { NivelId = 10, Nombre = "BUENOS AIRES", CodigoAmbitos = new() { DistritoId = "02" } }, new() { NivelId = 5, Nombre = "LA PLATA", CodigoAmbitos = new() { DistritoId = "02", SeccionId = "0001", MunicipioId = "056" } }, new() { NivelId = 5, Nombre = "MAR DEL PLATA", CodigoAmbitos = new() { DistritoId = "02", SeccionId = "0005", MunicipioId = "035" } } ], Niveles = [ new() { NivelId = 10, Nombre = "Provincia" }, new() { NivelId = 5, Nombre = "Municipio" } ] } }; return Task.FromResult?>(catalogo); } public Task?> GetAgrupacionesAsync(string authToken, string distritoId, int categoriaId) { _logger.LogInformation("Simulando obtención de Agrupaciones Políticas para el distrito {Distrito} y categoría {Categoria}...", distritoId, categoriaId); var agrupaciones = new List { new() { IdAgrupacion = "018", IdAgrupacionTelegrama = "131", NombreAgrupacion = "FRENTE DE AVANZADA" }, new() { IdAgrupacion = "025", IdAgrupacionTelegrama = "132", NombreAgrupacion = "ALIANZA POR EL FUTURO" }, new() { IdAgrupacion = "031", IdAgrupacionTelegrama = "133", NombreAgrupacion = "UNION POPULAR" }, new() { IdAgrupacion = "045", IdAgrupacionTelegrama = "134", NombreAgrupacion = "PARTIDO VECINALISTA" } }; return Task.FromResult?>(agrupaciones); } public Task GetResultadosAsync(string authToken, string distritoId, string seccionId, string municipioId) { _logger.LogInformation("Simulando obtención de Resultados para el municipio {MunicipioId}...", municipioId); // YA NO FILTRAMOS POR ID. DEVOLVEMOS DATOS SIMULADOS PARA CUALQUIER MUNICIPIO. var random = new Random(); var resultados = new ResultadosDto { FechaTotalizacion = DateTime.Now.ToString("o"), EstadoRecuento = new EstadoRecuentoDto { MesasEsperadas = random.Next(100, 2000), // Hacemos que varíe MesasTotalizadas = random.Next(50, 100), CantidadElectores = random.Next(50000, 600000), ParticipacionPorcentaje = random.Next(60, 85) + (decimal)random.NextDouble() }, ValoresTotalizadosPositivos = [ // Usamos los IDs reales de nuestro catálogo de agrupaciones falsas new() { IdAgrupacion = "018", NombreAgrupacion = "FRENTE DE AVANZADA", Votos = random.Next(10000, 20000) }, new() { IdAgrupacion = "025", NombreAgrupacion = "ALIANZA POR EL FUTURO", Votos = random.Next(15000, 25000) }, new() { IdAgrupacion = "031", NombreAgrupacion = "UNION POPULAR", Votos = random.Next(5000, 10000) }, new() { IdAgrupacion = "045", NombreAgrupacion = "PARTIDO VECINALISTA", Votos = random.Next(2000, 5000) } ], ValoresTotalizadosOtros = new VotosOtrosDto { VotosEnBlanco = random.Next(1000, 2000), VotosNulos = random.Next(500, 1000), VotosRecurridos = random.Next(20, 50) } }; return Task.FromResult(resultados); } }