Imports IntraSell_DLL
Imports IntraSell_Net_Base

''' <summary>
''' Runs in UI Thread
''' </summary>
Public Class ImportAuftragListener

    Dim commandsInPipe As New List(Of IntraSellCommand)
    Dim commandsReceived As New List(Of IntraSellCommand)
    Dim localeSettings As New ClassSettings
    Dim PcHatSignaturEinheit As Boolean

    Public Sub Init()
        PcHatSignaturEinheit = localeSettings.ReadBoolean(Variablen.PcHatSignaturEinheit, True)
        AddHandler ModuleGlobal.CommandRequestEvent, AddressOf CommandRequestHandler
    End Sub

    Public Sub Destroy()
        RemoveHandler ModuleGlobal.CommandRequestEvent, AddressOf CommandRequestHandler
    End Sub

    ''' <summary>
    ''' Handles commands from the events 
    ''' E.g. open;AU;201700001
    ''' </summary>
    ''' <param name="cmd"></param>
    ''' <remarks></remarks>
    Sub CommandRequestHandler(cmd As IntraSellCommand)
        Try
            If commandsReceived.Contains(cmd) Then
                Exit Sub
            Else
                commandsReceived.Add(cmd)
                commandsInPipe.Add(cmd)
            End If
        Catch ex As Exception
            'macht nix.. weder msg noch log hilft mehr 
            IntraSell_Net_Base.Log("Fehler in CommandRequestHandler " & ex.Message)
            IntraSell_Net_Base.Log(ex)
        End Try
    End Sub

    Sub Run()
        Try
            If commandsInPipe.Count = 0 Then
                ExecuteTasks(PcHatSignaturEinheit)
                Return
            End If

            Dim cmd As IntraSellCommand = commandsInPipe.ElementAt(0)
            commandsInPipe.RemoveAt(0)

            Dim vorgInBearb As VorgangInBearbeitung = Nothing

            If cmd.command.Equals(IntraSellCommands.Neu) OrElse
               cmd.command.Equals(IntraSellCommands.Open) OrElse
               cmd.command.Equals(IntraSellCommands.Print) OrElse
               cmd.command.Equals(IntraSellCommands.AbschliessenOhneRechnung) OrElse
               cmd.command.Equals(IntraSellCommands.Abschliessen) OrElse
               cmd.command.Equals(IntraSellCommands.Info) Then

                If TypeOf cmd Is IntraSellVorgangCommand Then
                    Dim c = CType(cmd, IntraSellVorgangCommand)
                    vorgInBearb = LadeVorgang(c.Typ, c.Nummer)
                ElseIf TypeOf cmd Is IntraSellVorgangInfoCommand Then
                    Dim c = CType(cmd, IntraSellVorgangInfoCommand)
                    vorgInBearb = LadeVorgang(c.Typ, c.Nummer)
                End If

            Else
                Return
            End If

            WriteDebug("ImportAuftragListener.Run cmd " & cmd.Serialize)

            If vorgInBearb Is Nothing Then
                Dim msg = $"Fehler in ImportAuftragListener.Run. Vorgang für Command '{cmd.Serialize}' konnte nicht geladen werden."
                WriteLog(msg)
                Return
            End If


            If cmd.command = IntraSellCommands.Neu Then
                Dim txt As String = "Neue Bestellung " '  " & Nummer & " - Details finden Sie in IntraSell."
                SetVorgangStatusUndSendeMessageFuerStatus(vorgInBearb, VorgangStatus.NEU, MitarbeiterID, Nothing, txt)

            ElseIf cmd.command = IntraSellCommands.Open Then
                Dim v As Vorgang = OeffneVorgangByNummer(vorgInBearb.Typ, vorgInBearb.Nummer, True)
                v.ShowTouch()

            ElseIf cmd.command = IntraSellCommands.Print Then
                AuftragKueche(vorgInBearb, "ALLE")
                SetAusgedruckt(vorgInBearb.Typ, vorgInBearb.Nummer)

            ElseIf cmd.command = IntraSellCommands.AbschliessenOhneRechnung Then
                SetAbgeschlossen(vorgInBearb.Typ, vorgInBearb.Nummer)

            ElseIf cmd.command = IntraSellCommands.Abschliessen Then
                VorgangAbschliessenEinreihen(vorgInBearb.Typ, vorgInBearb.Nummer, silent:=True, pruefeGegebenBar:=False)

                If VarValue_Default(PRINT_ZWEITE_RECHNUNG_FUER_ZUSTELLUNGEN, False) Then
                    VorgangDrucken(vorgInBearb.Typ, vorgInBearb.Nummer, isUeberleitung:=False, showPreview:=VarValue_Default(PRINT_AM_BILDSCHIRM, False))
                End If

            ElseIf cmd.command = IntraSellCommands.Info Then
                'Sende Vorgang Info 
                If TypeOf (cmd) Is IntraSellVorgangInfoCommand Then
                    intrasell.vorgang.SetVorgangZustellzeitBestaetigt(vorgInBearb.Typ, vorgInBearb.Nummer, CType(cmd, IntraSellVorgangInfoCommand).Info)
                End If
            End If

        Catch ex As Exception
            'macht nix.. weder msg noch log hilft mehr 
            IntraSell_Net_Base.Log("Fehler in ImportAuftragListener.Run " & ex.Message)
            IntraSell_Net_Base.Log(ex)
        End Try
    End Sub

End Class
