using CPRNIMS.Domain.UIContracts.PO; using CPRNIMS.Infrastructure.Entities.PO; using CPRNIMS.Infrastructure.Helper; using Google.Apis.Services; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Headers; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace CPRNIMS.Domain.UIServices.PO { public class CustomPOService : ICustomPOService { private readonly IHttpClientFactory _httpClientFactory; private readonly TokenHelper _tokenHelper; private readonly IConfiguration _configuration; private readonly ILogger _logger; public CustomPOService( IHttpClientFactory httpClientFactory, TokenHelper tokenHelper, IConfiguration configuration, ILogger logger) { _httpClientFactory = httpClientFactory; _tokenHelper = tokenHelper; _configuration = configuration; _logger = logger; } public async Task GetPOFormDataAsync(long? poId = null) { try { var token = await _tokenHelper.GetValidTokenAsync(); if (string.IsNullOrEmpty(token)) throw new UnauthorizedAccessException("No valid token available."); var httpClient = _httpClientFactory.CreateClient("AuthApi"); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token); var url = _configuration["LLI:NonInvent:POMgmt:GetPOFormData"]; if (poId.HasValue) url += $"?poId={poId}"; var response = await httpClient.GetAsync(url); if (!response.IsSuccessStatusCode) { _logger.LogError("GetPOFormData failed: {StatusCode}", response.StatusCode); return new POFormData(); } var json = await response.Content.ReadAsStringAsync(); var result = JsonSerializer.Deserialize(json, new JsonSerializerOptions { PropertyNameCaseInsensitive = true }); return result ?? new POFormData(); } catch (Exception ex) { _logger.LogError(ex, "Error in GetPOFormDataAsync"); return new POFormData(); } } } }