Imports DigitalData.Modules.Logging
Imports System.IO

Public Class Path
    Private ReadOnly _LogConfig As LogConfig
    Private ReadOnly _Logger As Logger
    Private ReadOnly _BasePath As String

    Public Const PATH_ACTIVE As String = "Active"
    Public Const PATH_ARCHIVE As String = "Archive"
    Public Const PATH_EDMI As String = "EDMI"

    Public Sub New(LogConfig As LogConfig, DatastoreBasePath As String)
        _LogConfig = LogConfig
        _Logger = LogConfig.GetLogger()
        _BasePath = DatastoreBasePath
    End Sub

    Public Function GetActivePath(DocumentType As String, Optional FileName As String = "") As String
        Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ACTIVE}
        oParts.AddRange(Do_GetRelativePath(DocumentType, FileName))

        Return IO.Path.Combine(oParts.ToArray())
    End Function

    Public Function GetActivePathFromRelativePath(RelativePath As String) As String
        Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ACTIVE}
        oParts.Add(RelativePath)
        Return IO.Path.Combine(oParts.ToArray)
    End Function

    Public Function GetArchivePath(DocumentType As String, Optional FileName As String = "") As String
        Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ARCHIVE}
        oParts.AddRange(Do_GetRelativePath(DocumentType, FileName))

        Return IO.Path.Combine(oParts.ToArray())
    End Function

    Public Function GetArchivePathFromRelativePath(RelativePath As String) As String
        Dim oParts = New List(Of String) From {_BasePath, PATH_EDMI, PATH_ARCHIVE}
        oParts.Add(RelativePath)
        Return IO.Path.Combine(oParts.ToArray)
    End Function

    Public Function GetRelativePath(DocumentType As String, Optional FileName As String = "") As String
        Return IO.Path.Combine(Do_GetRelativePath(DocumentType, FileName).ToArray)
    End Function

    Private Function Do_GetRelativePath(DocumentType As String, Optional FileName As String = "") As List(Of String)
        Dim oPathParts As New List(Of String) From {DocumentType}
        oPathParts.AddRange(GetDatePath())
        oPathParts.Add(FileName)

        Return oPathParts
    End Function

    Private Function GetDatePath() As List(Of String)
        Dim oDate = DateTime.Now
        Dim oResultList As New List(Of String) From {
            oDate.Year,
            oDate.Month.ToString.PadLeft(2, "0"),
            oDate.Day.ToString.PadLeft(2, "0")
        }

        Return oResultList
    End Function
End Class
