#!/bin/bash
# ExoLinux Installer
set -euo pipefail

LIB="/usr/lib/exolinux-installer"

source "$LIB/common.sh"
for step in "$LIB/steps"/[0-9]*.sh; do
    source "$step"
done

main() {
    # --test: проверка UI без реальных операций с диском
    if [[ "${1:-}" == "--test" ]]; then
        TEST_MODE=1
        export TEST_MODE
    fi

    require_root

    : > "$LOG"

    # Параметры автоустановки из /proc/cmdline (exolinux.*)
    parse_cmdline

    # UEFI обязателен только для интерактивной установки. В unattended
    # пропускаем — QEMU с direct kernel boot не имеет /sys/firmware/efi,
    # но реальная установка на UEFI-таргет всё равно проходит (parted+mkfs+
    # grub-install умеют без EFI vars).
    if [[ "${TEST_MODE:-0}" -eq 0 && "${EXOLINUX_UNATTENDED:-0}" -ne 1 ]]; then
        require_uefi
    fi

    log "Запуск установщика ExoLinux $INSTALLER_VERSION${TEST_MODE:+ (TEST MODE)}${EXOLINUX_UNATTENDED:+ (UNATTENDED)}"
    # Дебаг: фиксируем cmdline и распарсенные значения в serial и лог.
    # Пишем напрямую в /dev/ttyS0 — /dev/console внутри юнита с TTYPath
    # перенаправляется на tty1 и не виден тестам.
    {
        echo "[exolinux-installer] parsed: UNATTENDED=$EXOLINUX_UNATTENDED disk=$INSTALL_DISK variant=$INSTALL_VARIANT hostname=$INSTALL_HOSTNAME net_mode=$INSTALL_NET_MODE user=${INSTALL_USER:-}"
    } > /dev/ttyS0 2>/dev/null || true
    log "cmdline=$(cat /proc/cmdline 2>/dev/null)"
    log "parsed: UNATTENDED=$EXOLINUX_UNATTENDED disk=$INSTALL_DISK variant=$INSTALL_VARIANT hostname=$INSTALL_HOSTNAME"

    # В unattended welcome и confirm пропускаются целиком; всё остальное
    # отрабатывает обычным путём, но шаги забирают значения из переменных
    # вместо whiptail-диалогов (см. EXOLINUX_UNATTENDED guard в каждом шаге).
    if [[ "${EXOLINUX_UNATTENDED:-0}" -eq 1 ]]; then
        log "UNATTENDED: disk=$INSTALL_DISK variant=$INSTALL_VARIANT hostname=$INSTALL_HOSTNAME net_mode=$INSTALL_NET_MODE user=${INSTALL_USER:-нет}"
    else
        step_welcome
    fi

    step_disk
    step_variant
    step_system
    step_network
    step_users

    if [[ "${EXOLINUX_UNATTENDED:-0}" -ne 1 ]]; then
        step_confirm
    fi

    if [[ "${TEST_MODE:-0}" -eq 1 ]]; then
        msg "ТЕСТ: шаги разметки и установки пропущены.\n\nПараметры:\n  Диск: $INSTALL_DISK\n  Вариант: $INSTALL_VARIANT\n  Hostname: $INSTALL_HOSTNAME\n  Пользователь: ${INSTALL_USER:-нет}"
        log "TEST MODE: установка пропущена. Параметры OK."
        exit 0
    fi

    step_partition
    step_install
    step_finish
}

main "$@"
