<#
.SYNOPSIS
Run this PowerShell script to enable dev mode and/or a custom script for the TypeScript language service, e.g.

PS C:\> .\scripts\VSDevMode.ps1 -enableDevMode -tsScript C:\src\TypeScript\built\local\

Note: If you get security errors, try running powershell as an Administrator and with the "-executionPolicy remoteSigned" switch

.PARAMETER vsVersion
Set to "12" for Dev12 (VS2013) or "14" (the default) for Dev14 (VS2015)

.PARAMETER enableDevMode
Pass this switch to enable attaching a debugger to the language service

.PARAMETER tsScript
The path to a directory containing a custom language service script to use (typescriptServices.js), e.g. "C:\src\TypeScript\built\local\"
#>
Param(
    [int]$vsVersion = 14,
    [switch]$enableDevMode,
    [string]$tsScript
)

$vsRegKey = "HKCU:\Software\Microsoft\VisualStudio\${vsVersion}.0"
$tsRegKey = "${vsRegKey}\TypeScriptLanguageService"

if($enableDevMode -ne $true -and $tsScript -eq ""){
    Throw "You must either enable language service debugging (-enableDevMode), set a custom script (-tsScript), or both"
}

if(!(Test-Path $vsRegKey)){
    Throw "Visual Studio ${vsVersion} is not installed"
}
if(!(Test-Path $tsRegKey)){
    # Create the TypeScript subkey if it doesn't exist
    New-Item -path $tsRegKey
}

if($tsScript -ne ""){
    $tsScriptServices =  "${tsScript}\typescriptServices.js"
    $tsScriptlib = "${tsScript}\lib.d.ts"
    $tsES6Scriptlib = "${tsScript}\lib.es6.d.ts"
    
    if(!(Test-Path $tsScriptServices)){
        Throw "Could not locate the TypeScript language service script at ${tsScriptServices}"
    }
    else {
        $path = resolve-path ${tsScriptServices}
        Set-ItemProperty -path $tsRegKey -name CustomTypeScriptServicesFileLocation -value "${path}"
        Write-Host "Enabled custom TypeScript language service at ${path} for Dev${vsVersion}"
    }

    if(!(Test-Path $tsScriptlib)){
        Throw "Could not locate the TypeScript default library at ${tsScriptlib}"
    }
    else {
        $path = resolve-path ${tsScriptlib}
        Set-ItemProperty -path $tsRegKey -name CustomDefaultLibraryLocation -value "${path}"
        Write-Host "Enabled custom TypeScript default library at ${path} for Dev${vsVersion}"
    }

    if(!(Test-Path $tsES6Scriptlib)){
        Throw "Could not locate the TypeScript default ES6 library at ${tsES6Scriptlib}"
    }
    else {
        $path = resolve-path ${tsES6Scriptlib}
        Set-ItemProperty -path $tsRegKey -name CustomDefaultES6LibraryLocation -value "${path}"
        Write-Host "Enabled custom TypeScript default ES6 library at ${path} for Dev${vsVersion}"
    }
}

if($enableDevMode){
    Set-ItemProperty -path $tsRegKey -name EnableDevMode -value 1
    Write-Host "Enabled developer mode for Dev${vsVersion}"
}
