using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; namespace VaporRecoveryOnlineWatchHubApp.Config { public class VRBoardNozzleConfig { public int SiteLevelNozzleId { get; set; } public int SiteLevelDispenserId { get; set; } public string SiteLevelDispenserDescription { get; set; } public byte? DataCollectorNozzleNumber { get; set; } public int? DataCollectorDeviceId { get; set; } public override string ToString() { return GetType().GetProperties().Aggregate(string.Empty, (result, next) => result + $"{next.Name} : {(next.GetValue(this)?.ToString()) ?? string.Empty} "); } } public class VRBoardNozzleConfigs { public List data { get; set; } = new List(); public VRBoardNozzleConfig DeviceInfoToSiteNozzleConfig(int deviceId, int addressNo) => data.Where(c => c.DataCollectorDeviceId == deviceId && c.DataCollectorNozzleNumber == addressNo). FirstOrDefault(); public int? DeviceInfoToSiteNozzleId(int deviceId, int addressNo) => data.Where(c => c.DataCollectorDeviceId == deviceId && c.DataCollectorNozzleNumber == addressNo). FirstOrDefault()?.SiteLevelNozzleId; public List DeviceInfoToSiteNozzleIdList(int deviceId) => data.Where(c => c.DataCollectorDeviceId == deviceId).Select(c => c.SiteLevelNozzleId).ToList(); public int? DeviceInfoToSiteDispenserId(int deviceId, int addressNo) => data.Where(c => c.DataCollectorDeviceId == deviceId && c.DataCollectorNozzleNumber == addressNo). FirstOrDefault()?.SiteLevelDispenserId; public string DeviceInfoToSiteDispenserDescription(int deviceId, int addressNo) => data.Where(c => c.DataCollectorDeviceId == deviceId && c.DataCollectorNozzleNumber == addressNo). FirstOrDefault()?.SiteLevelDispenserDescription; public VRBoardNozzleConfig SiteNozzleIdToConfig(int siteNozzleId) => data.Where(c => c.SiteLevelNozzleId == siteNozzleId).FirstOrDefault(); } //public static class NozzleConfigsExtension //{ // public static VRBoardNozzleConfigs Sort(this VRBoardNozzleConfigs self) // { // self.data = self.data.OrderBy(x => x.SiteLevelNozzleId).ToList(); // return self; // } // public static VRBoardNozzleConfigs CreateNozzleConfigs(this VRBoardNozzleConfigs nozzleConfigs, string nozzleDeviceMapping, string nozzleDispenserMapping) // { // var configs = nozzleConfigs.data; // var groupDelimeter = ";"; // var elementDelimeter = ":"; // if (!string.IsNullOrEmpty(nozzleDispenserMapping)) // { // var mappings = nozzleDispenserMapping.Split(groupDelimeter); // if (mappings.Length >= 0) // { // foreach (var m in mappings) // { // // format of mapping should like 1号油机:1:1,2,3,4 which represents dispenser description:dispenser id:site nozzle list // var mapping = m.Split(elementDelimeter); // if (mapping.Length == 3 && // int.TryParse(mapping[1], out int dispenserId)) // { // var dispenserDesc = mapping[0]; // var nozzleList = mapping[2].Split(","); // foreach (var n in nozzleList) // { // if (int.TryParse(n, out int nozzleId)) // { // var nozzleConfig = new VRBoardNozzleConfig // { // SiteLevelDispenserDescription = dispenserDesc, // SiteLevelDispenserId = dispenserId, // SiteLevelNozzleId = nozzleId // }; // if (configs.Where(i => i.SiteLevelNozzleId == nozzleId).FirstOrDefault() == null) // { // configs.Add(nozzleConfig); // } // else // { // throw new ArgumentNullException($"Duplicated nozzle id {nozzleId} found"); // } // } // } // } // } // } // } // if (!string.IsNullOrEmpty(nozzleDeviceMapping)) // { // var mappings = nozzleDeviceMapping.Split(groupDelimeter); // if (mappings.Length >= 0) // { // foreach (var m in mappings) // { // // format of mapping should like 1:1:1 which represents deviceId:addressNo:siteNozzleNo // var mapping = m.Split(elementDelimeter); // if (mapping.Length == 3 && // int.TryParse(mapping[0], out int deviceId) && // byte.TryParse(mapping[1], out byte addressNo) && // int.TryParse(mapping[2], out int siteNozzleNo)) // { // configs.ForEach(x => // { // if (x.SiteLevelNozzleId == siteNozzleNo) // { // x.DataCollectorDeviceId = deviceId; // x.DataCollectorNozzleNumber = addressNo; // } // }); // } // } // } // } // return nozzleConfigs.Sort(); // } //} }