Imports System.Collections.ObjectModel
Imports System.Collections.Specialized
Imports System.ComponentModel
Imports System.Windows
Imports System.Windows.Media
Imports EgtBEAMWALL.Core
Imports EgtUILib
Imports EgtWPFLib5

Public Class BTLFeatureVM
   Inherits VMBase

   Protected WithEvents m_BTLFeatureM As BTLFeatureM
   Public ReadOnly Property BTLFeatureM As BTLFeatureM
      Get
         Return m_BTLFeatureM
      End Get
   End Property
   Protected m_BTLPartM As BTLPartM

   Public ReadOnly Property nFeatureId As Integer
      Get
         Return m_BTLFeatureM.nFeatureId
      End Get
   End Property

   Public Overridable Property nSelGRP As Integer
      Get
         Return m_BTLFeatureM.nSelGRP
      End Get
      Set(value As Integer)
         m_BTLFeatureM.nSelGRP = value
      End Set
   End Property
   Public ReadOnly Property sDescGRP As String
      Get
         Dim sDescConstruction As String = String.Empty
         If CalcBeamPrivateProfileGRP(m_BTLFeatureM.nSelGRP) = 0 Then
            sDescConstruction = "L"
         Else
            sDescConstruction = "T"
         End If
         sDescConstruction &= m_BTLFeatureM.nPRC.ToString("000")
         Return sDescConstruction
      End Get
   End Property

   Public Property nPRC As Integer
      Get
         Return m_BTLFeatureM.nPRC
      End Get
      Set(value As Integer)
         m_BTLFeatureM.nPRC = value
      End Set
   End Property

   ' Lato
   Public Overridable Property nSelSIDE As Integer
      Get
         Return m_BTLFeatureM.nSelSIDE
      End Get
      Set(value As Integer)
         m_BTLFeatureM.nSelSIDE = value
      End Set
   End Property

   Public ReadOnly Property sName As String
      Get
         Return m_BTLFeatureM.sName
      End Get
   End Property

   Public Overridable Property bDO As Boolean
      Get
         Return m_BTLFeatureM.bDO
      End Get
      Set(value As Boolean)
         m_BTLFeatureM.bDO = value
      End Set
   End Property

   Public Property nPRID As Integer
      Get
         Return m_BTLFeatureM.nPRID
      End Get
      Set(value As Integer)
         m_BTLFeatureM.nPRID = value
      End Set
   End Property

   Public Property sDES As String
      Get
         Return m_BTLFeatureM.sDES
      End Get
      Set(value As String)
         m_BTLFeatureM.sDES = value
      End Set
   End Property

   Public Property frFRAME As Frame3d
      Get
         Return m_BTLFeatureM.frFRAME
      End Get
      Set(value As Frame3d)
         m_BTLFeatureM.frFRAME = value
      End Set
   End Property

   ' proprieta' che mostra la descrizione in interfaccia
   Public ReadOnly Property sDesc As String
      Get
         Return sDescGRP & " [" & nPRID & "] " & sName
      End Get
   End Property

   Public ReadOnly Property nState As CalcStates
      Get
         Return m_BTLFeatureM.nState
      End Get
   End Property

   Public ReadOnly Property nCALC_ERR As Integer
      Get
         Return m_BTLFeatureM.nCALC_ERR
      End Get
   End Property

   Public ReadOnly Property nCALC_ROT As Integer
      Get
         Return m_BTLFeatureM.nCALC_ROT
      End Get
   End Property

   Public ReadOnly Property sCALC_MSG As String
      Get
         Return m_BTLFeatureM.sCALC_MSG
      End Get
   End Property

   Public ReadOnly Property Calc_Background As SolidColorBrush
      Get
         If Not m_BTLFeatureM.bDO Then Return Brushes.Aqua
         Select Case m_BTLFeatureM.nState
            Case CalcStates.ERROR_, CalcStates.COLLISION
               Return Brushes.Red
            Case CalcStates.WARNING
               Return Brushes.Orange
            Case CalcStates.INFO, CalcStates.OK
               Return Brushes.Green
            Case CalcStates.NOTCALCULATED
               Return Brushes.LightGray
            Case Else
               Return Brushes.Red
         End Select
      End Get
   End Property

   Public ReadOnly Property CALC_ROT_Visibility As Visibility
      Get
         Return If(m_BTLFeatureM.nCALC_ROT <> 0, Visibility.Visible, Visibility.Collapsed)
      End Get
   End Property

   Public ReadOnly Property CALC_ERR_Letter As String
      Get
         Select Case m_BTLFeatureM.nState
            Case CalcStates.COLLISION
               Return "c"
            Case CalcStates.ERROR_
               Return "e"
            Case CalcStates.WARNING
               Return "w"
            Case CalcStates.INFO
               Return "i"
            Case Else
               Return ""
         End Select
      End Get
   End Property

   Public ReadOnly Property CALC_ERR_Foreground As SolidColorBrush
      Get
         Select Case m_BTLFeatureM.nState
            Case CalcStates.ERROR_, CalcStates.COLLISION
               Return Brushes.Red
            Case CalcStates.WARNING
               Return Brushes.Orange
            Case CalcStates.INFO
               Return Brushes.Green
            Case Else
               Return Brushes.Red
         End Select
      End Get
   End Property

   ' variabile che indica se rifare il pezzo
   Private m_bRedo As Boolean = True
   Public Property bRedo As Boolean
      Get
         Return m_bRedo
      End Get
      Set(value As Boolean)
         m_bRedo = value
      End Set
   End Property

