# encoding: ascii
# api: powershell
# title: Dynamic Parameters Huh?
# description: I can’t get dynamic parameters working when there are multiple parameter sets on the other parameters. as soon as i limit the param sets down to 1, it works. if there are 2, it doesn’t.
# version: 0.1
# type: function
# author: BattleChicken
# license: CC0
# function: Dynamic-ParamTest
# x-poshcode-id: 6426
# x-archived: 2016-07-01T08:16:21
# x-published: 2016-06-28T17:08:00
#
#
function Dynamic-ParamTest {
    param(
        [parameter(Mandatory=$true)]
        [string]$Hostname,
        
        [parameter()]
        [validateset('Ftp','Scp','Sftp')] # Webdav was added as an option, but not adding it yet since I haven't looked into the requirements and have no way to test it currently.
        [string]$Protocol='Sftp',

        [parameter()]
        [string]$Port = $null, # based on protocol, the session options automatically use the right default port so it is not required.

        [parameter(Mandatory=$true)]
        [string]$Username,
    
        [parameter(Mandatory=$true,ParameterSetName="SecurePass")]
        [string]$PasswordFile,

        [parameter()] #Mandatory=$true -- need to figure out param set, re-add for appropriate conditions later.
        [string]$SshHostKeyFingerprint,

        [parameter()]
        [string]$TlsHostCertificateFingerprint,

        [parameter(ParameterSetName="SecurePass")]
        [switch]$SetSecurePassword,

        [parameter()]
        [string]$SshPrivateKeyPath,

        [parameter()]
        [string]$SshPrivateKeyPassphrase,

        [parameter()]
        [ValidateSet('None','Implicit','ExplicitSsl','Explicit','ExplicitTls')]
        [string]$FtpSecureMode = $null,

        [parameter(Mandatory=$true)]# ,ParameterSetName="PlainTextPass"
        [ValidateNotNullOrEmpty()]
        [string]$PlainTextPassword,
        
        [parameter()]
        [bool]$WebdavSecure,

        [parameter()]
        [string]$WebdavRoot,

        [parameter()]
        [string]$DLLFolder=$Script:WinSCPDLLFolder,

        [parameter()]
        [switch]$GiveUpSecurityAndAcceptAnySshHostKey,

        [parameter()]
        [switch]$GiveUpSecurityAndAcceptAnyTlsHostCertificate
    )
    
    DynamicParam{
        if ($Protocol -match "^Sftp$")
        {
            $attributes = new-object System.Management.Automation.ParameterAttribute
            $attributes.ParameterSetName = "__AllParameterSets"
            $attributes.Mandatory = $false
            $attributeCollection = new-object -Type System.Collections.ObjectModel.Collection[System.Attribute]
            $attributeCollection.Add($attributes)

            $dynParam1 = new-object -Type System.Management.Automation.RuntimeDefinedParameter("IAMDYNAMIC", [Int32], $attributeCollection)
            
            $paramDictionary = new-object -Type System.Management.Automation.RuntimeDefinedParameterDictionary
            $paramDictionary.Add("IAMDYNAMIC", $dynParam1)
            return $paramDictionary
        }
    }

    process{
        write-host "I Ran"
    }



}
