Imports System.Collections.ObjectModel
Imports System.IO
Imports EgtUILib
Imports EgtWPFLib5
Imports EgtBEAMWALL.Core

Public Class MyInstrumentPanelVM
   Inherits InstrumentPanelVM

   Public ReadOnly Property ChangeParam_Visibility As Visibility
      Get
         Return If(Map.refMainMenuVM.SelPage = Pages.VIEW, Visibility.Visible, Visibility.Collapsed)
      End Get
   End Property

   Public ReadOnly Property ChangeMaterial_Visibility As Visibility
      Get
         Return If(Map.refMainWindowVM.MainWindowM.nUserLevel > 5 AndAlso Map.refMainMenuVM.SelPage = Pages.VIEW, Visibility.Visible, Visibility.Collapsed)
      End Get
   End Property

   Private m_InstrumentPanel_IsEnabled As Boolean = True
   Public Property InstrumentPanel_IsEnabled As Boolean
      Get
         Return m_InstrumentPanel_IsEnabled
      End Get
      Set(value As Boolean)
         m_InstrumentPanel_IsEnabled = value
      End Set
   End Property

   Private m_Statistics_IsEnabled As Boolean = True
   Public Property Statistics_IsEnabled As Boolean
      Get
         Return m_Statistics_IsEnabled
      End Get
      Set(value As Boolean)
         m_Statistics_IsEnabled = value
      End Set
   End Property

   Dim m_PrevBottomPanelPage As BottomPanelVM.PartFeatureTab = BottomPanelVM.PartFeatureTab.STRUCTURE_
   Private m_Statistics_IsChecked As Boolean = False
   Public Property Statistics_IsChecked As Boolean
      Get
         Return m_Statistics_IsChecked
      End Get
      Set(value As Boolean)
         m_Statistics_IsChecked = value
         If Map.refMainMenuVM.SelPage = Pages.VIEW Then
            If value Then
               ' salvo pagina precedente
               m_PrevBottomPanelPage = Map.refBottomPanelVM.SelPartFeatureTab
               ' aggiorno valori totali
               Map.refProjectVM.BTLStructureVM.CalcGlobalUpdate()
               ' seleziono pagina Statistics
               Map.refBottomPanelVM.SetSelPartFeatureTab(BottomPanelVM.PartFeatureTab.STATISTICS)
            Else
               ' seleziono pagina precedente
               Map.refBottomPanelVM.SetSelPartFeatureTab(m_PrevBottomPanelPage)
            End If
         ElseIf Map.refMainMenuVM.SelPage = Pages.MACHINING Then
            If value Then
               ' aggiorno valori totali
               If Not IsNothing(Map.refProjectVM.MachGroupPanelVM) Then Map.refProjectVM.MachGroupPanelVM.CalcGlobalUpdate()
               ' aggiorno conto materiali usati
               If Not IsNothing(Map.refProdManagerVM.CurrProd) Then Map.refStatisticsVM.LoadRawPart()
               ' seleziono pagina Statistics
               Map.refTopPanelVM.SetSelTab(TopPanelVM.Tabs.STATISTICS)
            Else
               ' seleziono pagina precedente
               Map.refTopPanelVM.SetSelTab(TopPanelVM.Tabs.OPTIMIZATION)
            End If
         End If
      End Set
   End Property
   Friend Sub SetStatisticsIsChecked(value As Boolean)
      m_Statistics_IsChecked = value
      NotifyPropertyChanged(NameOf(Statistics_IsChecked))
   End Sub

   ' Definizione comandi
   Private m_cmdData As ICommand
   Private m_cmdChangeParameter As ICommand
   Private m_cmdChangeMaterial As ICommand
   Private m_cmdStatistics As ICommand

#Region "Messages"

   Public ReadOnly Property ChangeParam_ToolTip As String
      Get
         Return EgtMsg(61900)
      End Get
   End Property

   Public ReadOnly Property ChangeMaterial_ToolTip As String
      Get
         Return EgtMsg(61961)
      End Get
   End Property

   Public ReadOnly Property Statistics_Msg As String
      Get
         Return EgtMsg(61923)
      End Get
   End Property

