#!/bin/bash

sourceScanFiles() 
{
    local load_type="$1"
    local file_pattern

    # Specific LibrePortal config files
    if [ "$load_type" = "libreportal_configs" ]; then
        # Load new subdirectory config files only (no more old structure fallback)
        local folder_dir="$configs_dir"
        
        # Load new subdirectory config files with exclusions
        while IFS= read -r -d '' file; do
            if [ -f "$file" ]; then
                local filename=$(basename "$file")
                local should_load=true
                
                # Skip .category files and excluded files
                if [[ "$file" =~ \.category$ ]] || [[ "$filename" == "app_categories" ]]; then
                    should_load=false
                fi
                
                if [ "$should_load" = true ]; then
                    source "$file"
                    # echo "$load_type NEW FILE $file"
                fi
            fi
        done < <(find "$folder_dir" -maxdepth 2 -type f ! -name "*.category" ! -name "config_*" ! -name ".*" -print0)

        # Per-location backup configs live nested at depth 3
        # (configs/backup/locations/<idx>/location.config) — source them via
        # the dedicated loader so CFG_BACKUP_LOC_<idx>_* vars are populated.
        if declare -f sourceBackupLocations >/dev/null 2>&1; then
            sourceBackupLocations
        fi

    # Specific for LibrePortal app container configs
    elif [ "$load_type" = "app_configs" ]; then
        local file_pattern="*.config"
        local folder_dir="$containers_dir"

    # Specific for LibrePortal app install scripts
    elif [ "$load_type" = "containers" ]; then
        local file_pattern="*.sh"
        local folder_dir="$install_containers_dir"
    else
        echo "Invalid load type: $load_type"
    fi

    # Scanning function for other types (not libreportal_configs).
    # app_configs live under /docker/containers (owned by the docker install user
    # and not list-readable by the manager), so enumerate them AS that user via
    # runFileOp; the manager still sources each (the .config files are o+r). The
    # 'containers' install templates are manager-owned, so a plain find suffices.
    if [ "$load_type" != "libreportal_configs" ]; then
        local scan_op=""
        [[ "$load_type" == "app_configs" ]] && scan_op="runFileOp"
        while IFS= read -r -d '' file; do
            if [ -f "$file" ]; then
                source "$file"
                # echo "$load_type FILE $file"
            fi
        done < <($scan_op find "$folder_dir" -maxdepth 3 -type d \( -name 'resources' \) -prune -o -type f -name "$file_pattern" -print0)
    fi

    # Load the categories from the file into an array
    if [ "$load_type" = "libreportal_configs" ]; then
        if [ -f "$configs_dir/app_categories" ]; then
            mapfile -t app_categories < $configs_dir/app_categories
        fi
    fi
}
