#!/bin/bash
# Unified installer for all personal Linux system modules.
#
# CORE modules (always installed):
#   1. Workout screen locker    – python_pkg/screen_locker/
#   2. Hosts blocking setup     – linux_configuration/scripts/periodic_background/hosts/
#   3. Midnight shutdown timer  – setup_midnight_shutdown.sh
#
# SECONDARY modules (prompted unless --all / --none given):
#   4. Steam backlog enforcer   – python_pkg/steam_backlog_enforcer/
#   5. Pacman wrapper           – periodic_background/digital_wellbeing/pacman/
#   6. i3 configuration         – periodic_background/i3-configuration/
#   7. Compulsive opening block – block_compulsive_opening.sh
#   8. Focus-mode daemon        – install_focus_mode_daemon.sh
#
# Usage:
#   ./install_core_system.sh [--all | --none]
#
# Flags:
#   --all   Install all secondary modules without prompting
#   --none  Skip all secondary modules
#   -h      Show this help

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LINUX_CONFIG="$SCRIPT_DIR"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"

# ── Colour helpers ───────────────────────────────────────────────────────────
bold() { printf '\e[1m%s\e[0m' "$*"; }
green() { printf '\e[1;32m%s\e[0m' "$*"; }
yellow() { printf '\e[1;33m%s\e[0m' "$*"; }
red() { printf '\e[1;31m%s\e[0m' "$*"; }

header() { printf '\n%s\n%s\n' "$(bold "=== $1 ===")" "$(printf '=%.0s' {1..50})"; }
ok() { printf '%s %s\n' "$(green "✓")" "$*"; }
skip() { printf '%s %s\n' "$(yellow "–")" "$*"; }
fail() { printf '%s %s\n' "$(red "✗")" "$*"; }

# ── Argument parsing ─────────────────────────────────────────────────────────
SECONDARY_MODE="ask"  # ask | all | none

for arg in "$@"; do
    case "$arg" in
    --all)  SECONDARY_MODE="all" ;;
    --none) SECONDARY_MODE="none" ;;
    -h | --help)
        sed -n '2,/^$/p' "$0"
        exit 0
        ;;
    *)
        printf 'Unknown option: %s\n' "$arg" >&2
        exit 1
        ;;
    esac
done

# ── Result tracking ──────────────────────────────────────────────────────────
declare -a INSTALLED=()
declare -a SKIPPED=()
declare -a FAILED=()

run_installer() {
    local name="$1"
    shift
    header "$name"
    if "$@"; then
        ok "$name installed"
        INSTALLED+=("$name")
    else
        fail "$name failed (exit $?)"
        FAILED+=("$name")
    fi
}

ask_install() {
    # ask_install <name> <command...>
    # Prompts user; respects SECONDARY_MODE override.
    local name="$1"
    shift

    if [[ $SECONDARY_MODE == "none" ]]; then
        skip "$name (--none)"
        SKIPPED+=("$name")
        return
    fi

    if [[ $SECONDARY_MODE == "all" ]]; then
        run_installer "$name" "$@"
        return
    fi

    # interactive
    local answer
    printf '\nInstall %s? [y/N] ' "$(bold "$name")"
    read -r answer
    if [[ "${answer,,}" == "y" ]]; then
        run_installer "$name" "$@"
    else
        skip "$name"
        SKIPPED+=("$name")
    fi
}

# ── Summary ──────────────────────────────────────────────────────────────────
print_summary() {
    printf '\n%s\n' "$(bold "========== INSTALL SUMMARY ==========")"
    if [[ ${#INSTALLED[@]} -gt 0 ]]; then
        printf '%s\n' "$(green "Installed (${#INSTALLED[@]}):")"
        for m in "${INSTALLED[@]}"; do printf '  %s %s\n' "$(green "✓")" "$m"; done
    fi
    if [[ ${#SKIPPED[@]} -gt 0 ]]; then
        printf '%s\n' "$(yellow "Skipped (${#SKIPPED[@]}):")"
        for m in "${SKIPPED[@]}"; do printf '  %s %s\n' "$(yellow "–")" "$m"; done
    fi
    if [[ ${#FAILED[@]} -gt 0 ]]; then
        printf '%s\n' "$(red "Failed (${#FAILED[@]}):")"
        for m in "${FAILED[@]}"; do printf '  %s %s\n' "$(red "✗")" "$m"; done
        return 1
    fi
}

# ═══════════════════════════════════════════════════════════════════════════════
# CORE MODULES (always installed)
# ═══════════════════════════════════════════════════════════════════════════════
printf '\n%s\n' "$(bold "Installing CORE modules…")"

run_installer "Workout screen locker" \
    bash "$REPO_ROOT/python_pkg/screen_locker/install_systemd.sh"

run_installer "Hosts blocking" \
    bash "$LINUX_CONFIG/scripts/periodic_background/hosts/install.sh"

run_installer "Midnight shutdown timer" \
    bash "$LINUX_CONFIG/scripts/periodic_background/digital_wellbeing/setup_midnight_shutdown.sh"

# ═══════════════════════════════════════════════════════════════════════════════
# SECONDARY MODULES (prompted unless --all / --none)
# ═══════════════════════════════════════════════════════════════════════════════
printf '\n%s\n' "$(bold "Secondary modules (${SECONDARY_MODE})…")"

ask_install "Steam backlog enforcer" \
    sudo bash "$REPO_ROOT/python_pkg/steam_backlog_enforcer/install.sh"

ask_install "Pacman wrapper" \
    bash "$LINUX_CONFIG/scripts/periodic_background/digital_wellbeing/pacman/install_pacman_wrapper.sh"

ask_install "i3 configuration" \
    bash "$LINUX_CONFIG/scripts/periodic_background/i3-configuration/install.sh"

ask_install "Compulsive opening blockade" \
    sudo bash "$LINUX_CONFIG/scripts/periodic_background/digital_wellbeing/block_compulsive_opening.sh" install

ask_install "Focus-mode daemon" \
    bash "$LINUX_CONFIG/scripts/periodic_background/digital_wellbeing/install_focus_mode_daemon.sh" install

# ═══════════════════════════════════════════════════════════════════════════════
print_summary
