# -*- coding: utf-8 -*-
"""
To create local builds and distributable .msi, run the following command:
python setup_win32.py build bdist_msi
"""
import opcode
import os
import pkg_resources
import sys

from cx_Freeze import setup, Executable
import requests.certs

from lbrynet import __version__

name = 'LBRY'
description = 'A decentralized media library and marketplace'
win_icon = os.path.join('packaging', 'windows', 'lbry-win32-app', 'icons', 'lbry256.ico')
wordlist_path = pkg_resources.resource_filename('lbryum', 'wordlist')

base_dir = os.path.abspath(os.path.dirname(__file__))

# Allow virtualenv to find distutils of base python installation
distutils_path = os.path.join(os.path.dirname(opcode.__file__), 'distutils')


def find_data_file(filename):
    if getattr(sys, 'frozen', False):
        # The application is frozen
        data_dir = os.path.dirname(sys.executable)
    else:
        # The application is not frozen
        # Change this bit to match where you store your data files:
        data_dir = os.path.dirname(__file__)
    return os.path.join(data_dir, filename)

console_scripts = ['lbrynet-stdin-uploader = lbrynet.lbrynet_console.LBRYStdinUploader:launch_stdin_uploader',
                  'lbrynet-stdout-downloader = lbrynet.lbrynet_console.LBRYStdoutDownloader:launch_stdout_downloader',
                  'lbrynet-create-network = lbrynet.create_network:main',
                  'lbrynet-launch-node = lbrynet.dht.node:main',
                  'lbrynet-launch-rpc-node = lbrynet.rpc_node:main',
                  'lbrynet-rpc-node-cli = lbrynet.node_rpc_cli:main',
                  'lbrynet-lookup-hosts-for-hash = lbrynet.dht_scripts:get_hosts_for_hash_in_dht',
                  'lbrynet-announce_hash_to_dht = lbrynet.dht_scripts:announce_hash_to_dht',
                  'lbrynet-daemon = lbrynet.lbrynet_daemon.LBRYDaemonControl:start',
                  'stop-lbrynet-daemon = lbrynet.lbrynet_daemon.LBRYDaemonControl:stop',
                  'lbrynet-cli = lbrynet.lbrynet_daemon.LBRYDaemonCLI:main']

# shortcut_table = [
#     ('DesktopShortcut',  # Shortcut
#      'DesktopFolder',  # Directory
#      name,  # Name
#      'TARGETDIR',  # Component
#      '[TARGETDIR]\{0}.exe'.format(name),  # Target
#      None,  # Arguments
#      description,  # Description
#      None,  # Hotkey
#      win_icon,  # Icon (doesn't work for some reason?)
#      None,  # IconIndex
#      None,  # ShowCmd
#      'TARGETDIR',  # WkDir
#      ),
#     ]
#
# msi_data = {'Shortcut': shortcut_table}

bdist_msi_options = {
    'upgrade_code': '{18c0e933-ad08-44e8-a413-1d0ed624c100}',
    'add_to_path': False,
    # Default install path is 'C:\Program Files\' for 32-bit or 'C:\Program Files (x86)\' for 64-bit
    # 'initial_target_dir': r'[LocalAppDataFolder]\{0}'.format(name),
    # 'data': msi_data
    }

build_exe_options = {
    'include_msvcr': True,
    'includes': [],
    'packages': ['cython',
                 'twisted',
                 'yapsy',
                 'appdirs',
                 'argparse',
                 'base58',
                 'colorama',
                 'cx_Freeze',
                 'dns',
                 'ecdsa',
                 'gmpy',
                 'googlefinance',
                 'jsonrpc',
                 'jsonrpclib',
                 'lbryum',
                 'loggly',
                 'miniupnpc',
                 'pbkdf2',
                 'google.protobuf',
                 'Crypto',
                 'bitcoinrpc',
                 'win32api',
                 'qrcode',
                 'requests',
                 'requests_futures',
                 'seccure',
                 'simplejson',
                 'six',
                 'aes',
                 'txjsonrpc',
                 'unqlite',
                 'wsgiref',
                 'zope.interface',
                 'os',
                 'pkg_resources'
                 ],
    'excludes': ['distutils', 'collections.sys', 'collections._weakref', 'collections.abc',
                 'Tkinter', 'tk', 'tcl', 'PyQt4', 'nose', 'mock'
                 'zope.interface._zope_interface_coptimizations'],
    'include_files': [(distutils_path, 'distutils'), (requests.certs.where(), 'cacert.pem'),
                      (os.path.join('packaging', 'windows', 'lbry-win32-app', 'icons', 'lbry16.ico'),
                       os.path.join('icons', 'lbry16.ico')),
                      (os.path.join(wordlist_path, 'chinese_simplified.txt'),
                       os.path.join('wordlist', 'chinese_simplified.txt')),
                      (os.path.join(wordlist_path, 'english.txt'), os.path.join('wordlist', 'english.txt')),
                      (os.path.join(wordlist_path, 'japanese.txt'), os.path.join('wordlist', 'japanese.txt')),
                      (os.path.join(wordlist_path, 'portuguese.txt'), os.path.join('wordlist', 'portuguese.txt')),
                      (os.path.join(wordlist_path, 'spanish.txt'), os.path.join('wordlist', 'spanish.txt'))
                      ],
    'namespace_packages': ['zope', 'google']}

exe = Executable(
    script=os.path.join('packaging', 'windows', 'lbry-win32-app', 'LBRYWin32App.py'),
    base='Win32GUI',
    icon=win_icon,
    compress=True,
    shortcutName=name,
    shortcutDir='DesktopFolder',
    targetName='{0}.exe'.format(name)
    # targetDir="LocalAppDataFolder"
    )

setup(
    name=name,
    version=__version__,
    description=name + ": " + description,
    url='lbry.io',
    author='LBRY, Inc.',
    keywords='LBRY',
    data_files=[],
    options={'build_exe': build_exe_options,
             'bdist_msi': bdist_msi_options},
    executables=[exe],
    )