Get-Configuration.psm1

. ($PSScriptRoot + "\Managers\Core.ps1")
. ($PSScriptRoot + "\Managers\XmlManager.ps1")
. ($PSScriptRoot + "\Managers\SqlManager.ps1")



function GetModuleConfigurationJson()
{
    if ($(Test-Path env:PSGetConfiguration) -eq $false)
    {
        SetDefaultXmlConfiguration
    }
    
    $configurationString=GetEnvConfiguration
    return $configurationString
}

function GetModuleConfigurationObject()
{
    $configurationJson=GetModuleConfigurationJson
    $configuration=ConvertFrom-Json $configurationJson
    return $configuration
}

function Get-Configuration()
{
    [cmdletbinding()]
    param ([string]$Key, [switch]$All)
        
    $configuration=GetModuleConfigurationObject
    Write-Verbose $configuration
    if ($configuration.Mode -eq 'Xml')
    {
        $path=$configuration.XmlPath 
        $r=GetXmlValue $path $Key
        return $r
    }

    if ($configuration.Mode -eq 'SQL')
    {
        $SqlServerInstance=$configuration.SqlServerInstance
        $SqlServerDatabase=$configuration.SqlServerDatabase
        $SqlServerTable=$configuration.SqlServerTable
        $SqlServerSchema=$configuration.SqlServerSchema
        
         $r=GetSQLValue -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase  $SqlServerSchema -TableName $SqlServerTable -Key $Key
        
           return $r
    }
}

function Set-Configuration()
{
    [cmdletbinding()]
    param ([string]$Key,[string]$Value,[string]$category)
        
    $configuration=GetModuleConfigurationObject
    Write-Verbose $configuration
    if ($configuration.Mode -eq 'Xml')
    {
        $path=$configuration.XmlPath 
        $r=SetXmlValue $path $Key $Value $category
    }

    if ($configuration.Mode -eq 'SQL')
    {
           $SqlServerInstance=$configuration.SqlServerInstance
           $SqlServerDatabase=$configuration.SqlServerDatabase
        $SqlServerTable=$configuration.SqlServerTable
        $SqlServerSchema=$configuration.SqlServerSchema
        
        SetSQLValue -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -Key $Key -Value $Value -Category $category
    }
}

function Get-ConfigurationSource()
{
    $config=GetConfiguration
    return $config
}

function ClearConfigurationByKey()
{
    [cmdletbinding()]
    param ([string]$Key)
    
    $configuration=GetModuleConfigurationObject
    Write-Verbose $configuration
    if ($configuration.Mode -eq 'Xml')
    {
        $path=$configuration.XmlPath 
        ClearConfigurationByKeyXml $path $Key
    }

    if ($configuration.Mode -eq 'SQL')
    {
        $SqlServerInstance=$configuration.SqlServerInstance
           $SqlServerDatabase=$configuration.SqlServerDatabase
        $SqlServerTable=$configuration.SqlServerTable
        $SqlServerSchema=$configuration.SqlServerSchema
        ClearConfigurationByKeySQL -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -Key $Key
    }
}

function ClearConfigurationByCategory()
{
    [cmdletbinding()]
    param ([string]$Category)
    
    $configuration=GetModuleConfigurationObject
    Write-Verbose $configuration
    if ($configuration.Mode -eq 'Xml')
    {
        $path=$configuration.XmlPath 
        ClearConfigurationByCategoryXml $path $Category
    }

    if ($configuration.Mode -eq 'SQL')
    {
        $SqlServerInstance=$configuration.SqlServerInstance
           $SqlServerDatabase=$configuration.SqlServerDatabase
        $SqlServerTable=$configuration.SqlServerTable
        $SqlServerSchema=$configuration.SqlServerSchema

        ClearConfigurationByCategorySQL -SqlInstance $SqlServerInstance -DatabaseName $SqlServerDatabase -SchemaName $SqlServerSchema -TableName $SqlServerTable -Category $category
    }
}

function Clear-Configuration()
{
    [cmdletbinding()]
    param ([string]$Key,[string]$Category)
    
    if($Key -ne $null -and $Key -ne "")
    {
        ClearConfigurationByKey $Key
    }
    
    if ($Category -ne $null -and $Category -ne "")
    {
        ClearConfigurationByCategory $Category
    }
}

function Get-ConfigurationSource()
{
    $json=GetModuleConfigurationObject
    return $json
}

function Get-ConfigurationSourceJson()
{
    $json=GetModuleConfigurationJson
    return $json
}

Export-ModuleMember Get-Configuration
Export-ModuleMember Set-Configuration
Export-ModuleMember Set-ConfigurationSqlSource
Export-ModuleMember Set-ConfigurationXmlSource
Export-ModuleMember Get-ConfigurationSource
Export-ModuleMember Get-ConfigurationSourceJson
Export-ModuleMember Clear-Configuration