Imports System.Collections.Generic
Imports System.IO
Imports DigitalData.Modules.Interfaces.PropertyValues
Imports DigitalData.Modules.Interfaces.ZUGFeRDInterface

Public Class Exceptions
    Public Class MissingValueException
        Inherits ApplicationException

        Public ReadOnly File As FileInfo
        Public ReadOnly MissingProperties As List(Of MissingProperty)

        Public Sub New(pFile As FileInfo, pMissingProperties As List(Of MissingProperty))
            MyBase.New($"Missing values in [{pFile.Name}]")

            Me.File = pFile
            Me.MissingProperties = pMissingProperties
        End Sub
    End Class

    Public Class TooMuchFerdsException
        Inherits ApplicationException

        Public Sub New()
            MyBase.New("More than one ZUGFeRD document found")
        End Sub
    End Class

    Public Class FileSizeLimitReachedException
        Inherits ApplicationException

        Public Const KEY_FILENAME = "FILENAME"

        Public Sub New(pFilePath As String, pFileSizeLimitInMegaBytes As Integer)
            MyBase.New($"At least one file exceeded the filesize limit of {pFileSizeLimitInMegaBytes}MB: {pFilePath}")
            Data.Add(KEY_FILENAME, pFilePath)
        End Sub
    End Class

    Public Class InvalidFerdException
        Inherits ApplicationException

        Public Sub New()
            MyBase.New("ZUGFeRD document found but was not formatted correctly")
        End Sub
    End Class

    Public Class UnsupportedFerdException
        Inherits ApplicationException

        Public ReadOnly Property XmlFile As String

        Public Sub New(pXmlFile As String)
            MyBase.New("ZUGFeRD document found but is not supported!")
            _XmlFile = pXmlFile
        End Sub
    End Class

    Public Class NoFerdsException
        Inherits ApplicationException

        Public Sub New()
            MyBase.New("No ZUGFeRD documents found")
        End Sub
    End Class

    Public Class NoFerdsAlternateException
        Inherits ApplicationException

        Public Sub New()
            MyBase.New("No ZUGFeRD documents found, no rejection will be generated")
        End Sub
    End Class


    Public Class MD5HashException
        Inherits ApplicationException

        Public ReadOnly FileName As String

        Public Sub New(pMessage As String, pFileName As String)
            MyBase.New(pMessage)
            FileName = pFileName
        End Sub
    End Class
End Class
