'Option Strict On
Option Explicit On
Imports IntraSell_DLL
Imports IntraSell_Net_Base
Imports MySql.Data.MySqlClient

Public Class ZustellerDashboard
    Dim _MitarbeiterNr As Integer = MitarbeiterID


    Public Property MitarbeiterNr As Integer
        Get
            Return _MitarbeiterNr
        End Get
        Set(value As Integer)
            _MitarbeiterNr = value
            OrderListe.CurrentMitarbeiterNr = value
        End Set
    End Property

    Shared MitarbeiterName As String

    Dim FremdeTischeBedienen As Boolean = True
    Dim MessageLabel As New Label
    Dim settings As New ClassSettings()

    Dim TOUCH_ORDERS_LISTE As Boolean = False

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub TouchOrders_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            ApplyStyle
            FremdeTischeBedienen = HasRecht(Rechte.Fremde_Tische_bedienen)
            TOUCH_ORDERS_LISTE = VarValue_Default("TOUCH_ORDERS_LISTE_" & Net.Dns.GetHostName, True)

            AddHandler OrderListe.Selected, AddressOf OrderListeSelectedChanged
            DatenAktualisieren()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Sub ApplyStyle()
        ModuleStyle.StylePanel(TableLayoutPanel2)

        ModuleStyle.StyleButton(ButtonWechel)
        ModuleStyle.StyleButton(ButtonFahrerAbrechnung)
        ModuleStyle.StyleButton(ButtonAktualisieren)
        ModuleStyle.StyleButton(ButtonRestaurantKassa)
        ModuleStyle.StyleButton(ButtonSchliessen)
    End Sub

    Private Sub ButtonAktualisieren_Click(sender As Object, e As EventArgs) Handles ButtonAktualisieren.Click
        DatenAktualisieren()
    End Sub

    ''' <summary>
    ''' Eine bestehende Bestellung öffnen oder eine neue starten 
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub Order_Click(sender As Object, e As EventArgs)
        Dim btn As Button = CType(sender, Button)
        If TypeOf btn.Tag Is OffeneBestellung Then
            Dim offeneBestellung As OffeneBestellung = btn.Tag
            OeffneBestellung(offeneBestellung)
        End If
    End Sub

    Private Sub UcMitarbeiter1_MitarbeiterSelected(ByRef MitarbeiterNr As Integer, ByRef MitarbeiterName As String) Handles UcMitarbeiter1.MitarbeiterSelected
        Try
            LabelMsg.Text = "Markiere Deine Bestellungen!"
            Cursor = Cursors.Hand
            ' LabelMitarbeiterName.Text = MitarbeiterName
            ' SetControlsState()
            Me.MitarbeiterNr = MitarbeiterNr
            'DatenAktualisieren()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub ButtonSchliessen_Click(sender As Object, e As EventArgs) Handles ButtonSchliessen.Click
        Try
            CType(Parent, Form).Close()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="p"></param>
    ''' <param name="tag"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function FindByTag(p As Panel, tag As String) As Control
        For Each c As Control In p.Controls
            If c.Tag IsNot Nothing Then
                If c.Tag = tag Then Return c
            End If
        Next
        Return Nothing
    End Function

    Public Sub DatenAktualisieren()
        Try
            Cursor = Cursors.WaitCursor
            ''If LayoutModus Then Exit Sub
            ''DatenAktualisierenMitarbeiter()
            DatenAktualisierenOrdersAsListe()
            UcMitarbeiter1.DatenAktualisierenMitarbeiter()
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub TimerRefresh_Tick(sender As Object, e As EventArgs) Handles TimerRefresh.Tick
        DatenAktualisieren()
    End Sub

    Private Sub ButtonRestaurantKassa_Click(sender As Object, e As EventArgs) Handles ButtonRestaurantKassa.Click
        ShowRestaurantKassa()
    End Sub

    Private Sub FlowLayoutPanelOrders_Paint(sender As Object, e As PaintEventArgs)

    End Sub

    Private Sub ButtonWechel_Click(sender As Object, e As EventArgs) Handles ButtonWechel.Click
        Try
            Login.Logout()
            Login.ShowDialog()
            MitarbeiterNr = MitarbeiterID
            UcMitarbeiter1.DatenAktualisierenMitarbeiter()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    ''' <summary>
    ''' 
    ''' </summary>
    ''' <remarks></remarks>
    Sub DatenAktualisierenOrdersAsListe()
        Try
            OrderListe.LadeDaten()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Public Sub ZeigeListe(alsListe As Boolean)
        TOUCH_ORDERS_LISTE = alsListe
        SetVarValue("TOUCH_ORDERS_LISTE_" & Net.Dns.GetHostName, alsListe)
    End Sub

    Sub StarteNeueBestellung(neueBestellung As OffeneBestellung)
        OeffneBestellung(neueBestellung)
    End Sub

    Private Sub OeffneBestellung(offeneBestellung As OffeneBestellung)

        Try

            MitarbeiterID = MitarbeiterNr

            If offeneBestellung.Nummer = 0 Then
                'If MsgBox("Hallo " & MitarbeiterName & "! Wollen Sie eine Bestellung für " & offeneBestellung.Name & " starten?", vbYesNo) = vbYes Then
                Try
                    AbstractVorgangMitTouchForm.BeginNewVorgang_AbstractVorgangMittouchForm(VorgangTypen.AU, offeneBestellung.IDNR, offeneBestellung.Notiz, offeneBestellung.LieferMethode)
                Catch ex As Exception
                    HandleAppError(ex)
                End Try
                'End If
            Else
                'Vorgang für diesen Mitarbeiter übernehmen 
                Dim cmd = New MySqlCommand("update buchVorgang set MitarbeiterNr=@Mitarbeiternr where MitarbeiterNr is null and typ=@Typ and Nummer=@Nummer")
                cmd.Parameters.AddWithValue("MitarbeiterNr", MitarbeiterNr)
                cmd.Parameters.AddWithValue("Typ", offeneBestellung.Typ)
                cmd.Parameters.AddWithValue("Nummer", offeneBestellung.Nummer)
                RunSQL(cmd)

                AbstractVorgangMitTouchForm.LadeVorgangNummer(offeneBestellung.Typ, offeneBestellung.Nummer)

            End If
            AbstractVorgangMitTouchForm.MdiParent = Main
            AbstractVorgangMitTouchForm.WindowState = FormWindowState.Maximized
            AbstractVorgangMitTouchForm.ShowTouch()
            AbstractVorgangMitTouchForm.Show()

            AddHandler AbstractVorgangMitTouchForm.VorgangClosing, AddressOf DatenAktualisieren
            AddHandler AbstractVorgangMitTouchForm.FormClosing, AddressOf DatenAktualisieren
            AddHandler AbstractVorgangMitTouchForm.VorgangAbgeschlossen, AddressOf DatenAktualisieren


        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub OrderListeSelectedChanged(Vorgang As VorgangInBearbeitung)
        Dim offen = New OffeneBestellung(Vorgang.Nummer, Vorgang.Typ, Vorgang.KundNr, Nothing)
        OeffneBestellung(offen)
    End Sub

    ''' <summary>
    ''' Die Position als ausgeleift von diesem Mitarbeiter markieren
    ''' </summary>
    ''' <param name="Vorgang"></param>
    ''' <remarks></remarks>
    Private Sub OrderListe_Selected(Vorgang As VorgangInBearbeitung) Handles OrderListe.ZeileMarkiert
        Try
            Cursor = Cursors.WaitCursor
            If VarValue_Default("MITARBEITER_AUSWAHL_MIT_ANMELDEN", "false") Then

                'If Zusteller then vorgang dem zusteller zuordnen 
                Dim LastLoginInMinutes As Double = (Now - LastLogin).TotalMinutes

                If LastLoginInMinutes > 30 Then
                    Login.ShowDialog()
                    MitarbeiterNr = MitarbeiterID
                    LastLogin = Now
                End If

                If MitarbeiterID > 0 Then
                    MitarbeiterNr = MitarbeiterID
                End If

            End If

            If MitarbeiterNr > 0 Then
                Dim updated = SetVorgangStatus(Vorgang.Typ, Vorgang.Nummer, VorgangStatus.ZUGESTELLT, MitarbeiterNr, silent:=False)
                If updated Then
                    DatenAktualisieren()
                End If
            End If

            LabelHelpText.Text = "NEU: Zusteller kannst Du mit dem Button 'In Zustellung' beauftragen. Der Zusteller bekommt eine Email und kann direkt die Kunden Adresse für die Navigation kopieren!"
            LabelHelpText.ForeColor = Color.Green

            ErstelleGoogleMapsLink(LinkLabelMaps, Vorgang)
        Catch ex As Exception
            HandleAppError(ex)
        Finally
            Cursor = Cursors.Default
        End Try
    End Sub

    Private Sub FlowLayoutPanelOrders_Resize(sender As Object, e As EventArgs)
        'If Not pLayout Is Nothing Then
        '    pLayout.Size = New System.Drawing.Size(FlowLayoutPanelOrders.Width - 20, FlowLayoutPanelOrders.Height - 20)
        'End If
        'If Me.CheckBoxListe.Checked Then
        If OrderListe IsNot Nothing Then
            ' OrderListe.Size = New System.Drawing.Size(FlowLayoutPanelOrders.Width - 20, FlowLayoutPanelOrders.Height - 20)
        End If
        'End If
    End Sub

    Private Sub FlowLayoutPanelOrders_ControlAdded(sender As Object, e As ControlEventArgs)
        Dim btn = e.Control
        AddHandler btn.Click, AddressOf Order_Click
        'dnd.AktiviereDnD(btn)
    End Sub

    Private Sub ButtonFahrerAbrechnung_Click(sender As Object, e As EventArgs) Handles ButtonFahrerAbrechnung.Click
        Try
            ZustellerAbrechnung.Show()
            ZustellerAbrechnung.BringToFront()
            ZustellerAbrechnung.Focus()
        Catch ex As Exception
            HandleAppError(ex)
        End Try
    End Sub

    Private Sub LabelMitarbeiterName_Click(sender As Object, e As EventArgs)

    End Sub

End Class
