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

Namespace Modules.IDB
    Public Class UpdateFile
        Inherits BaseMethod

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

        Public Async Function RunAsync(pFilePath As String, pObjectId As Long, Optional pOptions As UpdateFileOptions = Nothing) As Task(Of Long)
            Try
                ' Set default options
                If pOptions Is Nothing Then
                    pOptions = New UpdateFileOptions()
                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, Date.Now)


                Dim oUpdateFileResponse = Await Channel.UpdateFileAsync(New UpdateFileRequest With {
                    .File = oFileProperties,
                    .ObjectId = pObjectId,
                    .CreateNewVersion = pOptions.CreateNewFileVersion,
                    .User = New UserState With {
                        .Language = pOptions.Language,
                        .UserName = pOptions.Username
                    }
                })

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

                Return oUpdateFileResponse.ObjectId

            Catch ex As Exception
                Logger.Error(ex)
                Return Constants.INVALID_OBEJCT_ID

            End Try
        End Function
    End Class

End Namespace