Imports EgtUILib
Imports EgtPHOTOLib

Public Class OmagPhotoWD
   ' Riferimento alla MainWindow
   Friend m_MainWindow As MainWindow

   Private m_AddToDataBaseUC As AddToDataBaseUC
   Private m_StateList As New List(Of EgtWPFLib5.IdNameStruct)

   ' il contorno dell sfrido è definito a partire dai punti che rappresentano i vertici dello stesso
   Private m_ContornScrap As New List(Of Point3d)
   ' se lo stato della lastra è "2" significa che è già stata inserita nel DB (non devo generare una nuova foto!)
   Private m_nState As Integer = 1
   ' salvo il nome del file *.jpg 
   Private m_sFileImage As String = String.Empty

   ' definsce se il slavataggio è andato a buon fine (questa variabile deve esistere anche dopo la chiusura della finestra!)
   Public Shared m_IsAdded As Boolean = False
   Public Shared m_sDtBsId As String = ""
   Public Shared m_bSlabIsSelected As Boolean = False

   ' definisce se il grezzo è stato eliminato dal DB
   Public Shared m_IsDeleted As Boolean = False

   Public Sub New(sImage As String, ContornScrap As List(Of Point3d), MnWindow As MainWindow, nState As Integer, DatabaseID As String)

      InitializeComponent()

      ' salvo il riferimento della finestra principale
      m_MainWindow = MnWindow
      ' leggo lo stato dello sfrido per decidere quale modalità di apertuta usare
      m_nState = nState

      '--------------- CARCICO lastra esistente ---------------
      If m_nState = 2 Then
         m_bSlabIsSelected = False
         ' ricerco l'elemento già inserito nel DB
         For Each Item As Slab In EgtPHOTOLib.refProjectVM.SlabList
            Dim CurrId As String = Item.GetCurrentID.Trim
            If Item.GetCurrentID.Trim = DatabaseID.Trim Then
               EgtPHOTOLib.refProjectVM.SelSlab = Item
               m_bSlabIsSelected = True
               Exit For
            End If
         Next
         ' se non trovo nessun elemento nel db allora esco
         If IsNothing(EgtPHOTOLib.refProjectVM.SelSlab) Then
            EgtOutLog("ID is not found in database: " & DatabaseID)
            m_bSlabIsSelected = False
            Return
         End If
         ' procedo alla visualizzazione della pagina
         EgtPHOTOLib.PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.DETAIL
         ' carico la lista degli stati letta dalla libreria
         For Each Item As EgtWPFLib5.IdNameStruct In EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList
            m_StateList.Add(Item)
         Next

         ' notifico che la lastra è in modifica da questo programma
         EgtPHOTOLib.PhotoMap.refProjectVM.SelSlab.IsSelected = EgtPHOTOLib.MainData.nKey
         EgtPHOTOLib.PhotoMap.refOptionPanelVM.IsSelected()

         ' posiziono la finestra
         Me.Top = 15
         Me.Left = 15
         Return
      End If

      '--------------- DEFINSCO nuova lastra esistente ---------------
      ' imposto come prima pagina sempre la lista (per inizializzare gli elementi della libreria) → ACCELERARE il processo di creazione di questo oggetto!
      EgtPHOTOLib.PhotoMap.refProjectVM.SelProjectMode = ProjectSlabVM.ProjectModeOpt.NEWSLAB
      ' imposto il percoso della foto appena generato
      EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.ImagePath = sImage
      ' carico la foto come texture
      EgtPHOTOLib.PhotoMap.refOptionPanelVM.PostPhoto(sImage, "")
      ' carico l'elenco dei materiali (non serve...)
      EgtPHOTOLib.PhotoMap.refOptionPanelVM.SetMaterialFromDB()
      ' definisco la lista degli stati
      For Each Item As EgtWPFLib5.IdNameStruct In EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList
         m_StateList.Add(Item)
      Next

      ' imposto i dati lastra
      EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Thickness = m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight
      ' carico la lista degli stati letta dalla libreria
      EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelState = EgtPHOTOLib.PhotoMap.refOptionPanelVM.StateList(0)
      ' ricorco il materiale corrente nell'elenco dei materiali presenti nel DB (se non presente nell'elenco?)
      For Each MaterialItem As String In EgtPHOTOLib.PhotoMap.refOptionPanelVM.MaterialList
         If MaterialItem.ToLower = m_MainWindow.m_CurrentMachine.CurrMat.sName.ToLower Then
            EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Material = MaterialItem
            Exit For
         End If
      Next

      ' salvo in locale i punti che arrivano dal progetto
      m_ContornScrap = ContornScrap
      ' avvio la finestra di modifica
      Dim m_refImagePrevieV As New EgtPHOTOLib.ImagePreviewV()
      ' modifico l'immagine e salvo
      m_refImagePrevieV.SetContourScraps(m_ContornScrap)
      m_refImagePrevieV.Hide()
      m_refImagePrevieV.Show()
      m_refImagePrevieV.SaveImage()
      m_refImagePrevieV.Close()
      m_bSlabIsSelected = True

      ' posiziono la finestra
      Me.Top = 15
      Me.Left = 15
   End Sub

   ' posizionamento degli UserControl all'interno della griglia
   Private Sub OmagPhotoWD_Initialized(sender As Object, e As EventArgs) Handles Me.Initialized
      ' definisco nella pagina la posizione dello UserControl e inizializzo le liste
      m_AddToDataBaseUC = New AddToDataBaseUC(Me)
      m_AddToDataBaseUC.SetValue(Grid.ColumnProperty, 0)
      m_AddToDataBaseUC.SetValue(Grid.RowProperty, 1)
      m_AddToDataBaseUC.SetValue(Grid.RowSpanProperty, 2)
      Me.OptionSLabGrid.Children.Add(m_AddToDataBaseUC)
      m_AddToDataBaseUC.StateCmBx.ItemsSource = m_StateList
      ' recupero la scena dalla libreria e la carico nel finestra
      Dim MyScene As New EgtPHOTOLib.SceneHostSlabV(EgtPHOTOLib.PhotoMap.refSceneHostVM)
      MyScene.SetValue(Grid.ColumnProperty, 1)
      MyScene.SetValue(Grid.ColumnSpanProperty, 2)
      MyScene.SetValue(Grid.RowProperty, 1)
      Me.OptionSLabGrid.Children.Add(MyScene)
   End Sub

   ' carcio i dati della lastra
   Private Sub PostLoaded() Handles Me.Loaded
      If Not m_bSlabIsSelected Then
         Return
      End If
      ' carico i campi con i dati letti da database
      If m_nState = 2 Then
         ' provo ad eseguire la separazione dei campi 
         m_sDtBsId = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Id
         m_AddToDataBaseUC.BlockTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNameBlock
         m_AddToDataBaseUC.NbrIdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNbrID
         m_AddToDataBaseUC.StateCmBx.SelectedIndex = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.State
         m_AddToDataBaseUC.MatTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Material
         m_AddToDataBaseUC.ThicknessTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Thickness
         m_AddToDataBaseUC.ProjectTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.ProjectAssignedTo
         ' aggiorno il testo del messaggio "Add" → "Save"
         m_AddToDataBaseUC.AddBtn.Content = EgtMsg(91252)      ' Save
         Return
      End If
      ' inizializzo i campi
      'm_AddToDataBaseUC.IdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.Id
      m_AddToDataBaseUC.BlockTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNameBlock
      m_AddToDataBaseUC.NbrIdTxBx.Text = EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.sNbrID
      m_AddToDataBaseUC.StateCmBx.SelectedIndex = 0
      m_AddToDataBaseUC.MatTxBx.Text = m_MainWindow.m_CurrentMachine.CurrMat.sName
      m_AddToDataBaseUC.ThicknessTxBx.Text = LenToString(m_MainWindow.m_CurrentProjectPageUC.m_dRawHeight, 4)
      m_AddToDataBaseUC.ProjectTxBx.Text = m_MainWindow.m_CurrentProjectPageUC.GetCurrentProjectName()
      ' rendo in primo piano la finestra
      Me.Activate()
   End Sub

   Private Sub ExitBtn_Click() Handles ExitBtn.Click
      ' se esista una lastra corrente, notifico che deve essere deselezionata
      If Not IsNothing(EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab) Then
         EgtPHOTOLib.PhotoMap.refOptionPanelVM.SelSlab.IsSelected = 0
         EgtPHOTOLib.PhotoMap.refOptionPanelVM.IsSelected()
      End If
      Me.Close()
   End Sub

End Class
