using Elecciones.Core.DTOs; using Microsoft.Extensions.Configuration; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Json; using System.Threading.Tasks; using static Elecciones.Core.DTOs.BancaDto; namespace Elecciones.Infrastructure.Services; public class ElectoralApiService : IElectoralApiService { private readonly IHttpClientFactory _httpClientFactory; private readonly IConfiguration _configuration; public ElectoralApiService(IHttpClientFactory httpClientFactory, IConfiguration configuration) { _httpClientFactory = httpClientFactory; _configuration = configuration; } // --- MÉTODOS DE LA INTERFAZ --- public async Task GetAuthTokenAsync() { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var username = _configuration["ElectoralApi:Username"]; var password = _configuration["ElectoralApi:Password"]; if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password)) return null; var request = new HttpRequestMessage(HttpMethod.Get, "/api/createtoken/"); request.Headers.Add("username", username); request.Headers.Add("password", password); var response = await client.SendAsync(request); if (!response.IsSuccessStatusCode) return null; var tokenResponse = await response.Content.ReadFromJsonAsync(); return (tokenResponse is { Success: true, Data.AccessToken: not null }) ? tokenResponse.Data.AccessToken : null; } public async Task?> GetCatalogoCompletoAsync(string authToken) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var request = new HttpRequestMessage(HttpMethod.Get, "/api/catalogo/getCatalogo?categoriald=5"); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync>() : null; } public async Task?> GetAgrupacionesAsync(string authToken, string distritoId, int categoriaId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/catalogo/getAgrupaciones?distritold={distritoId}&categoriald={categoriaId}"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync>() : null; } public async Task GetResultadosAsync(string authToken, string distritoId, string seccionId, string municipioId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/resultados/getResultados?distritold={distritoId}&seccionld={seccionId}&municipiold={municipioId}&categoriald=5"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null; } public async Task GetBancasAsync(string authToken, string distritoId, string seccionId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/resultados/getBancas?distritold={distritoId}&seccionld={seccionId}&categoriald=5"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null; } public async Task?> GetTelegramasTotalizadosAsync(string authToken, string distritoId, string seccionId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/resultados/getTelegramasTotalizados?distritold={distritoId}&seccionld={seccionId}"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync>() : null; } public async Task GetTelegramaFileAsync(string authToken, string mesaId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/resultados/getFile?mesald={mesaId}"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null; } public async Task GetResumenAsync(string authToken, string distritoId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/resultados/getResumen?distritold={distritoId}"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null; } public async Task GetEstadoRecuentoGeneralAsync(string authToken, string distritoId) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var requestUri = $"/api/estados/estadoRecuento?distritold={distritoId}"; var request = new HttpRequestMessage(HttpMethod.Get, requestUri); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync() : null; } public async Task?> GetCategoriasAsync(string authToken) { var client = _httpClientFactory.CreateClient("ElectoralApiClient"); var request = new HttpRequestMessage(HttpMethod.Get, "/api/catalogo/getCategorias"); request.Headers.Add("Authorization", $"Bearer {authToken}"); var response = await client.SendAsync(request); return response.IsSuccessStatusCode ? await response.Content.ReadFromJsonAsync>() : null; } }