using System;
using System.Data.Entity;
using System.Linq;
using Tango.BL;
using Tango.BL.Entities;
using Tango.Core.DI;
using Tango.Integration.Operation;
using Tango.PMR.Diagnostics;
using Tango.PPC.Common;
using Tango.PPC.Common.Application;
using Tango.PPC.Common.Connection;
using Tango.PPC.Common.Notifications;
using Tango.Settings;
using Tango.SharedUI;
using Tango.PPC.Common.UWF;
using Tango.Core.Commands;
using Tango.PPC.Common.OS;
using System.Collections.Generic;
using System.Diagnostics;
using System.Management;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Timers;
using Tango.PMR.FirmwareUpgrade;
namespace Tango.PPC.UI.Dialogs
{
public class GeneralInformationViewVM : DialogViewVM
{
[TangoInject]
public IMachineProvider MachineProvider { get; set; }
[TangoInject]
public IPPCApplicationManager ApplicationManager { get; set; }
private PPCSettings _settings;
///
/// Gets the main PPC settings.
///
public PPCSettings Settings
{
get
{
if (_settings == null)
{
_settings = SettingsManager.Default.GetOrCreate();
}
return _settings;
}
private set { _settings = value; }
}
public Site CurrentSite { get; set; }
public String SiteName
{
get { return CurrentSite == null ? "" : CurrentSite.Name; }
}
private String _ipAddress;
public String IPAddress
{
get { return _ipAddress; }
set { _ipAddress = value; RaisePropertyChangedAuto(); }
}
private String _totalDyeTime;
public String TotalDyeTime
{
get { return _totalDyeTime; }
set { _totalDyeTime = value; RaisePropertyChangedAuto(); }
}
private String _totalDyeMeters;
public String TotalDyeMeters
{
get { return _totalDyeMeters; }
set { _totalDyeMeters = value; RaisePropertyChangedAuto(); }
}
private TimeSpan _upTime;
public TimeSpan UpTime
{
get { return _upTime; }
set { _upTime = value; RaisePropertyChangedAuto(); }
}
private string _headFirmware;
public string HeadFirmware
{
get { return _headFirmware; }
set { _headFirmware = value; RaisePropertyChangedAuto(); }
}
private string _dryerFirmware;
public string DryerFirmware
{
get { return _dryerFirmware; }
set { _dryerFirmware = value; RaisePropertyChangedAuto(); }
}
private string _MidtanksFirmware;
public string MidtanksFirmware
{
get { return _MidtanksFirmware; }
set { _MidtanksFirmware = value; RaisePropertyChangedAuto(); }
}
private string _lubricantFirmware;
public string LubricantFirmware
{
get { return _lubricantFirmware; }
set { _lubricantFirmware = value; RaisePropertyChangedAuto(); }
}
private string _dispensersFWFirmware;
public string DispensersFWFirmware
{
get { return _dispensersFWFirmware; }
set { _dispensersFWFirmware = value; RaisePropertyChangedAuto(); }
}
private string _windersFWFirmware;
public string WindersFWFirmware
{
get { return _windersFWFirmware; }
set { _windersFWFirmware = value; RaisePropertyChangedAuto(); }
}
public GeneralInformationViewVM( IMachineProvider provider, IPPCApplicationManager appManager)
{
MachineProvider = provider;
ApplicationManager = appManager;
InitSite();
IPAddress = GetIpv4Address();
InitTotalDyeProp();
UpTime = DateTime.Now - ApplicationManager.StartUpDate;
}
public override void OnShow()
{
base.OnShow();
GetFirmwareVersionDescriptors();
}
public async void InitSite()
{
if (CurrentSite == null)
{
var machine = MachineProvider.Machine;
if (machine != null && !String.IsNullOrEmpty(machine.SiteGuid))
{
using (ObservablesContext db = ObservablesContext.CreateDefault())
{
var site = (await db.Sites.Where(x => x.Guid == machine.SiteGuid).ToListAsync()).FirstOrDefault();
CurrentSite = site;
RaisePropertyChanged(nameof(SiteName));
}
}
}
}
public String GetIpv4Address()
{
try
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ip in host.AddressList)
{
if (ip.AddressFamily == AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return "N/A";
}
catch (Exception ex)
{
return "N/A";
}
}
public async void InitTotalDyeProp()
{
try
{
using (ObservablesContext db = ObservablesContext.CreateDefault())
{
var jobRuns = await db.JobRuns.Select(x => new { x.StartDate, x.EndDate, x.EndPosition }).ToListAsync();
TotalDyeTime = TimeSpan.FromHours(jobRuns.Select(x => x.EndDate - x.StartDate).Sum(x => x.TotalHours)).ToStringUnlimitedHours();
int meters = (int)jobRuns.Select(x => x.EndPosition).Sum();
TotalDyeMeters = $"{meters.ToString("N0")} meters";
}
}
catch (Exception ex)
{
LogManager.Log(ex, "Error loading machine counters.");
TotalDyeTime = "error!";
TotalDyeMeters = "error!";
}
}
public async void GetFirmwareVersionDescriptors()
{
try
{
var descriptors = await MachineProvider.MachineOperator.GetFirmwareVersionDescriptors();
HeadFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.HeadCardSw);
DryerFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.DryerCardSw);
MidtanksFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.MidTankCardSw);
LubricantFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.LubricantCardSw);
DispensersFWFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.PumpCardSw);
WindersFWFirmware = GetVersionByFileDescriptor(descriptors, VersionFileDestination.WinderCardSw);
}
catch (Exception ex)
{
LogManager.Log(ex, "GetFirmwareVersionDescriptors");
}
}
private String GetVersionByFileDescriptor(List descriptors, VersionFileDestination dtype)
{
var descriptor = descriptors.Where(x => x.Destination == dtype).FirstOrDefault();
return descriptor != null ? descriptor.Version : "";
}
}
}