using System.Text.Json; using System.Globalization; using Application; namespace Infrastructure { public class CalendarioService : ICalendarioService { private const string Url = "https://www.ccee.org.br/en/web/guest/calendario?p_p_id=com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn&p_p_lifecycle=2&p_p_cacheability=cacheLevelPage&doAsUserId=&p_p_resource_id=calendarBookings"; public async Task ObterEventoLimiteColetaAsync(DateTime dataReferencia, CancellationToken ct = default) { var year = dataReferencia.Year; var month = dataReferencia.Month - 1; var dayFinal = DateTime.DaysInMonth(year, month + 1); var values = new Dictionary { ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_calendarIds"] = "55985", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeDay"] = dayFinal.ToString(), ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeHour"] = "23", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMinute"] = "59", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeMonth"] = month.ToString(), ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_endTimeYear"] = year.ToString(), ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_eventsPerPage"] = "-1", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeDay"] = "1", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeHour"] = "0", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMinute"] = "0", ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeMonth"] = month.ToString(), ["_com_liferay_calendar_web_portlet_CalendarPortlet_INSTANCE_urjn_startTimeYear"] = year.ToString(), }; try { using var client = new HttpClient(); using var content = new FormUrlEncodedContent(values); var resp = await client.PostAsync(Url, content, ct); var resposta = await resp.Content.ReadAsStringAsync(ct); var alvo = $"Data limite para coleta diária dos dados de medição no SCDE"; try { using var doc = JsonDocument.Parse(resposta); double? encontrado = null; double? startTimeDay = null; void SearchJson(JsonElement el) { if (encontrado != null) return; if (el.ValueKind == JsonValueKind.Object) { // Verifica se alguma propriedade contém o texto alvo foreach (var prop in el.EnumerateObject()) { if (prop.Value.ValueKind == JsonValueKind.String) { var s = prop.Value.GetString() ?? ""; if (s.Contains(alvo, StringComparison.OrdinalIgnoreCase)) { // Encontrou o evento, extrair dados do mesmo objeto if (el.TryGetProperty("startTimeDay", out var day)) startTimeDay = day.GetInt32(); if (startTimeDay != null) encontrado = startTimeDay; return; } } } foreach (var prop in el.EnumerateObject()) SearchJson(prop.Value); } else if (el.ValueKind == JsonValueKind.Array) { foreach (var item in el.EnumerateArray()) SearchJson(item); } } SearchJson(doc.RootElement); if (encontrado != null) return encontrado; } catch { } return null; } catch { return null; } } } }