Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Logging

Namespace Modules.IDB
    Public Class NewFile
        Inherits BaseMethod

        Public Sub New(pLogConfig As LogConfig, pChannel As IEDMIServiceChannel)
            MyBase.New(pLogConfig, pChannel)
        End Sub

        Public Async Function RunAsync(pFilePath As String, pObjectStoreName As String, pObjectKind As String, pIDBDoctypeId As Long, Optional pOptions As Options.NewFileOptions = Nothing) As Task(Of Long)
            Try
                ' Set default options
                If pOptions Is Nothing Then
                    pOptions = New Options.NewFileOptions()
                End If

                ' Check if file exists
                If IO.File.Exists(pFilePath) = False Then
                    Throw New IO.FileNotFoundException("Path does not exist")
                End If

                ' Importing the file now
                Dim oFileProperties = Helpers.GetFileProperties(pFilePath, pOptions.DateImported)
                Dim oFileImportResponse = Await Channel.NewFileAsync(New NewFileRequest With {
                    .IDBDoctypeId = pIDBDoctypeId,
                    .File = oFileProperties,
                    .KindType = pObjectKind,
                    .StoreName = pObjectStoreName,
                    .User = New UserState With {
                        .Language = pOptions.Language,
                        .UserName = pOptions.Username
                    }
                })

                If oFileImportResponse.OK = False Then
                    Throw New ApplicationException("Could not Import File Contents!")
                End If

                Return oFileImportResponse.ObjectId
            Catch ex As Exception
                Logger.Error(ex)
                Return Constants.INVALID_OBEJCT_ID
            End Try
        End Function
    End Class
End Namespace