#!/bin/sh
# bee-boot-status — boot progress display on tty1.
# Shows live service status until all bee services are done or failed,
# then exits so getty can show the login prompt.
# GUI (lightdm) starts independently without waiting for this.

# Services to wait for before handing off to login prompt.
CRITICAL="bee-preflight bee-nvidia bee-audit"
# Additional services shown for information only.
ALL="bee-preflight bee-network bee-nvidia bee-audit bee-web"

svc_icon() {
    case "$(systemctl is-active "$1.service" 2>/dev/null)" in
        active)     printf '\033[32m[  OK  ]\033[0m' ;;
        failed)     printf '\033[31m[ FAIL ]\033[0m' ;;
        activating) printf '\033[33m[  ..  ]\033[0m' ;;
        *)          printf        '[      ]'          ;;
    esac
}

all_critical_done() {
    for svc in $CRITICAL; do
        case "$(systemctl is-active "$svc.service" 2>/dev/null)" in
            active|failed|inactive) ;;
            *) return 1 ;;
        esac
    done
    return 0
}

while true; do
    printf '\033[H\033[2J'
    printf '\n'
    printf '  \033[33m███████╗ █████╗ ███████╗██╗   ██╗      ██████╗ ███████╗███████╗\033[0m\n'
    printf '  \033[33m██╔════╝██╔══██╗██╔════╝╚██╗ ██╔╝      ██╔══██╗██╔════╝██╔════╝\033[0m\n'
    printf '  \033[33m█████╗  ███████║███████╗ ╚████╔╝ █████╗██████╔╝█████╗  █████╗\033[0m\n'
    printf '  \033[33m██╔══╝  ██╔══██║╚════██║  ╚██╔╝  ╚════╝██╔══██╗██╔══╝  ██╔══╝\033[0m\n'
    printf '  \033[33m███████╗██║  ██║███████║   ██║         ██████╔╝███████╗███████╗\033[0m\n'
    printf '  \033[33m╚══════╝╚═╝  ╚═╝╚══════╝   ╚═╝         ╚═════╝ ╚══════╝╚══════╝\033[0m\n'
    printf '  Hardware Audit LiveCD\n'
    printf '\n'
    for svc in $ALL; do
        printf '  %s  %s\n' "$(svc_icon $svc)" "$svc"
    done
    printf '\n'

    if all_critical_done; then
        printf '  \033[1mSystem ready.\033[0m  Audit is running in the background.\n'
        printf '  Web UI will be available at \033[1mhttp://<ip>/\033[0m when done.\n'
        printf '\n'
        sleep 2
        break
    fi

    sleep 1
done
