$InstallScript = @"
import os
import sys
import json
import tempfile
import tarfile
import shutil
from subprocess import Popen
try: # py3
    from urllib.request import urlopen
    from winreg import OpenKey, CloseKey, QueryValueEx, SetValueEx, \
                   HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_EXPAND_SZ
except ImportError: # py2
    from urllib import urlopen
    from _winreg import OpenKey, CloseKey, QueryValueEx, SetValueEx, \
                   HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_EXPAND_SZ

import ctypes
from ctypes.wintypes import HWND, UINT, WPARAM, LPARAM, LPVOID


VENV_URL = 'https://pypi.python.org/pypi/virtualenv/json'
APPDATA = os.environ['LocalAppData']
APP = 'lektor-cli'
LIB = 'lib'
ROOT_KEY = HKEY_CURRENT_USER
SUB_KEY = 'Environment'
LRESULT = LPARAM
HWND_BROADCAST = 0xFFFF
WM_SETTINGCHANGE = 0x1A

PY2 = sys.version_info[0] == 2
if PY2:
    input = raw_input


def get_confirmation():
    while 1:
        user_input = input('Continue? [Yn] ').lower().strip()
        if user_input in ('', 'y'):
            break
        elif user_input == 'n':
            print()
            print('Aborted!')
            sys.exit()

def find_location():
    install_dir = os.path.join(APPDATA, APP)
    return install_dir, os.path.join(install_dir, LIB)

def deletion_error(func, path, excinfo):
    print('Problem deleting {}'.format(path))
    print('Please try and delete {} manually'.format(path))
    print('Aborted!')
    sys.exit()

def wipe_installation(install_dir):
    shutil.rmtree(install_dir, onerror=deletion_error)

def check_installation(install_dir):
    if os.path.exists(install_dir):
        print('   Lektor seems to be installed already.')
        print('   Continuing will delete:')
        print('   %s' % install_dir)
        print()
        get_confirmation()
        print()
        wipe_installation(install_dir)

def fail(message):
    print('Error: %s' % message)
    sys.exit(1)

def add_to_path(location):
    reg_key = OpenKey(ROOT_KEY, SUB_KEY, 0, KEY_ALL_ACCESS)

    try:
        path_value, _ = QueryValueEx(reg_key, 'Path')
    except WindowsError:
        path_value = ''

    paths = path_value.split(';')
    if location not in paths:
        paths.append(location)
        path_value = ';'.join(paths)
        SetValueEx(reg_key, 'Path', 0, REG_EXPAND_SZ, path_value)

    SendMessage = ctypes.windll.user32.SendMessageW
    SendMessage.argtypes = HWND, UINT, WPARAM, LPVOID
    SendMessage.restype = LRESULT
    SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, u'Environment')

def install(virtualenv_url, virtualenv_filename, install_dir, lib_dir):
    t = tempfile.mkdtemp()
    with open(os.path.join(t, 'virtualenv.tar.gz'), 'wb') as f:
        download = urlopen(virtualenv_url)
        f.write(download.read())
        download.close()
    with tarfile.open(os.path.join(t, 'virtualenv.tar.gz'), 'r:gz') as tar:
        tar.extractall(path=t)

    os.makedirs(install_dir)
    os.makedirs(lib_dir)

    Popen([sys.executable, 'virtualenv.py', lib_dir],
           cwd=os.path.join(t, virtualenv_filename)).wait()

    scripts = os.path.join(lib_dir, 'Scripts')
    Popen([os.path.join(scripts, 'pip.exe'),
           'install', '--upgrade', 'Lektor'],
           cwd=scripts).wait()

    with open(os.path.join(install_dir, 'lektor.cmd'), 'w') as link_file:
        link_file.write('@echo off\n')
        link_file.write('\"' + os.path.join(scripts, 'lektor.exe') + '\"' + ' %*')

    add_to_path(install_dir)


def main():
    print()
    print('Welcome to Lektor')
    print()
    print('This script will install Lektor on your computer.')
    print()

    install_dir, lib_dir = find_location()

    check_installation(install_dir)

    print('   Installing at:')
    print('   %s' % install_dir)
    print()
    get_confirmation()

    for url in json.load(urlopen(VENV_URL))['urls']:
        if url['python_version'] == 'source':
            virtualenv_url = url['url']
            #stripping '.tar.gz'
            virtualenv_filename = url['filename'][:-7]
            break
    else:
        fail('Could not find virtualenv')

    install(virtualenv_url, virtualenv_filename, install_dir, lib_dir)

    print()
    print('All done!')

main()
"@


if (Get-Command python) { python -c $InstallScript } else { "To use this script you need to have Python installed"; exit }