# -*- mode: python -*-
import importlib
import os
import pkg_resources
import wcwidth

block_cipher = None

datas = [("./tutor/templates", "./tutor/templates")]
hidden_imports = []

# Fix missing wcwidth/version.json file
datas.append((os.path.dirname(wcwidth.__file__), 'wcwidth'))

# Auto-discover plugins and include patches & templates folders
for entrypoint in pkg_resources.iter_entry_points("tutor.plugin.v0"):
    plugin_name = entrypoint.name
    plugin = entrypoint.load()
    plugin_root = os.path.dirname(plugin.__file__)
    plugin_root_module_name = os.path.basename(plugin_root)
    hidden_imports.append(entrypoint.module_name)
    for folder in ["patches", "templates"]:
        path = os.path.join(plugin_root, folder)
        if os.path.exists(path):
            datas.append((path, os.path.join(plugin_root_module_name, folder)))
# Fix lts import: if we don't declare some modules, pyinstaller does not find them
hidden_imports.append("tutorlts.__about__")
hidden_imports.append("Crypto.Cipher.AES")
hidden_imports.append("Crypto.Cipher.PKCS1_OAEP")
hidden_imports.append("Crypto.Hash.SHA256")
hidden_imports.append("Crypto.PublicKey.RSA")
hidden_imports.append("Crypto.Random")
hidden_imports.append("Crypto.Signature.PKCS1_v1_5")
hidden_imports.append("kubernetes")
hidden_imports.append("uuid")


# The following was initially generated with:
# pyinstaller --onefile --name=tutor --add-data=./tutor/templates:./tutor/templates ./bin/main.py

a = Analysis(
    ["bin/main.py"],
    pathex=[os.path.abspath(".")],
    binaries=[],
    datas=datas,
    hiddenimports=hidden_imports,
    hookspath=[],
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name="tutor",
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=True,
    runtime_tmpdir=None,
    console=True,
)
