import os
import runpy
import shutil
import sys

from pypos.core.utils.config_utils import read_app_settings, read_endpoint_config
from pypos.core.utils.path_utils import (
    get_app_data_dir,
    get_app_data_resource_dir,
    get_app_resource_dir,
    get_db_path,
    get_install_base_dir,
)


def _copy_if_missing(target_path, candidates):
    if os.path.exists(target_path):
        return
    os.makedirs(os.path.dirname(target_path), exist_ok=True)
    for source_path in candidates:
        if source_path and os.path.exists(source_path):
            shutil.copy2(source_path, target_path)
            return


def bootstrap_runtime():
    app_data_dir = get_app_data_dir()
    os.makedirs(app_data_dir, exist_ok=True)

    install_base = get_install_base_dir()
    bundle_base = get_app_resource_dir()

    _copy_if_missing(
        os.path.join(app_data_dir, "config.json"),
        [
            os.path.join(install_base, "config.json"),
            os.path.join(bundle_base, "config.json"),
        ],
    )
    _copy_if_missing(
        os.path.join(app_data_dir, "app_settings.json"),
        [
            os.path.join(install_base, "app_settings.json"),
            os.path.join(bundle_base, "app_settings.json"),
        ],
    )

    get_app_data_resource_dir()
    get_db_path()
    read_endpoint_config()
    read_app_settings()


def main() -> int:
    bootstrap_runtime()
    runpy.run_module("pypos.app", run_name="__main__")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
