using EyesAndEars.UWP.Models; using System; using System.Diagnostics; using System.Text.Json; using System.Threading.Tasks; using Windows.UI; using Windows.UI.Xaml.Media; namespace EyesAndEars.UWP.Services { public static class DataServices { public static async Task UpdateDevice(string url, int deviceId) { try { var id = MapFactoryDeviceToGalleyDevice(deviceId); var readingAPI = $"{url}/api/readings/latest/{id}"; var statusAPI = $"{url}/api/status/latest/{deviceId}"; var readingJSON = await WebServices.GetJSON(readingAPI); var statusJSON = await WebServices.GetJSON(statusAPI); var r = MapToLightReading(readingJSON); var s = MapToDeviceStatus(statusJSON); var c = UpdateStatusColour(s.status); return new Device(deviceId, r, s, c); } catch (Exception e) { Debug.WriteLine($"ERROR: {e.Message}"); return CreateFallBackDevice(deviceId); } } static SolidColorBrush UpdateStatusColour(string status) { return status.Equals("on", StringComparison.OrdinalIgnoreCase) ? new SolidColorBrush(Colors.SeaGreen) : new SolidColorBrush(Colors.DarkRed); } static int MapFactoryDeviceToGalleyDevice(int deviceId) { int id = 0; if (deviceId > 3) { switch (deviceId) { case 4: id = 1; break; case 5: id = 2; break; case 6: id = 3; break; default: break; } } else { id = deviceId; } return id; } static LightReading MapToLightReading(string json) { var reading = JsonSerializer.Deserialize(json); return reading; } static DeviceStatus MapToDeviceStatus(string json) { var status = JsonSerializer.Deserialize(json); return status; } public static Device CreateFallBackDevice(int deviceId) { // "999" and "err" are acting as sentinals in this context. var r = new LightReading { id = 0, reading = 999, time = DateTime.Now }; var s = new DeviceStatus { id = 0, status = "err", time = DateTime.Now }; var c = new SolidColorBrush(Colors.DarkOrange); var d = new Device(deviceId, r, s, c); return d; } } }