Imports DigitalData.GUIs.Common

Public Class frmAdmin_IDBAttribute
    Implements IAdminForm

    Public Property HasChanges As Boolean = False Implements IAdminForm.HasChanges
    Public Property IsInsert As Boolean = False Implements IAdminForm.IsInsert
    Public Property PrimaryKey As Integer Implements IAdminForm.PrimaryKey
    Private Const ConstDetail = "Detail"
    Private Const ConstTranslate = "Translate"
    Private Property oMode As String = "Detail"
    Private Property FormHelper As FormHelper

    Public Sub New(PrimaryKey As Integer, Optional IsInsert As Boolean = False)
        ' Dieser Aufruf ist für den Designer erforderlich.
        InitializeComponent()

        ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
        Me.PrimaryKey = PrimaryKey
        Me.IsInsert = IsInsert
        FormHelper = New FormHelper(My.LogConfig, Me)
    End Sub

    Private Sub frmAdmin_Attribute_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Try
            TBWH_ATTRIBUTE_TYPETableAdapter.Connection.ConnectionString = My.DatabaseIDB.CurrentSQLConnectionString
            TBWH_ATTRIBUTE_TYPETableAdapter.Fill(DSIDB_Stammdaten.TBWH_ATTRIBUTE_TYPE)
            VWIDB_BE_ATTRIBUTETableAdapter.Connection.ConnectionString = My.DatabaseIDB.CurrentSQLConnectionString
            FillAttribute()

            If IsInsert Then
                VWIDB_BE_ATTRIBUTEBindingSource.AddNew()
                DSIDB_Stammdaten.VWIDB_BE_ATTRIBUTE.ADDED_WHOColumn.DefaultValue = My.Application.User.UserName
            End If
        Catch ex As Exception
            FormHelper.ShowErrorMessage(ex, "frmAdmin_Attribute_Load")
        End Try
    End Sub
    Private Sub FillAttribute()
        VWIDB_BE_ATTRIBUTETableAdapter.FillByAttributeId(DSIDB_Stammdaten.VWIDB_BE_ATTRIBUTE, PrimaryKey, 1)
    End Sub
    Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
        ResetMessages()
        Dim oGetMax As Boolean = False
        If IsInsert Then
            oGetMax = True
        End If
        If SaveData() And HasChanges Then
            If IsInsert Then
                Dim oSQL = "Select MAX(GUID) FROM TBIDB_ATTRIBUTE"
                PrimaryKey = My.DatabaseIDB.GetScalarValue(oSQL)
            End If


            FillAttribute()
        End If
    End Sub

    Private Sub ResetMessages()
        labelStatus.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
    End Sub

    Private Sub ShowStatus(Message As String, ocolor As Color)
        labelStatus.Caption = $"{Message} - {Now.ToString}"
        labelStatus.ItemAppearance.Normal.BackColor = ocolor
        labelStatus.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
    End Sub

    Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
        Close()
    End Sub

    Public Function SaveData() As Boolean
        Try
            VWIDB_BE_ATTRIBUTEBindingSource.EndEdit()

            If DSIDB_Stammdaten.VWIDB_BE_ATTRIBUTE.GetChanges() IsNot Nothing Or IsInsert Then
                HasChanges = True

                If IsInsert Then
                    txtAddedWho.EditValue = My.Application.User.UserName
                Else
                    txtChangedWho.EditValue = My.Application.User.UserName
                End If

                VWIDB_BE_ATTRIBUTEBindingSource.EndEdit()

                ' TODO: Update Database
                If Not IsInsert Then
                    Dim oUpdate As String = $"UPDATE TBIDB_ATTRIBUTE " &
                 $"Set TITLE = '{TextEdit2.Text}', TYP_ID = {ComboBoxEdit1.EditValue}, VIEW_SEQUENCE = {SpinEdit1.Value}, VIEW_VISIBLE = '{CheckEdit2.Checked}'" &
                $",MULTI_CONTEXT = '{CheckEditMulticontext.Checked}', COMMENT = '{TextEdit3.Text}', CHANGED_WHO = '{My.Application.User.UserName}' " &
                $"WHERE        (GUID = {TextEdit1.Text})"

                    If My.DatabaseIDB.ExecuteNonQuery(oUpdate) = False Then
                        ShowStatus($"Error saving Attribute {TextEdit2.Text} - Check Your log", Color.Red)
                        Return False
                    Else
                        ShowStatus($"Attribute {TextEdit2.Text} saved successfully", Color.DodgerBlue)
                    End If
                Else
                    Dim oInsert As String = $"INSERT INTO TBIDB_ATTRIBUTE " &
                         "(TITLE, TYP_ID, VIEW_SEQUENCE, VIEW_VISIBLE, ADDED_WHO,COMMENT,MULTI_CONTEXT) " &
                         $"VALUES ('{TextEdit2.Text}',{ComboBoxEdit1.EditValue},{SpinEdit1.Value},'{CheckEdit2.Checked}','{My.Application.User.UserName}', '{TextEdit3.Text}','{CheckEditMulticontext.Checked}')"

                    If My.DatabaseIDB.ExecuteNonQuery(oInsert) = True Then
                        ShowStatus($"Attribute {TextEdit2.Text} added successfully", Color.DodgerBlue)
                        IsInsert = False
                    Else
                        ShowStatus($"Error Insertung Attribute {TextEdit2.Text} - Check Your log", Color.Red)
                        Return False
                    End If
                End If
                '  VWIDB_BE_ATTRIBUTETableAdapter.Update(DSIDB_Stammdaten.VWIDB_BE_ATTRIBUTE)
            End If
            FillAttribute()
            Return True
        Catch ex As Exception
            FormHelper.ShowErrorMessage(ex, "SaveData")
            ShowStatus($"Unexpeced error saving attribute {TextEdit2.Text} - {ex.Message}", Color.Red)
            Return False
        End Try
    End Function


    Public Function DeleteAttribute() As Boolean Implements IAdminForm.DeleteData
        Try
            Dim oproc = $"EXEC PRIDB_DELETE_ATTRIBUTE {PrimaryKey}, '{My.Application.User.UserName}' "
            If My.DatabaseIDB.ExecuteNonQuery(oproc) = True Then
                Return True
            End If

        Catch ex As Exception
            FormHelper.ShowErrorMessage(ex, "DeleteAttribute")
            Return False
        End Try
    End Function

    Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick

    End Sub

    Private Sub BarButtonItem4_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem4.ItemClick
        If MsgBox($"Do You really want to delete the attribute [{PrimaryKey}]? All Metadata related to the Attribute will be deleted!", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, Text) = MsgBoxResult.Yes Then
            If DeleteAttribute() Then
                Close()
            End If
        End If
    End Sub

    Private Sub XtraTabControl1_SelectedPageChanged(sender As Object, e As DevExpress.XtraTab.TabPageChangedEventArgs) Handles XtraTabControl1.SelectedPageChanged
        If XtraTabControl1.SelectedTabPageIndex = 1 Then
            oMode = ConstTranslate
        Else
            oMode = ConstDetail
        End If
    End Sub
End Class