#!/bin/bash

# This is used for initial loading
# The starting point and is the only code that doesnt contain logic requirements

# Source "init.sh" and "variables.sh" if they exist, otherwise return an error
if [ -f "init.sh" ] && [ -f "variables.sh" ]; then
    source "init.sh"
    source "variables.sh"
else
    # Print an error message for any missing files
    [ ! -f "init.sh" ] && isError " File 'init.sh' does not exist. Unable to source."
    [ ! -f "variables.sh" ] && isError " File 'variables.sh' does not exist. Unable to source."
    echo "Files are missing, please run 'libreportal reset'"
fi

# checkConfigFilesMissingFiles uses runInstallOp (in docker/command/run_privileged.sh)
# to copy any missing config templates into place. That file's autoload stub
# isn't defined until the function manifest is sourced inside initilize_files.sh
# — which we haven't called yet at this point in load_sources. Source the
# privileged helpers eagerly so the reconciliation can do its work on a fresh
# install or after a config-template drift. The file is pure function defs;
# safe to source unconditionally.
[ -f "${install_scripts_dir}docker/command/run_privileged.sh" ] && \
    source "${install_scripts_dir}docker/command/run_privileged.sh"

# Source config check
if [ -f "${install_scripts_dir}config/core/config_check_missing.sh" ]; then
    source "${install_scripts_dir}config/core/config_check_missing.sh"
    checkConfigFilesMissingFiles;
else
    # Print an error message for any missing files
    [ ! -f "${install_scripts_dir}config/core/config_check_missing.sh" ] && isError " File '${install_scripts_dir}config/core/config_check_missing.sh' does not exist. Unable to source."
    echo "Files are missing, please run 'libreportal reset'"
fi

# Source the remaining files if they all exist
if [ -f "${install_scripts_dir}source/loading/check_files.sh" ] && \
   [ -f "${install_scripts_dir}source/loading/initilize_files.sh" ] && \
   [ -f "${install_scripts_dir}source/loading/scan_files.sh" ]; then
    source "${install_scripts_dir}source/loading/check_files.sh"
    source "${install_scripts_dir}source/loading/initilize_files.sh"
    source "${install_scripts_dir}source/loading/scan_files.sh"
else
    # Print an error message for any missing files
    [ ! -f "${install_scripts_dir}source/loading/check_files.sh" ] && isError " File '${install_scripts_dir}source/loading/check_files.sh' does not exist. Unable to source."
    [ ! -f "${install_scripts_dir}source/loading/initilize_files.sh" ] && isError " File '${install_scripts_dir}source/loading/initilize_files.sh' does not exist. Unable to source."
    [ ! -f "${install_scripts_dir}source/loading/scan_files.sh" ] && isError " File '${install_scripts_dir}source/loading/scan_files.sh' does not exist. Unable to source."
    echo "Files are missing, please run 'libreportal reset'"
fi

# For starting the script
if [[ $init_run_flag == "true" ]]; then
    # For loading LibrePortal as a long-running process (task processor,
    # WebUI service). Eager loading wins here — the process keeps running,
    # so first call to anything should be hot. LP_LAZY stays unset.
    sourceCheckFiles "run";
elif [[ $init_run_flag == "false" ]]; then
    # For one-shot CLI invocations. Default LP_LAZY=1 so short commands
    # (`libreportal help`, `peer list`, etc.) only source the ~8 files with
    # top-level side effects + the function manifest stubs, deferring the
    # ~420 pure function libs until something actually calls them. ~34%
    # wall-time savings on a no-op command in measurement (Phase 4 of the
    # lazy-load work). Explicit `LP_LAZY=0 libreportal …` still works for
    # debugging or for catching a stale manifest.
    : "${LP_LAZY:=1}"
    export LP_LAZY
    sourceCheckFiles "cli";
fi