#Region "CONSTRUCTOR"

   'Sub New(BTLFeatureM As BTLFeatureM, BTLPartM As BTLPartM)
   '   m_BTLFeatureM = BTLFeatureM
   '   AddHandler m_BTLFeatureM.PBTLParamAdded, AddressOf OnPBTLParamAdded
   '   AddHandler m_BTLFeatureM.QBTLParamAdded, AddressOf OnQBTLParamAdded
   '   m_BTLPartM = BTLPartM
   '   CreatePBTLParamVMList()
   '   CreateQBTLParamVMList()
   '   NotifyPropertyChanged(NameOf(Calc_Background))
   '   NotifyPropertyChanged(NameOf(CALC_ROT_Visibility))
   '   NotifyPropertyChanged(NameOf(CALC_ERR_Letter))
   '   NotifyPropertyChanged(NameOf(CALC_ERR_Foreground))
   'End Sub

   Sub New()
   End Sub

   Sub New(BTLFeatureM As BTLFeatureM)
      m_BTLFeatureM = BTLFeatureM
      m_BTLPartM = Nothing
      NotifyPropertyChanged(NameOf(Calc_Background))
      NotifyPropertyChanged(NameOf(CALC_ROT_Visibility))
      NotifyPropertyChanged(NameOf(CALC_ERR_Letter))
      NotifyPropertyChanged(NameOf(CALC_ERR_Foreground))
   End Sub

#End Region    ' CONSTRUCTOR

#Region "METHODS"

   ' funzione che seleziona la feature nella geometria
   Public Sub SelGeomFeature()
      EgtDeselectAll()
      SelGeomFeature(nFeatureId)
   End Sub

   Private Sub SelGeomFeature(nMyFeatureId As Integer)
      EgtSelectObj(nMyFeatureId)
      Dim sVal As String = ""
      If EgtGetInfo(nMyFeatureId, BTL_FTR_ADJID, sVal) Then
         Dim vAdjId() As String = sVal.Split(","c)
         For Each sAdjId In vAdjId
            Dim nAdjId As Integer
            If Integer.TryParse(sAdjId, nAdjId) Then
               SelGeomFeature(nMyFeatureId + nAdjId)
            End If
         Next
      End If
      If EgtGetInfo(nMyFeatureId, BTL_FTR_AUXID, sVal) Then
         Dim vAuxId() As String = sVal.Split(","c)
         For Each sAuxId In vAuxId
            Dim nAuxId As Integer
            If Integer.TryParse(sAuxId, nAuxId) Then
               EgtSelectObj(nMyFeatureId + nAuxId)
            End If
         Next
      End If
   End Sub

#End Region    ' METHODS

End Class
