#!/bin/sh

# PROVIDE: prepare_vm
# REQUIRE: LOGIN
# BEFORE: securelevel

. /etc/rc.subr

name="prepare_vm"
rcvar="${name}_enable"
start_cmd="${name}_start"

LOG_FILE="/var/log/init_script.log"


prepare_vm_start() {
    if [ -f "$LOG_FILE" ]; then
            return 0
    fi

    exec 1>>"$LOG_FILE" 2>&1

    echo "--- Starting post install script: $(date) ---"

    CONTEXT_DEVICE="/dev/cd0"
    MOUNT_POINT="/mnt/context"

    mkdir -p $MOUNT_POINT

    if [ -e "$CONTEXT_DEVICE" ]; then
        echo "Mounting context..."
        if ! mount -t cd9660 $CONTEXT_DEVICE $MOUNT_POINT; then
            echo "Failed to mount $CONTEXT_DEVICE"
            return 1
        fi
    else
        echo "Context device not found."
        return 1
    fi

    if [ -f "$MOUNT_POINT/context.sh" ]; then
        echo "Reading context..."
        cp "$MOUNT_POINT/context.sh" /root/
        chmod 600 /root/context.sh
        . /root/context.sh
    else
        echo "context.sh not found."
        umount $MOUNT_POINT
        return 1
    fi

    if [ -n "$USER_NAME" ]; then
        if ! id "$USER_NAME" >/dev/null 2>&1; then
            echo "Creating user $USER_NAME..."
            pw useradd "$USER_NAME" -m -s /bin/sh -G wheel
        fi

        echo "Creating ssh directory for user $USER_NAME..."
        USER_HOME="/home/$USER_NAME"
        SSH_DIR="$USER_HOME/.ssh"
        mkdir -p "$SSH_DIR"

        if [ -n "$SSH_PUBLIC_KEY" ]; then
            echo "Copying ssh keys for user $USER_NAME..."
            echo "$SSH_PUBLIC_KEY" > "$SSH_DIR/authorized_keys"
            chmod 700 "$SSH_DIR"
            chmod 600 "$SSH_DIR/authorized_keys"
            chown -R "$USER_NAME:$USER_NAME" "$SSH_DIR"
        fi

        echo "Copying ssh keys for root..."
        mkdir -p /root/.ssh
        echo "$SSH_PUBLIC_KEY" > "/root/.ssh/authorized_keys"
        chmod 700 "/root/.ssh"
        chmod 600 "/root/.ssh/authorized_keys"

    fi

    echo "Unmounting context..."
    umount $MOUNT_POINT
    echo "Done!"

}

load_rc_config $name
run_rc_command "$1"
