using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
using Tango.BL;
using Tango.BL.Entities;
using Tango.BL.Enumerations;
using Tango.Core.Commands;
using Tango.Core.DI;
using Tango.PPC.Common;
using Tango.PPC.Common.Connection;
using Tango.PPC.Common.ExternalBridge;
using Tango.PPC.Common.Messages;
using Tango.SharedUI.Components;
using Tango.WiFi;
namespace Tango.PPC.MachineSettings.ViewModels
{
///
/// Represents the main view VM and entry point for .
///
///
public class MainViewVM : PPCViewModel
{
#region Properties
private Machine _machine;
public Machine Machine
{
get { return _machine; }
set { _machine = value; RaisePropertyChangedAuto(); }
}
private SelectedObjectCollection _selectedJobTypes;
public SelectedObjectCollection SelectedJobTypes
{
get { return _selectedJobTypes; }
set { _selectedJobTypes = value; RaisePropertyChangedAuto(); }
}
private SelectedObjectCollection _selectedColorSpaces;
public SelectedObjectCollection SelectedColorSpaces
{
get { return _selectedColorSpaces; }
set { _selectedColorSpaces = value; RaisePropertyChangedAuto(); }
}
private bool _enableHotSpot;
public bool EnableHotSpot
{
get { return _enableHotSpot; }
set { _enableHotSpot = value; RaisePropertyChangedAuto(); OnEnableHotSpotChanged(); }
}
private String _hotSpotPassword;
public String HotSpotPassword
{
get { return _hotSpotPassword; }
set { _hotSpotPassword = value; RaisePropertyChangedAuto(); }
}
private bool _enableExternalBridge;
public bool EnableExternalBridge
{
get { return _enableExternalBridge; }
set { _enableExternalBridge = value; RaisePropertyChangedAuto(); OnEnableExternalBridgeChanged(); }
}
private String _externalBridgePassword;
public String ExternalBridgePassword
{
get { return _externalBridgePassword; }
set { _externalBridgePassword = value; RaisePropertyChangedAuto(); }
}
private bool _enableRemoteAssistance;
public bool EnableRemoteAssistance
{
get { return _enableRemoteAssistance; }
set { _enableRemoteAssistance = value; RaisePropertyChangedAuto(); OnEnableRemoteAssistanceChanged(); }
}
#endregion
#region Commands
///
/// Gets or sets the save command.
///
public RelayCommand SaveCommand { get; set; }
///
/// Gets or sets the discard command.
///
public RelayCommand DiscardCommand { get; set; }
#endregion
public MainViewVM()
{
SaveCommand = new RelayCommand(Save);
DiscardCommand = new RelayCommand(Discard);
}
private void Discard()
{
NavigationManager.NavigateBack();
}
private async void Save()
{
if (Validate())
{
Machine.SupportedJobTypes = SelectedJobTypes.SynchedSource.ToList();
Machine.SupportedColorSpaces = SelectedColorSpaces.SynchedSource.ToList();
Machine.MapPrimitivesWithStrings(MachineProvider.Machine);
Settings.EnableHotSpot = EnableHotSpot;
Settings.HotSpotPassword = HotSpotPassword;
Settings.EnableExternalBridge = EnableExternalBridge;
Settings.ExternalBridgePassword = ExternalBridgePassword;
Settings.Save();
await MachineProvider.SaveMachine();
await NavigationManager.NavigateBack();
}
}
protected override void OnValidating()
{
base.OnValidating();
}
///
/// Called when the application has been started
///
public override void OnApplicationStarted()
{
}
public override void OnNavigatedTo()
{
base.OnNavigatedTo();
Machine = MachineProvider.Machine.ShallowClone();
RaisePropertyChanged(nameof(Machine));
_enableHotSpot = HotSpotProvider.IsEnabled;
RaisePropertyChanged(nameof(EnableHotSpot));
HotSpotPassword = Settings.HotSpotPassword;
_enableExternalBridge = ExternalBridgeService.Enabled;
RaisePropertyChanged(nameof(EnableExternalBridge));
ExternalBridgePassword = Settings.ExternalBridgePassword;
_enableRemoteAssistance = RemoteAssistanceProvider.IsEnabled;
RaisePropertyChanged(nameof(EnableRemoteAssistance));
SelectedJobTypes = new SelectedObjectCollection(Enum.GetValues(typeof(JobTypes)).Cast().ToObservableCollection(), Machine.SupportedJobTypes.ToObservableCollection());
SelectedColorSpaces = new SelectedObjectCollection(Enum.GetValues(typeof(ColorSpaces)).Cast().Where(x => x.IsUserSpace()).ToObservableCollection(), Machine.SupportedColorSpaces.ToObservableCollection());
}
private async void OnEnableRemoteAssistanceChanged()
{
if (EnableRemoteAssistance)
{
try
{
await RemoteAssistanceProvider.EnableRemoteAssistance();
}
catch
{
await NotificationProvider.ShowError("An error occurred while trying to activate the remote assistance service. Please check your device settings and try again.");
_enableRemoteAssistance = false;
}
}
else
{
try
{
await RemoteAssistanceProvider.DisableRemoteAssistance();
}
catch
{
await NotificationProvider.ShowError("An error occurred while trying to deactivate the remote assistance service. Please check your device settings and try again.");
_enableRemoteAssistance = true;
}
}
RaisePropertyChanged(nameof(EnableRemoteAssistance));
}
private async void OnEnableHotSpotChanged()
{
if (EnableHotSpot)
{
if (HotSpotPassword == null || HotSpotPassword.Length < 8 || HotSpotPassword.Length > 16)
{
await NotificationProvider.ShowError("Hot spot requires a password of 8 to 16 characters.");
_enableHotSpot = false;
RaisePropertyChanged(nameof(EnableHotSpot));
return;
}
try
{
await HotSpotProvider.EnableHotSpot(HotSpotPassword);
}
catch
{
await NotificationProvider.ShowError("An error occurred while trying to activate the hot spot network. Please check your device settings and try again.");
_enableHotSpot = false;
}
}
else
{
try
{
await HotSpotProvider.DisableHotSpot();
}
catch
{
await NotificationProvider.ShowError("An error occurred while trying to deactivate the hot spot network.");
_enableHotSpot = true;
}
}
RaisePropertyChanged(nameof(EnableHotSpot));
}
private void OnEnableExternalBridgeChanged()
{
ExternalBridgeService.Enabled = EnableExternalBridge;
}
}
}