#===========================================================================
# Tests - Functions
#===========================================================================
Describe "Comprehensive Checks for PS1 Files in Functions Folder" {
    BeforeAll {
        # Get all .ps1 files in the functions folder
        $ps1Files = Get-ChildItem -Path ./functions -Filter *.ps1 -Recurse
    }

    foreach ($file in $ps1Files) {
        Context "Checking $($file.Name)" {
            It "Should import without errors" {
                { . $file.FullName } | Should -Not -Throw
            }

            It "Should have no syntax errors" {
                $syntaxErrors = $null
                $null = [System.Management.Automation.PSParser]::Tokenize((Get-Content -Path $file.FullName -Raw), [ref]$syntaxErrors)
                $syntaxErrors.Count | Should -Be 0
            }

            It "Should not use deprecated cmdlets or aliases" {
                $content = Get-Content -Path $file.FullName -Raw
                # Example check for a known deprecated cmdlet or alias
                $content | Should -Not -Match 'DeprecatedCmdlet'
                # Add more checks as needed
            }

            It "Should follow naming conventions for functions" {
                $functions = (Get-Command -Path $file.FullName).Name
                foreach ($function in $functions) {
                    $function | Should -Match '^[a-z]+(-[a-z]+)*$' # Enforce lower-kebab-case
                }
            }

            It "Should define mandatory parameters for all functions" {
                . $file.FullName
                $functions = (Get-Command -Path $file.FullName).Name
                foreach ($function in $functions) {
                    $parameters = (Get-Command -Name $function).Parameters.Values
                    $mandatoryParams = $parameters | Where-Object { $_.Attributes.Mandatory -eq $true }
                    $mandatoryParams.Count | Should -BeGreaterThan 0
                }
            }

            It "Should have all functions available after import" {
                . $file.FullName
                $functions = (Get-Command -Path $file.FullName).Name
                foreach ($function in $functions) {
                    { Get-Command -Name $function -CommandType Function } | Should -Not -BeNullOrEmpty
                }
            }
        }
    }
}