Imports System.ComponentModel

Public Class ClassInit
    Public Sub New()
    End Sub

    Public Sub InitLogger()
        ClassLogger.Init("", Environment.UserName)
    End Sub

    Public Function InitDatabase()
        Try
            Dim dbResult As Boolean

            MySettings_Load()

            If LoadFileExclusion() = False Then
                MsgBox("The Exclude File Structure for files in Folderwatch could not be initialized!", MsgBoxStyle.Information)
            End If

            If MyConnectionString <> String.Empty Then
                dbResult = ClassDatabase.Init()
            Else
                frmConfig_Basic.ShowDialog()
                dbResult = ClassDatabase.Init()
            End If

            If dbResult = False Then
                Throw New Exception("Find more information in the logfile.")
            End If
            Return True
        Catch ex As Exception
            MsgBox("Unexpected Error in Init Database:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
            Return False
        End Try

    End Function

    Public Sub InitWindream()
        Try
            Dim configResult As Boolean
            configResult = Settings_LoadBasicConfig()

            If configResult = False Then
                Throw New Exception("Find more information in the logfile.")
            End If
        Catch ex As Exception
            MsgBox("Unexpected Error in Init windream:" & vbNewLine & ex.Message, MsgBoxStyle.Critical)
        End Try

    End Sub


    Public Sub InitUserLogin()
        Dim sql = sql_UserID
        sql = sql.Replace("@user", Environment.UserName)
        ClassLogger.Add(">> Neuanmeldung am System: " & Now.ToString, False)
        ClassLogger.Add(">> Username: " & Environment.UserName, False)

        USER_GUID = ClassDatabase.Execute_Scalar(sql)
        If USER_GUID Is Nothing Then
            ClassLogger.Add(" - User: " & Environment.UserName & " nicht in der Userverwaltung hinterlegt!", False)
            'MsgBox("Achtung: Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
            'Me.Close()
            Throw New Exception("Sie sind nicht in der Userverwaltung hinterlegt." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!")
        Else
            USER_LANGUAGE = ClassDatabase.Execute_Scalar("SELECT LANGUAGE FROM TBDD_USER WHERE GUID = " & USER_GUID, False)
            Dim DT_CLIENT_USER As DataTable = ClassDatabase.Return_Datatable("SELECT CLIENT_ID FROM TBDD_CLIENT_USER WHERE USER_ID = " & USER_GUID)
            Dim i As Integer = 0
            For Each row As DataRow In DT_CLIENT_USER.Rows
                If i = 0 Then
                    USER_CLIENTS_COMMA_SEPERATED = row.Item(0).ToString
                Else
                    USER_CLIENTS_COMMA_SEPERATED = USER_CLIENTS_COMMA_SEPERATED & "," & row.Item(0).ToString
                End If
                i += 1

            Next


            sql = "SELECT MODULE_RECORD_ORG FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))"
            sql = sql.Replace("@user", Environment.UserName)
            If ClassDatabase.Execute_Scalar(sql) = False Then
                ClassLogger.Add(" - User: " & Environment.UserName & " nicht für Modul freigegben!", False)
                'MsgBox("Achtung: Sie sind nicht für die Nutzung dieses Moduls freigeschaltet." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
                Throw New Exception("Sie sind nicht für die Nutzung dieses Moduls freigeschaltet." & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!")
                'Me.Close()
            Else
                'Am System anmelden
                ClassLicence.Refresh_Licence()
                'Am System anmelden
                sql = "UPDATE TBDD_USER SET LOGGED_IN = @LogInOut, LOGGED_WHERE = '@ANGEMELDETWO' WHERE (LOWER(USERNAME) = LOWER('@user'))"
                sql = sql.Replace("@LogInOut", 1)
                sql = sql.Replace("@ANGEMELDETWO", Environment.MachineName)
                sql = sql.Replace("@user", Environment.UserName)
                ClassDatabase.Execute_non_Query(sql)
                sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE= 'RECORD_ORGANIZER'"
                If ClassDatabase.Execute_non_Query(sql, True) = True Then

                End If

                sql = "INSERT INTO TBDD_USER_MODULE_LOG_IN (USER_ID,MODULE) VALUES (" & USER_GUID & ",'RECORD_ORGANIZER')"
                ClassDatabase.Execute_non_Query(sql)
                sql = "SELECT RECORD_ADMIN FROM TBDD_USER WHERE (LOWER(USERNAME) = LOWER('@user'))"
                sql = sql.Replace("@user", Environment.UserName)
                USER_IS_ADMIN = ClassDatabase.Execute_Scalar(sql)
                'If USER_IS_ADMIN = True Then
                '    'Admin
                '    pageAdmin.Visible = True
                'End If

                sql = "SELECT COUNT(*) AS Expr1 FROM TBDD_USER_MODULE_LOG_IN WHERE MODULE = 'RECORD_ORGANIZER'"
                Dim anzahl = ClassDatabase.Execute_Scalar(sql)
                USERS_LOGGED_IN = CInt(anzahl)
                If LogErrorsOnly = False Then ClassLogger.Add(" >> Anzahl Angemeldete User: " & anzahl.ToString, False)
                '####

                If LICENSE_COUNT < USERS_LOGGED_IN And LICENSE_EXPIRED = False Then
                    MsgBox("Die Anzahl der aktuell angemeldeten User (" & USERS_LOGGED_IN.ToString & ") überschreitet die Anzahl der aktuellen Lizenzen!" & vbNewLine & "Anzahl der Lizenzen: " & LICENSE_COUNT.ToString & vbNewLine & "Bitte setzen Sie sich mit dem Systembetreuer in Verbindung!", MsgBoxStyle.Critical, "Achtung:")
                    ClassLogger.Add(" >> Die Anzahl der aktuell angemeldeten User (" & USERS_LOGGED_IN.ToString & ") überschreitet die Anzahl der Lizenzen (" & LICENSE_COUNT & ") für Record-Organizer!", False)
                    If USER_IS_ADMIN = False Then
                        'Anmeldung wieder herausnehmen
                        sql = "DELETE FROM TBDD_USER_MODULE_LOG_IN WHERE USER_ID = " & USER_GUID & " AND MODULE= 'RECORD_ORGANIZER'"
                        ClassDatabase.Execute_non_Query(sql, True)
                        ClassLogger.Add(" - Wieder abgemeldet", False)
                    End If
                Else
                    Try
                        'Die FolderWatch starten
                        Dim sql1 = "SELECT FOLDER_PATH FROM TBPMO_FOLDERWATCH_USER WHERE FOLDER_TYPE = 'SCAN' AND USER_ID = " & USER_GUID
                        Dim folderwatch_SCAN = ClassDatabase.Execute_Scalar(sql1, True)

                        If Not folderwatch_SCAN Is Nothing Then
                            CURRENT_SCAN_FOLDERWATCH = folderwatch_SCAN
                            If FWSCAN_started = True Then
                                ClassFolderWatcher.StartStop_FolderWatchSCAN()
                            End If
                        End If
                    Catch ex As Exception
                        ClassLogger.Add("Unexpected Error in Init_Folderwatch: " & ex.Message, True)
                    End Try

                End If


                'LabelLoggedIn.Caption = "Anzahl Angemeldete User: " & anzahl.ToString
            End If
        End If
    End Sub

End Class
