using Microsoft.Azure.Management.AppService.Fluent; using Microsoft.Azure.Management.Fluent; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Tango.AzureUtils.Environment; using Tango.Core.Commands; namespace Tango.AzureUtils.UI.ViewModels { public class EnvironmentRemovalViewVM : AzureDashboardViewModel { private IWebAppBase _machineServiceApp; private EnvironmentManager _environmentManager; private List _deploymentSlots; public List DeploymentSlots { get { return _deploymentSlots; } set { _deploymentSlots = value; RaisePropertyChangedAuto(); } } private IDeploymentSlot _selectedDeploymentSlot; public IDeploymentSlot SelectedDeploymentSlot { get { return _selectedDeploymentSlot; } set { _selectedDeploymentSlot = value; RaisePropertyChangedAuto(); } } private String _slotName; [Required(ErrorMessage = "Deployment slot name confirmation is required.")] public String SlotName { get { return _slotName; } set { _slotName = value; RaisePropertyChangedAuto(); } } private RemoveEnvironmentConfiguration _config; public RemoveEnvironmentConfiguration Config { get { return _config; } set { _config = value; RaisePropertyChangedAuto(); } } public RelayCommand RemoveEnvironmentCommand { get; set; } public EnvironmentRemovalViewVM() { RemoveEnvironmentCommand = new RelayCommand(RemoveEnvironment); Config = new RemoveEnvironmentConfiguration(); } public override void OnAuthenticated(IAzure azure, List apps) { _machineServiceApp = apps.SingleOrDefault(x => x.Name == "MachineService"); DeploymentSlots = apps.OfType().Where(x => x.Parent == _machineServiceApp).ToList(); SelectedDeploymentSlot = DeploymentSlots.FirstOrDefault(); _environmentManager = new EnvironmentManager(azure); _environmentManager.ConfirmationRequired += ConfirmationHandler; _environmentManager.Progress += ProgressHandler; } private async void RemoveEnvironment() { try { if (!Validate()) return; IsFree = false; Config.Email = Settings.Email; Config.Password = Settings.Password; await _environmentManager.RemoveEnvironment(SelectedDeploymentSlot, SlotName, Config); } catch (Exception ex) { StatusManager.UpdateStatus(ex); } finally { RequireRefresh(); IsFree = true; } } protected override void OnRefreshRequired() { base.OnRefreshRequired(); SelectedDeploymentSlot = null; } } }