TrainingUtilsAGC.psm1

param (
    [switch]$Verbose,
    [switch]$Debug,
    [string]$MessageText,
    [string]$MessageLevel,
    [string]$FileName
)

function logger{
    param(
        [parameter(Mandatory=$true, HelpMessage="Mensaje")]
        [string]$MessageText,

        [parameter(Mandatory=$true, HelpMessage="Nivel(INFO, WARNING, ERROR, DEBUG, VERBOSE")]
        [ValidateSet("INFO","WARNING","ERROR","DEBUG","VERBOSE",IgnoreCase = $false)]
        [string]$MessageLevel,

        [parameter(Mandatory=$false, HelpMessage="Archivo en el que escribir los logs")]
        [ValidateScript({
            if($_.IndexOfAny([System.IO.Path]::GetInvalidFileNameChars()) -ne -1){
                $errorMessage = "El nombre del archivo contiene un caracter invalido"
                throw $errorMessage
            }else{
                $true
            }
        })]
        [string]$FileName
    )
    process{
        $logText = "[$(Get-Date)][$MessageLevel]: $MessageText"
        if(-Not(($Verbose -And $($MessageLevel -eq "VERBOSE")) -or ($Debug -And $($MessageLevel -eq "DEBUG")))){
            write-host $logText
        }
        if($FileName){
            fileOutput $FileName
        }
    }
}
function fileOutput{
    param(
        [parameter(Mandatory=$true, HelpMessage="Archivo en el que escribir los logs")]
        [ValidateScript({
            if($_.IndexOfAny([System.IO.Path]::GetInvalidFileNameChars()) -ne -1){
                $errorMessage = "El nombre del archivo contiene un caracter invalido"
                throw $errorMessage
            }else{
                $true
            }
        })]
        [string]$FileName
    )
    $logText | Out-File -FilePath $FileName -Append
}