# -*- mode: python ; coding: utf-8 -*-
from os.path import join
from platform import system
from PyInstaller.utils.hooks import copy_metadata
import sysconfig

datas = [
    ('src/khoj/interface/web', 'khoj/interface/web'),
    (f'{sysconfig.get_paths()["purelib"]}/transformers', 'transformers'),
    (f'{sysconfig.get_paths()["purelib"]}/langchain', 'langchain'),
    (f'{sysconfig.get_paths()["purelib"]}/PIL', 'PIL'),
    (f'{sysconfig.get_paths()["purelib"]}/gpt4all', 'gpt4all'),
]
datas += copy_metadata('torch')
datas += copy_metadata('tqdm')
datas += copy_metadata('regex')
datas += copy_metadata('requests')
datas += copy_metadata('packaging')
datas += copy_metadata('filelock')
datas += copy_metadata('numpy')
datas += copy_metadata('tokenizers')
datas += copy_metadata('pillow')
datas += copy_metadata('huggingface_hub')
datas += copy_metadata('safetensors')
datas += copy_metadata('pyyaml')

block_cipher = None

a = Analysis(
    ['src/khoj/main.py'],
    pathex=[],
    binaries=[],
    datas=datas,
    hiddenimports=['huggingface_hub.repository', 'PIL', 'PIL._tkinter_finder', 'tiktoken_ext', 'tiktoken_ext.openai_public'],
    hookspath=[],
    hooksconfig={},
    runtime_hooks=[],
    excludes=[],
    win_no_prefer_redirects=False,
    win_private_assemblies=False,
    cipher=block_cipher,
    noarchive=False,
)

# Filter out unused and/or duplicate shared libs
torch_lib_paths = {
    join('torch', 'lib', 'libtorch_cuda.so'),
    join('torch', 'lib', 'libtorch_cpu.so'),
}
a.datas = [entry for entry in a.datas if not entry[0] in torch_lib_paths]

os_path_separator = '\\' if system() == 'Windows' else '/'
a.datas = [entry for entry in a.datas if not f'torch{os_path_separator}_C.cp' in entry[0]]
a.datas = [entry for entry in a.datas if not f'torch{os_path_separator}_dl.cp' in entry[0]]

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

if system() != 'Darwin':
    # Add Splash screen to show on app launch
    splash = Splash(
        'src/khoj/interface/web/assets/icons/favicon-128x128.png',
        binaries=a.binaries,
        datas=a.datas,
        text_pos=(10, 160),
        text_size=12,
        text_color='black',
        minify_script=True,
        always_on_top=True
    )

    exe = EXE(
        pyz,
        a.scripts,
        a.binaries,
        a.zipfiles,
        a.datas,
        splash,
        splash.binaries,
        [],
        name='Khoj',
        debug=False,
        bootloader_ignore_signals=False,
        strip=False,
        upx=True,
        upx_exclude=[],
        runtime_tmpdir=None,
        console=False,
        disable_windowed_traceback=False,
        argv_emulation=False,
        target_arch='x86_64',
        codesign_identity=None,
        entitlements_file=None,
        icon='src/khoj/interface/web/assets/icons/favicon-128x128.ico',
    )
else:
    exe = EXE(
        pyz,
        a.scripts,
        a.binaries,
        a.zipfiles,
        a.datas,
        [],
        name='Khoj',
        debug=False,
        bootloader_ignore_signals=False,
        strip=False,
        upx=True,
        upx_exclude=[],
        runtime_tmpdir=None,
        console=False,
        disable_windowed_traceback=False,
        argv_emulation=False,
        target_arch='x86_64',
        codesign_identity=None,
        entitlements_file=None,
        icon='src/khoj/interface/web/assets/icons/favicon.icns',
    )
    app = BUNDLE(
        exe,
        name='Khoj.app',
        icon='src/khoj/interface/web/assets/icons/favicon.icns',
        bundle_identifier=None,
    )
