#!/usr/bin/ash
# Live-boot hook: find ISO by UUID, mount squashfs, set up overlay on /new_root.

run_latehook() {
    local _uuid _basedir _dev _img

    _uuid="$(getarg archisosearchuuid=)"
    _basedir="$(getarg archisobasedir=)"
    : "${_basedir:=arch}"

    if [ -z "${_uuid}" ]; then
        echo "archiso: archisosearchuuid not set in kernel cmdline"
        return 1
    fi

    # Wait up to 30 s for a block device with the ISO UUID to appear
    local _waited=0
    while [ "${_waited}" -lt 30 ]; do
        _dev="$(blkid -l -o device -t UUID="${_uuid}" 2>/dev/null)"
        [ -n "${_dev}" ] && break
        sleep 1
        _waited=$(( _waited + 1 ))
    done

    if [ -z "${_dev}" ]; then
        echo "archiso: could not find boot medium with UUID=${_uuid}"
        return 1
    fi

    echo "archiso: found boot medium ${_dev}"

    mkdir -p /run/archiso/bootmnt
    mount -r "${_dev}" /run/archiso/bootmnt || { echo "archiso: mount bootmnt failed"; return 1; }

    _img="/run/archiso/bootmnt/${_basedir}/x86_64/airootfs.sfs"
    if [ ! -e "${_img}" ]; then
        echo "archiso: squashfs not found at ${_img}"
        return 1
    fi

    mkdir -p /run/archiso/airootfs
    mount -r -t squashfs "${_img}" /run/archiso/airootfs || { echo "archiso: squashfs mount failed"; return 1; }

    # RAM-backed writable overlay layer
    mkdir -p /run/archiso/overlay
    mount -t tmpfs tmpfs -o mode=0755 /run/archiso/overlay
    mkdir -p /run/archiso/overlay/upper /run/archiso/overlay/work

    mkdir -p /new_root
    mount -t overlay overlay \
        -o lowerdir=/run/archiso/airootfs,upperdir=/run/archiso/overlay/upper,workdir=/run/archiso/overlay/work \
        /new_root || { echo "archiso: overlay mount failed"; return 1; }

    echo "archiso: live root mounted on /new_root"
}
