#!/bin/bash

# Sync app icons from container template dirs to the LibrePortal frontend.
#
# apps.json references /icons/apps/<app>.<ext> unconditionally (see
# webui_config.sh), so the icon file must physically exist in the frontend
# icons dir or the apps page falls back to the default icon.

# Copy a single app's icon into the frontend icons dir. Returns 0 if an
# icon was copied, 1 if the app has no icon (or no app name given).
# Idempotent — cheap enough to call on every install/uninstall.
webuiSyncAppIcon() {
    local app_name="$1"
    [[ -z "$app_name" ]] && return 1

    local icons_dir="${containers_dir}libreportal/frontend/icons/apps"
    mkdir -p "$icons_dir"

    # Icons live in the install template dir — copy_build_context.sh
    # excludes *.svg from the install→deployed copy, so the deployed
    # container dir can't be relied on as the source.
    local src_dir="${install_containers_dir}/${app_name}"
    local ext
    for ext in svg png; do
        local src="${src_dir}/${app_name}.${ext}"
        if [[ -f "$src" ]]; then
            # cp to a temp name then mv so the webserver never serves a
            # half-written file.
            local dest="${icons_dir}/${app_name}.${ext}"
            if cp "$src" "${dest}.tmp.$$" 2>/dev/null; then
                mv "${dest}.tmp.$$" "$dest" 2>/dev/null
            fi
            return 0
        fi
    done
    return 1
}

# Sync every app's icon. Used by the full WebUI update pass.
webuiSyncAppIcons() {
    echo "Syncing app icons from installed containers to LibrePortal frontend..."

    if [ -d "$install_containers_dir" ]; then
        find "$install_containers_dir" -maxdepth 1 -type d -not -path "$install_containers_dir" | while read -r dir; do
            local app_name
            app_name=$(basename "$dir")
            if webuiSyncAppIcon "$app_name"; then
                echo "✅ Copied icon for $app_name"
            else
                echo "⚠️  No icon found for $app_name"
            fi
        done
    else
        echo "❌ Install containers directory not found: $install_containers_dir"
    fi

    echo "Icon sync completed!"
}