#End Region    ' Messages

#Region "CONSTRUCTORS"

   Sub New()
      ' imposto riferimento in Map
      Map.SetRefInstrumentPanelVM(Me)
   End Sub

#End Region    ' CONSTRUCTORS

#Region "METHODS"

   Public Overrides Function OnPostGetDistIsChecked() As Boolean
      If Not Map.refFreeContourManagerVM.bIsActive Then Map.refSceneHostVM.MainScene.SetStatusNull()
      Return True
   End Function

   Friend Sub SetGetDistance_IsChecked(bIsChecked As Boolean)
      GetDistIsChecked = bIsChecked
   End Sub

   Friend Sub ResetStatisticsIsChecked()
      If Statistics_IsChecked Then
         Statistics_IsChecked = False
         NotifyPropertyChanged(NameOf(Statistics_IsChecked))
      End If
   End Sub

   Friend Sub SetInstrumentPanelIsEnabled(bIsEnabled As Boolean)
      m_InstrumentPanel_IsEnabled = bIsEnabled
      NotifyPropertyChanged(NameOf(InstrumentPanel_IsEnabled))
      If Map.refFreeContourManagerVM.bIsActive Then
         m_Statistics_IsEnabled = bIsEnabled
      Else
         m_Statistics_IsEnabled = True
      End If
      NotifyPropertyChanged(NameOf(Statistics_IsEnabled))
   End Sub

#End Region    ' METHODS

#Region "COMMANDS"

#Region "Data"

   ''' <summary>
   ''' Returns a command that do Open.
   ''' </summary>
   Public ReadOnly Property Data_Command As ICommand
      Get
         If m_cmdData Is Nothing Then
            m_cmdData = New Command(AddressOf Data)
         End If
         Return m_cmdData
      End Get
   End Property

   ''' <summary>
   ''' Execute the Open.  This method is invoked by the OpenCommand.
   ''' </summary>
   Friend Sub Data()
      Dim BTLDataWnd As New BTLDataWndV(Application.Current.MainWindow, New BTLDataWndVM())
      BTLDataWnd.ShowDialog()
   End Sub

#End Region ' Data

