Imports System.IO
Imports DD_LIB_Standards
Imports DevExpress.XtraPrinting

Public Class frmDoc_Links
    Public Property Documents As New List(Of ClassWindreamDocGrid.WindreamDoc)

    Private Sub frmDoc_DocLinks_Load(sender As Object, e As EventArgs) Handles Me.Load
        Try
            Refresh_Grid_Data(Documents)

            If USER_IS_ADMIN Then
                bsiSource.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
            Else
                bsiSource.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
            End If

            ' TODO: this does not work for the old form
            If Documents.Count = 0 Then
                Text = $"Document-Links for: NODOC-ID"
            ElseIf Documents.Count = 1 Then
                Text = $"Document-Links for: {Documents.First.DocPath}"
            Else
                Text = $"Document-Links for {Documents.Count} files"
            End If

            'If ClassWindreamDocGrid.DT_RESULTFILES.Rows.Count = 1 Then
            '    Me.Text = $"Document-Links for file: {ClassWindreamDocGrid.DT_RESULTFILES.Rows(0).Item("DOC_PATH")}"
            'Else
            '    Me.Text = $"Document-Links for file: NODOC-ID"
            'End If

            bbtnitmdeletelink.Enabled = False

            Select Case CURRENT_FILE_RIGHT
                Case "RW"
                    bbtnitmdeletelink.Enabled = True
                Case "RWA"
                    bbtnitmdeletelink.Enabled = True
            End Select
        Catch ex As Exception
            ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in frmDoc_DocLinks_Load", ex.Message, ex.StackTrace)
        End Try
    End Sub

    Private Function Get_Grid_Data(pDocuments As List(Of ClassWindreamDocGrid.WindreamDoc)) As DataTable
        Dim oTable As DataTable
        Dim oSql As String = ""

        If pDocuments.Count > 0 Then
            Dim oIds = String.Join(",", pDocuments.Select(Function(d) d.DocId).ToArray())
            oSql = $"SELECT * FROM VWPMO_CUST_DOC_OBJECT_LINKS WHERE DocID IN ({oIds})"
            oTable = MYDB_ECM.GetDatatable(oSql)
        Else
            oSql = $"select * FROM VWPMO_CUST_DOC_OBJECT_LINKS WHERE DocID = {CURRENT_DOC_ID}"
            oTable = MYDB_ECM.GetDatatable(oSql)
        End If

        If oTable Is Nothing Then
            LOGGER.Error("Please check your link-object-relation: {0}", oSql)
        End If

        Return oTable
    End Function

    Sub Refresh_Grid_Data(pDocuments As List(Of ClassWindreamDocGrid.WindreamDoc))
        Try
            Dim oTable = Get_Grid_Data(pDocuments)

            If Not IsNothing(oTable) Then
                BarStaticItemStatus.Caption = $"{oTable.Rows.Count} links for Document found!"
                grvwGrid.Columns.Clear()
                GridControlRecords.DataSource = oTable
                'grvwGrid.Columns.Item("already linked").Fixed = True
                Try
                    grvwGrid.Columns.Item("DocID").Visible = False
                    grvwGrid.Columns.Item("RecordID").Visible = False
                    'grvwGrid.Columns.Item("FULL_FILENAME").Visible = False
                    Try
                        If grvwGrid.Columns.Item("VALUE") IsNot Nothing Then
                            grvwGrid.Columns.Item("VALUE").Visible = False
                        End If
                    Catch ex1 As Exception
                        LOGGER.Warn("Column VALUE not part of VWPMO_CUST_DOC_OBJECT_LINKS" & ex1.Message)
                    End Try
                    grvwGrid.OptionsView.ColumnAutoWidth = False
                    grvwGrid.BestFitColumns()
                Catch ex As Exception
                    LOGGER.Error(ex)
                End Try

                GridControlRecords.RefreshDataSource()
                'If oTable.Rows.Count > 10000 Then
                '    BarButtonItem2.Enabled = False
                'Else
                '    BarButtonItem2.Enabled = True
                'End If
            Else
                MsgBox($"Please check Your link-object-relation", MsgBoxStyle.Exclamation)
            End If

        Catch ex As Exception
            LOGGER.Error(ex)
            ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Sub Refresh_Grid_Data", ex.Message, ex.StackTrace)
        End Try

    End Sub

    Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles bbtnitmdeletelink.ItemClick
        Dim oSelectedRows As Integer() = grvwGrid.GetSelectedRows()
        For Each rowhandle As Integer In oSelectedRows
            Try
                Dim oSelectedDocID = grvwGrid.GetRowCellValue(rowhandle, "DocID")
                Dim oSelectedRecordID = grvwGrid.GetRowCellValue(rowhandle, "RecordID")
                If IsNothing(oSelectedDocID) Then
                    Continue For
                End If
                LOGGER.Debug($"RecordLink will be removed Record: {oSelectedRecordID} - DocID: {oSelectedDocID} ")
                Try
                    If ClassFileResult.Delete_ResultFile(oSelectedDocID, oSelectedRecordID, 0) = True Then
                        ClassHelper.InsertEssential_Log(oSelectedDocID, "DOC-ID", $"RECORD LINK {oSelectedRecordID} REMOVED FROM DOC-SEARCH")
                    End If
                Catch ex As Exception
                    ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Removing DocRecord-Link", ex.Message, ex.StackTrace)
                End Try
            Catch ex As Exception
                ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error in Collecting DocRecord-Link", ex.Message, ex.StackTrace)
            End Try
        Next

        Refresh_Grid_Data(Documents)
    End Sub

    Private Sub BarButtonItem2_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem2.ItemClick
        Try
            Dim saveFileDialogDocSearchResult As New SaveFileDialog With {
                .Filter = "Excel File|*.xlsx",
                .Title = "Export to Excel:"
            }
            saveFileDialogDocSearchResult.ShowDialog()

            If saveFileDialogDocSearchResult.FileName <> "" Then
                Dim oOptions As New XlsxExportOptionsEx With {
                    .ShowGridLines = True,
                    .AllowSortingAndFiltering = DevExpress.Utils.DefaultBoolean.True,
                    .ExportType = DevExpress.Export.ExportType.DataAware,
                    .ExportMode = XlsxExportMode.SingleFile,
                    .AllowFixedColumnHeaderPanel = DevExpress.Utils.DefaultBoolean.True
                }

                Cursor = Cursors.WaitCursor
                GridControlRecords.MainView.ExportToXlsx(saveFileDialogDocSearchResult.FileName, oOptions)
                Dim result As MsgBoxResult
                Dim msg = String.Format("Datei wurde erstellt! Wollen Sie diese nun öffnen?")

                If USER_LANGUAGE <> "de-DE" Then
                    msg = String.Format("File was created. Do You want to open excel?")
                End If
                result = MessageBox.Show(msg, "Exporting result:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
                If result = MsgBoxResult.Yes Then
                    Process.Start(saveFileDialogDocSearchResult.FileName)
                End If
            End If

        Catch ex As Exception
            LOGGER.Error(ex)
            MsgBox("Unexpected Error in ExportExcel: " & ex.Message, MsgBoxStyle.Critical)
        End Try
        Cursor = Cursors.Default
    End Sub

    Private Sub frmDoc_Links_SizeChanged(sender As Object, e As EventArgs) Handles Me.SizeChanged
        Try
            grvwGrid.OptionsView.ColumnAutoWidth = False
            grvwGrid.BestFitColumns()
        Catch ex As Exception
            LOGGER.Error(ex)
        End Try
    End Sub

    Private Sub OrdnerÖffnenToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles OrdnerÖffnenToolStripMenuItem.Click
        Dim oPAth = grvwGrid.GetFocusedRowCellValue(grvwGrid.Columns("FULL_FILENAME"))
        Dim oDocID = grvwGrid.GetFocusedRowCellValue(grvwGrid.Columns("DocID"))
        For Each row As DataRow In ClassWindreamDocGrid.DT_RESULTFILES.Rows
            ClassHelper.Open_Folder(oPAth, oDocID)
        Next
    End Sub
End Class