using System.ComponentModel.Design; using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Nodes; using Flurl.Util; using InnovEnergy.App.Backend.Database; using InnovEnergy.Lib.Victron.VictronVRM; using Microsoft.AspNetCore.Mvc; namespace InnovEnergy.App.Backend.Controllers; using Token = String; [ApiController] [Route("api/")] public class Controller : ControllerBase { [HttpGet(nameof(GetInstallation))] [UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "")] public Object GetInstallation(UInt64 serialNumber) { var instList = Db.InstallationsAndDetails.Values.ToList(); foreach (var detailList in instList.Select((value, index) => new { Value = value, Index = index})) { if (detailList.Value.All(detail => detail.Json["idSite"]?.GetValue() != serialNumber)) continue; var retour = Db.InstallationsAndDetails.Keys.ToList()[detailList.Index].Json; retour["details"] = JsonSerializer.Deserialize(JsonSerializer.Serialize(detailList.Value.Select(d => d.Json).ToArray())); return retour; } return new NotFoundResult(); } [HttpGet(nameof(GetInstallationList))] public Object GetInstallationList() { var instList = Db.InstallationsAndDetails.Keys.ToList(); if (instList.Count == 0) return 0; var returnJson = new Dictionary>(); foreach (var installation in instList) { returnJson[installation.Name] = new Dictionary(); returnJson[installation.Name].Add("ip", $" On-Device-Gui "); try { returnJson[installation.Name].Add("idSite", $" Dashboard "); returnJson[installation.Name] .Add("identifier", $"{installation.Json["identifier"]?.GetValue()}"); returnJson[installation.Name].Add("machine serial number", $"{Serial(installation)}"); } catch (Exception) { continue; } } return returnJson; } private static String? Ip(Installation installation) { return Db.InstallationsAndDetails[installation].RemoteSupportIp(); } private static String? Serial(Installation installation) { return Db.InstallationsAndDetails[installation].MachineSerial(); } } // installation Name, ip (link uf gui), idSite (vrm link), identifier , machineserial (HQ...)