#Region "ChangeParameter"

   ''' <summary>
   ''' Returns a command that do Open.
   ''' </summary>
   Public ReadOnly Property ChangeParameter_Command As ICommand
      Get
         If m_cmdChangeParameter Is Nothing Then
            m_cmdChangeParameter = New Command(AddressOf ChangeParameter)
         End If
         Return m_cmdChangeParameter
      End Get
   End Property

   ''' <summary>
   ''' Execute the Open.  This method is invoked by the OpenCommand.
   ''' </summary>
   Friend Sub ChangeParameter()
      If (Map.refMainMenuVM.SelPage = Pages.VIEW AndAlso (IsNothing(Map.refProjManagerVM.CurrProj) OrElse IsNothing(Map.refProjectVM.BTLStructureVM)) OrElse
         (Map.refMainMenuVM.SelPage = Pages.MACHINING AndAlso (IsNothing(Map.refProdManagerVM.CurrProd) OrElse IsNothing(Map.refProjectVM.MachGroupPanelVM)))) Then Return
      Dim ChangeParameterWndVM As New ChangeParameterWndVM
      Dim ChangeParameterWnd As New ChangeParameterWndV(Application.Current.MainWindow, ChangeParameterWndVM)
      If ChangeParameterWnd.ShowDialog() Then
         LoadingWndHelper.OpenLoadingWnd(ActiveIds.CHANGEPARAM, 1, EgtMsg(63014), "", 100)       ' Modifying parameters
         ' faccio passare pezzi
         If Not IsNothing(ChangeParameterWndVM.SelParam) Then
            For Each Part In Map.refProjectVM.BTLStructureVM.BTLPartVMList
               For Each Feature In Part.BTLFeatureVMList.Where(Function(x) x.nPRC = ChangeParameterWndVM.SelPRC.nPRC AndAlso CalcBeamPrivateProfileGRP(x.nSelGRP) = ChangeParameterWndVM.SelPRC.nGRP)
                  If ChangeParameterWndVM.SelParam.BTLParamM.nType = BTLParamType.CHECKBOX AndAlso Feature.bDO = ChangeParameterWndVM.SelParam.bActualValue Then
                     Feature.bDO = ChangeParameterWndVM.SelParam.bNewValue
                  Else
                     Dim ParamList As ObservableCollection(Of BTLParamVM)
                     If ChangeParameterWndVM.SelParam.BTLParamM.bIsP Then
                        ParamList = Feature.PBTLParamVMList
                     Else
                        ParamList = Feature.QBTLParamVMList
                     End If
                     For Each Param In ParamList.Where(Function(x) x.sName = ChangeParameterWndVM.SelParam.sName)
                        Select Case Param.nType
                           Case BTLParamType.DOUBLE_, BTLParamType.LENGTH
                              If Math.Abs( Param.dValue - ChangeParameterWndVM.SelParam.dActualValue) < EPS_SMALL Then
                                 Param.UpdateParamValue(ChangeParameterWndVM.SelParam.dNewValue, "")
                              End If
                           Case BTLParamType.STRING_
                              If Param.sValue = ChangeParameterWndVM.SelParam.sActualValue Then
                                 Param.UpdateParamValue(0, ChangeParameterWndVM.SelParam.sNewValue)
                              End If
                        End Select
                     Next
                  End If
               Next
            Next
         End If
         LoadingWndHelper.CloseLoadingWnd(ActiveIds.CHANGEPARAM)
      End If
   End Sub

#End Region ' ChangeParameter

#Region "ChangeMaterial"

   ''' <summary>
   ''' Returns a command that do Open.
   ''' </summary>
   Public ReadOnly Property ChangeMaterial_Command As ICommand
      Get
         If m_cmdChangeMaterial Is Nothing Then
            m_cmdChangeMaterial = New Command(AddressOf ChangeMaterial)
         End If
         Return m_cmdChangeMaterial
      End Get
   End Property

   ''' <summary>
   ''' Execute the Open.  This method is invoked by the OpenCommand.
   ''' </summary>
   Friend Sub ChangeMaterial()
      If (Map.refMainMenuVM.SelPage = Pages.VIEW AndAlso (IsNothing(Map.refProjManagerVM.CurrProj) OrElse IsNothing(Map.refProjectVM.BTLStructureVM)) OrElse
         (Map.refMainMenuVM.SelPage = Pages.MACHINING AndAlso (IsNothing(Map.refProdManagerVM.CurrProd) OrElse IsNothing(Map.refProjectVM.MachGroupPanelVM)))) Then Return
      Dim ChangeMaterialWndVM As New ChangeMaterialWndVM
      Dim ChangeMaterialWnd As New ChangeMaterialWndV(Application.Current.MainWindow, ChangeMaterialWndVM)
      If ChangeMaterialWnd.ShowDialog() Then
         LoadingWndHelper.OpenLoadingWnd(ActiveIds.CHANGEMATERIAL, 1, EgtMsg(63021), "", 100)       ' Modifying materials
         ' faccio passare pezzi
         If Not IsNothing(ChangeMaterialWndVM.SelProjMaterial) AndAlso Not IsNothing(ChangeMaterialWndVM.SelWhMaterial) Then
            For Each Part In Map.refProjectVM.BTLStructureVM.BTLPartVMList.Where(Function(x) x.sMATERIAL = ChangeMaterialWndVM.SelProjMaterial)
               Part.sMATERIAL = ChangeMaterialWndVM.SelWhMaterial
            Next
         End If
         LoadingWndHelper.CloseLoadingWnd(ActiveIds.CHANGEMATERIAL)
      End If
   End Sub

#End Region ' ChangeMaterial

#End Region    ' COMMANDS

End Class
