import sys
from pathlib import Path
from panda3d.core import getModelPath
from ursina import string_utilities

paused = False
time_scale = 1
calculate_dt = True
sequences = []
trace_entity_definition = False # enable to set entity.line_definition
print_entity_definition = False

package_folder = Path(__file__).parent
asset_folder = Path(sys.argv[0]).parent
blender_paths = dict()

development_mode = True
dirs = [e.stem for e in asset_folder.parent.iterdir() if e.is_dir()]
if 'src' in dirs and 'python' in dirs:
    development_mode = False

window_type = 'onscreen'
show_ursina_splash = False
ursina_splash = None
gltf_no_srgb = True

print_info = development_mode
print_warnings = True
raise_exception_on_missing_model = False
raise_exception_on_missing_texture = False

internal_models_folder = package_folder / 'models/'
internal_models_compressed_folder = package_folder / 'models_compressed/'
internal_prefabs_folder = package_folder / 'prefabs/'
internal_scripts_folder = package_folder / 'scripts/'
internal_textures_folder = package_folder / 'textures/'
internal_fonts_folder = package_folder / 'fonts/'
internal_audio_folder = package_folder / 'audio/'

scenes_folder = asset_folder / 'scenes/'
scripts_folder = asset_folder / 'scripts/'
fonts_folder = asset_folder / 'fonts/'

compressed_textures_folder = asset_folder / 'textures_compressed/'
compressed_models_folder = asset_folder / 'models_compressed/'

# fonts are loaded py panda3d, so add paths here
_model_path = getModelPath()
_model_path.append_path(str(internal_fonts_folder.resolve()))
_model_path.append_path(str(Path('C:/Windows/Fonts').resolve()))
_model_path.append_path(str(asset_folder.resolve()))


base = None             # this will be set once the Ursina() is created
hot_reloader = None     # will be set my main if development_mode

def pause():
    global paused
    paused = True

def resume():
    global paused
    paused = False

def quit():
    sys.exit()


def load_settings(path=asset_folder / 'settings.py'):
    if path.exists():
        with open(path) as f:
            try:
                # d = dict(locals(), **globals())
                # exec(f.read(), d, d)
                exec('from ursina import *\n' + f.read())
                string_utilities.print_info('loaded settings from settings.py successfully')
            except Exception as e:
                string_utilities.print_warning('warning: settings.py error:', e)
