using Edge.Core.IndustryStandardInterface.ATG; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Applications.UniversalApi_WebConsole_App { public class MockAutoTankGaugeController : IAutoTankGaugeController { public string MetaConfigName => "I'm a mock controller"; public int DeviceId => 999; //private List tanks; public IEnumerable Tanks { get; } public SystemUnit SystemUnit { get; } public AtgState State => throw new NotImplementedException(); public event EventHandler OnStateChange; public event EventHandler OnAlarm; public MockAutoTankGaugeController(List tanks, SystemUnit systemUnit) { this.Tanks = tanks; this.SystemUnit = systemUnit; } public void FireOnStateChangeEvent(AtgState state) { var safe = this.OnStateChange; safe?.Invoke(this, new AtgStateChangeEventArg(state,"")); } public Task> GetTankDeliveryAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null) { //if (tankNumber.HasValue) // if (!this.Tanks.Select(t => t.TankNumber).Contains((byte)tankNumber)) throw new ArgumentException("Controller does not have such a tank with number: " + tankNumber.Value); if (tankNumber == null) { return Task.FromResult(this.Tanks.Select(t => new Edge.Core.IndustryStandardInterface.ATG.Delivery() { TankNumber = t.TankNumber, StartingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 0, 0)), EndingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 10, 0)), })); } else { return Task.FromResult(this.Tanks.Where(t => t.TankNumber == tankNumber) .Select(t => new Edge.Core.IndustryStandardInterface.ATG.Delivery() { TankNumber = t.TankNumber, StartingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 0, 0)), EndingDateTime = DateTime.Now.Subtract(new TimeSpan(24 + t.TankNumber * 24, 10, 0)), })); } } public async Task GetTankReadingAsync(int tankNumber) { return new TankReading() { Height = 1800 - new Random().Next(100, 1000), Water = 0 + new Random().Next(10, 500), Temperature = 20 + new Random().Next(1, 30), Volume = 4000 + new Random().Next(100, 2000), WaterVolume = 100 + new Random().Next(2, 200), }; } public Task> GetTankInventoryAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null) { throw new NotImplementedException(); } public Task> GetTankAlarmAsync(int tankNumber, int pageRowCount = 10, int pageIndex = 0, DateTime? filterTimestamp = null) { throw new NotImplementedException(); } //public async Task> GetTankReadingAsync(int? tankNumber) //{ // List tankReadings = new List(); // foreach (var tank in this.Tanks) // { // var reading = new TankReadingDto // { // tankNumber = tank.TankNumber, // Height = 1800 - new Random().Next(100, 1000), // Water = 0 + new Random().Next(10, 500), // Temperature = 20 + new Random().Next(1, 30), // Volume = 4000 + new Random().Next(100, 2000), // WaterVolume = 100 + new Random().Next(2, 200), // }; // tankReadings.Add(reading); // }; // if (tankNumber.HasValue) // return tankReadings.Where(r => r.tankNumber == tankNumber.Value); // else // return tankReadings; //} } }