<#
.SYNOPSIS
    A short one-line action-based description, e.g. 'Tests if a function is valid'
.DESCRIPTION
    Function will submit a ServiceNow Catalog Request of Application Server type with relevant information required for automated AD Service Account creation.
.NOTES
    Information or caveats about the function e.g. 'This function is not supported in Linux'
.LINK
    Specify a URI to a help page, this will show when Get-Help -Online is used.
.EXAMPLE
    Test-MyTestFunction -Verbose
    Explanation of the function or its result. You can include multiple examples with additional .EXAMPLE lines
#>

function New-ITDADServiceAccountRitm {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [string]
        $RequestedForEmail,

        [Parameter(Mandatory = $true)]
        [string]
        $SamAccountName,

        [Parameter(Mandatory = $true)]
        [ValidateSet('nd.gov')]
        [string]
        $ADDomain,

        [Parameter(Mandatory = $true)]
        [string]
        $Description,

        [Parameter(Mandatory = $true)]
        #[ValidateSet('Office365', 'VMware_Systems', 'CSRC', 'Shared Linux Password List', 'Peoplesoft Share PW', 'Cohesity', 'VDI')]
        [string]
        $PasswordstateList,

        [Parameter(Mandatory = $true)]
        [string]
        $PasswordstateTitle
    )
    
    begin {
        
    }
    
    process {
        # create Application Server RITM with json

        $AdditionalComments = "Please create a new $ADDomain Active Directory service account with the following details, following guidelines found in KB0016867.`n`n"

        $obj = [PSCustomObject]@{
            RequestedForEmail  = $RequestedForEmail
            SamAccountName     = $SamAccountName;
            ADDomain           = $ADDomain;
            PasswordstateTitle = $PasswordstateTitle;
            PasswordstateList  = $PasswordstateList;
            Description        = $Description;
        }

        $AdditionalComments += ($obj | ConvertTo-Json -Compress)

        $NewITDServiceNowServiceCatalogRequest = @{
            CategoryItemName  = 'Application Server';
            RequestedForEmail = $RequestedForEmail;
            Values            = @{
                additional_comments          = $AdditionalComments;
                request_type                 = "New";
                application_name             = "Infra-ActiveDirectory.Object";
                environment                  = "Production";
                require_hosting_quote        = 'No';
                add_change_disaster_recovery = 'No'; #>
                vm_work_needed               = 'No';

            }
        }

        $ReqResult = New-ITDServiceNowServiceCatalogRequest @NewITDServiceNowServiceCatalogRequest
    }
    
    end {
        Write-Output $ReqResult
    }
}


