# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function

import os
import shutil
import subprocess
import sys
from urllib.parse import urlparse
from urllib.request import urlopen


run_args = [
    {
        'name': 'version',
        'kwarg': 'version',
    },
    {
        'name': 'arch',
        'kwarg': 'arch',
    },
]


def run(version=None, arch=None):
    """
    Installs a version of Python on Windows

    :return:
        A bool - if Python was installed successfully
    """

    if sys.platform != 'win32':
        raise ValueError('python-install is only designed for Windows')

    if version not in set(['2.6', '3.3']):
        raise ValueError('Invalid version: %r' % version)

    if arch not in set(['x86', 'x64']):
        raise ValueError('Invalid arch: %r' % arch)

    if version == '2.6':
        if arch == 'x64':
            url = 'https://www.python.org/ftp/python/2.6.6/python-2.6.6.amd64.msi'
        else:
            url = 'https://www.python.org/ftp/python/2.6.6/python-2.6.6.msi'
    else:
        if arch == 'x64':
            url = 'https://www.python.org/ftp/python/3.3.5/python-3.3.5.amd64.msi'
        else:
            url = 'https://www.python.org/ftp/python/3.3.5/python-3.3.5.msi'

    home = os.environ.get('USERPROFILE')
    msi_filename = os.path.basename(urlparse(url).path)
    msi_path = os.path.join(home, msi_filename)
    install_path = os.path.join(os.environ.get('LOCALAPPDATA'), 'Python%s-%s' % (version, arch))

    if os.path.exists(os.path.join(install_path, 'python.exe')):
        print(install_path)
        return True

    try:
        with urlopen(url) as r, open(msi_path, 'wb') as f:
            shutil.copyfileobj(r, f)

        proc = subprocess.Popen(
            'msiexec /passive /a %s TARGETDIR=%s' % (msi_filename, install_path),
            shell=True,
            cwd=home
        )
        proc.communicate()

    finally:
        if os.path.exists(msi_path):
            os.unlink(msi_path)

    print(install_path)
    return True
