#!/bin/bash
# quickemu-ram - run a Quickemu VM entirely in RAM
# usage: ./quickemu-ram <vm.conf>

set -e

CONF="$1"
if [ -z "$CONF" ]; then
  echo "Usage: $0 <vm.conf>"
  exit 1
fi

VMNAME=$(basename "$CONF" .conf)
VMDIR="./$VMNAME"
DISK="$VMDIR/disk.qcow2"

RAMCONF="/dev/shm/$VMNAME.conf"
RAMDIR="/dev/shm/$VMNAME"

# check
if [ ! -f "$CONF" ]; then
  echo "❌ Config file not found: $CONF"
  exit 1
fi
if [ ! -f "$DISK" ]; then
  echo "❌ Disk not found: $DISK"
  exit 1
fi

# copy to RAM
echo "📥 Copying $CONF and $DISK to RAM..."
cp "$CONF" "$RAMCONF"
rm -rf "$RAMDIR"
mkdir -p "$RAMDIR"
cp "$DISK" "$RAMDIR/"

# run Quickemu (waits until VM exits)
echo "🚀 Starting Quickemu from RAM..."
quickemu --vm "$RAMCONF"

# flush possible keystrokes left in buffer
while read -t 0; do read -r; done

# ask for sync
echo
read -t 5 -p "💾 Sync RAM changes back to disk? [y/N] (auto-ignore in 5s) " ans || ans="n"

if [[ "$ans" =~ ^[Yy]$ ]]; then
  TS=$(date +%Y%m%d-%H%M%S)
  echo "🔄 Renaming old folder to ${VMDIR}.bak.$TS"
  mv "$VMDIR" "${VMDIR}.bak.$TS"
  echo "💾 Syncing RAM copy back to $VMDIR"
  mkdir -p "$VMDIR"
  rsync -a --inplace "$RAMDIR/" "$VMDIR/"
  echo "✅ Sync complete"
else
  echo "❌ Changes discarded"
fi

# cleanup
echo "🧹 Cleaning RAM..."
rm -rf "$RAMCONF" "$RAMDIR"

echo "✅ Done"
