# -*- mode: python ; coding: utf-8 -*-

import os
from PyInstaller.utils.hooks import collect_all, collect_submodules

block_cipher = None

ROOT = os.path.dirname(os.path.dirname(os.path.abspath(SPEC)))
PEERDROP_PKG = os.path.join(ROOT, 'peerdrop')

# Local editable packages need explicit paths
IPFS_LITE = os.path.join(os.path.dirname(ROOT), 'ipfs-lite', 'py-ipfs-lite')
LIBP2P = os.path.join(os.path.dirname(ROOT), 'py-libp2p')

hidden_imports = [
    'trio',
    'click',
    'click.core',
    'click.decorators',
    'click.types',
    'click.testing',
    'msgpack',
    'multiaddr',
    'multiaddr.codecs',
    'multiaddr.codecs.ip4',
    'multiaddr.codecs.ip6',
    'multiaddr.codecs.cid',
    'multiaddr.codecs.certhash',
    'multiaddr.codecs.domain',
    'multiaddr.codecs.fspath',
    'multiaddr.codecs.garlic32',
    'multiaddr.codecs.garlic64',
    'multiaddr.codecs.http_path',
    'multiaddr.codecs.ipcidr',
    'multiaddr.codecs.memory',
    'multiaddr.codecs.onion',
    'multiaddr.codecs.onion3',
    'multiaddr.codecs.uint16be',
    'multiaddr.codecs.utf8',
    'coincurve',
    'coincurve._cffi_backend',
    'cffi',
    'cffi._cffi_backend',
    '_cffi_backend',
]

a = Analysis(
    [os.path.join(PEERDROP_PKG, 'interfaces', 'cli', 'app.py')],
    pathex=[ROOT, IPFS_LITE, LIBP2P],
    binaries=[],
    datas=[],
    hiddenimports=hidden_imports,
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=['PySide6', 'PySide6.QtCore', 'PySide6.QtGui', 'PySide6.QtWidgets',
              'kivy', 'kivymd', 'numpy', 'PIL'],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

# Collect all submodules from local editable packages
a.hiddenimports += collect_submodules('py_ipfs_lite')
a.hiddenimports += collect_submodules('libp2p')
a.hiddenimports += collect_submodules('coincurve')
a.hiddenimports += collect_submodules('cffi')
a.hiddenimports += collect_submodules('multiaddr')

pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)

exe = EXE(
    pyz,
    a.scripts,
    a.binaries,
    a.zipfiles,
    a.datas,
    [],
    name='peerdrop',
    debug=False,
    bootloader_ignore_signals=False,
    strip=False,
    upx=False,
    upx_exclude=[],
    runtime_tmpdir=None,
    console=True,
    disable_windowed_traceback=False,
    argv_emulation=False,
    target_arch=None,
    codesign_identity=None,
    entitlements_file=None,
    icon=None,
)
