using DAL; using Microsoft.Extensions.Configuration; using Shared.DTO.Envios_DGA; using System.Text; using System.Text.Json; namespace DAS { public class RegistrarMedicion { private readonly HttpClient _httpClient; private readonly IConfiguration _configuration; private static string? password; private static string? rutEmpresa; private static string? rutUsuario; private readonly LogMedicionScadaRepository _logMedicionScadaRepository; public RegistrarMedicion(HttpClient httpClient, IConfiguration configuration,LogMedicionScadaRepository logMedicionScadaRepository) { _httpClient = httpClient; _configuration = configuration; rutUsuario = _configuration["Credenciales:rutEmpresa"] ?? ""; rutEmpresa = _configuration["Credenciales:rutUsuario"] ?? "" ?? ""; password = _configuration["Credenciales:password"] ?? ""; _logMedicionScadaRepository = logMedicionScadaRepository; } public async Task EnviarMedicionAsync(string codigoObra, MedicionSubterraneaRequest request, long idMedicion) { request.Autenticacion.Password = password; request.Autenticacion.RutEmpresa = rutEmpresa; request.Autenticacion.RutUsuario = rutUsuario; var baseUrl = _configuration["ApiSubterranea:BaseUrl"]; var endpoint = _configuration["ApiSubterranea:Endpoint"]; var url = $"{baseUrl}{endpoint}"; var timeStamp = DateTime.UtcNow.ToString("yyyy-MM-dd'T'HH:mm:ss-0000"); var json = JsonSerializer.Serialize(request); var content = new StringContent(json, Encoding.UTF8, "application/json"); content.Headers.Add("codigoObra", codigoObra); content.Headers.Add("timeStampOrigen", timeStamp); var response = await _httpClient.PostAsync(url, content); string jsonRecibido = await response.Content.ReadAsStringAsync(); string estado = response.IsSuccessStatusCode ? "OK" : "ERROR"; string comprobante = string.Empty; if (response.IsSuccessStatusCode) { try { using var doc = JsonDocument.Parse(jsonRecibido); if (doc.RootElement.TryGetProperty("data", out var dataProp) && dataProp.TryGetProperty("numeroComprobante", out var comprobanteProp)) { comprobante = comprobanteProp.GetString(); } } catch { } } var logMedicionScada = new LogMedicionScada(); logMedicionScada.EstadoEnvio = estado; logMedicionScada.JsonEnviado = json; logMedicionScada.JsonRecibido = jsonRecibido; logMedicionScada.Comprobante = comprobante; logMedicionScada.FechaEnvio = DateTime.UtcNow; logMedicionScada.IdMedicionSmartscadaOperacion = idMedicion; await _logMedicionScadaRepository.InsertarLogMedicionScadaAsync(logMedicionScada); return response.IsSuccessStatusCode; } } }