#!/bin/ksh
#
# SPDX-License-Identifier: CDDL-1.0
#
# Copyright 2025 Peter Tribble
#
# run illuminate
#

SVDIR=${0%/*}
LIBDIR=${SVDIR}/lib
ARCHLIBDIR=${LIBDIR}/$(/usr/bin/isainfo -k)
JARLIBDIR=${LIBDIR}/java
JAVA=java

#
# if installed then the locations change
#
INSTALLED=false
if [ "$INSTALLED" = "true" ]; then
    ARCHLIBDIR=/usr/lib/64
    JARLIBDIR=/usr/share/illuminate
fi

#
# need to give java more memory to handle contents file parsing
#
EXTRAMEMFLAGS="-Xmx1024m"

#
# there's a lot of duplication in the contents file - mode, owner, group
# and package will deduplicate well
# the G1GC gets a significant performance boost
#
#PKGFLAGS="-XX:+UseG1GC -XX:+UseStringDeduplication"
PKGFLAGS="-XX:+UseG1GC"

case $# in
0)
	LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA ${PKGFLAGS} ${EXTRAMEMFLAGS} -jar "${JARLIBDIR}"/illuminate.jar
	exit 0
	;;
esac

SVJAR=${JARLIBDIR}/illuminate.jar
JFJAR=${JARLIBDIR}/jfreechart-1.5.6.jar
JINGLEJAR=${JARLIBDIR}/jingle.jar
JUMBLEJAR=${JARLIBDIR}/jumble.jar
JKJAR=${JARLIBDIR}/jkstat.jar
JPJAR=${JARLIBDIR}/jproc.jar

BASEJARS=${SVJAR}:${JINGLEJAR}:${JUMBLEJAR}
ALLJARS=${JFJAR}:${JINGLEJAR}:${JUMBLEJAR}:${JKJAR}:${JPJAR}
PKGJARS=${BASEJARS}

case $1 in

services)
    shift
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${BASEJARS}" org.tribblix.illuminate.MultiView services
    exit 0
    ;;

explorer)
    shift
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${SVJAR}:${ALLJARS}" org.tribblix.illuminate.MultiView explorer
    exit 0
    ;;

information)
    shift
    $JAVA -cp "${BASEJARS}" org.tribblix.illuminate.MultiView information
    exit 0
    ;;

cpustate)
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${SVJAR}:${ALLJARS}" org.tribblix.illuminate.explorer.JCpuState "$@"
    exit 0
    ;;

fsstat)
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${SVJAR}:${ALLJARS}" org.tribblix.illuminate.explorer.JFSstat
    exit 0
    ;;

arcstat)
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${SVJAR}:${ALLJARS}" org.tribblix.illuminate.explorer.ArcStat
    exit 0
    ;;

software)
    shift
    $JAVA ${PKGFLAGS} ${EXTRAMEMFLAGS} -cp "${SVJAR}:${ALLJARS}" org.tribblix.illuminate.MultiView software "$@"
    exit 0
    ;;

#
# the following are undocumented
#

man)
    shift
    case $1 in
	*.*)
	    exec $JAVA -cp "${SVJAR}" org.tribblix.illuminate.helpers.ManViewer "$1"
	    ;;
	*)
	    NMAN=$(man -l "$1" | head -1 | awk '{print $1}' | sed -e 's:(:.:' -e 's:)::')
	    if [ -n "${NMAN}" ]; then
		exec $JAVA -cp "${SVJAR}" org.tribblix.illuminate.helpers.ManViewer "${NMAN}"
	    else
		echo "Usage: $0 man manpage.section"
		exit 2
	    fi
	    ;;
    esac
    ;;

check|pkgchk)
    shift
    $JAVA ${PKGFLAGS} ${EXTRAMEMFLAGS} -cp "${PKGJARS}" org.tribblix.illuminate.pkgview.PkgCheck "$@"
    exit 0
    ;;

missingpackages)
    shift
    $JAVA -cp "${PKGJARS}" org.tribblix.illuminate.pkgview.MissingPackages "$@"
    exit 0
    ;;

packagesizes)
    shift
    $JAVA ${PKGFLAGS} -cp "${PKGJARS}" org.tribblix.illuminate.pkgview.PackageSizes "$@"
    exit 0
    ;;

overlaysizes)
    shift
    $JAVA ${PKGFLAGS} -cp "${PKGJARS}" org.tribblix.illuminate.pkgview.OverlaySizes "$@"
    exit 0
    ;;

smfdependents)
    shift
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${BASEJARS}" org.tribblix.illuminate.SmfDependents "$@"
    exit 0
    ;;

smfdependencies)
    shift
    LD_LIBRARY_PATH=${ARCHLIBDIR} $JAVA -cp "${BASEJARS}" org.tribblix.illuminate.SmfDependencies "$@"
    exit 0
    ;;

esac

cat <<EOF
Usage: $0 [subcommand]
  Available subcommands:
services - show SMF services
explorer - show system explorer view
information - show system information
software - show installed packages
cpustate [ chart | vertical ] - show the enhanced jcpustate demo
fsstat - show the jfsstat demo
arcstat - display zfs arc statistics
EOF
exit 2
