#!/usr/bin/env bash
# ============================================================================
# Knotsday - Drive Preparation Script
# Formats a drive as ext4 and sets up auto-mount for Bitcoin Knots.
#
# Usage:
#   sudo ./prepare-drive.sh /dev/sdX
# ============================================================================

set -euo pipefail

RED='\033[0;31m'
GREEN='\033[0;32m'
GOLD='\033[0;33m'
NC='\033[0m'

if [[ $EUID -ne 0 ]]; then
    echo -e "${RED}This script must be run as root (sudo).${NC}"
    exit 1
fi

if [[ $# -lt 1 ]]; then
    echo "Usage: sudo $0 /dev/sdX"
    echo ""
    echo "Available devices:"
    lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT,MODEL | grep -v loop
    exit 1
fi

DEVICE="$1"
TARGET_USER="${SUDO_USER:-$(logname)}"

if [[ ! -b "${DEVICE}" ]]; then
    echo -e "${RED}Device ${DEVICE} does not exist.${NC}"
    exit 1
fi

# Safety: don't format the system drive
SYSTEM_DEV=$(df / | tail -1 | awk '{print $1}' | sed 's/[0-9]*$//' | sed 's/p[0-9]*$//')
if [[ "${DEVICE}" == "${SYSTEM_DEV}" ]]; then
    echo -e "${RED}Refusing to format the system drive.${NC}"
    exit 1
fi

echo ""
echo -e "${GOLD}Target device: ${DEVICE}${NC}"
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT "${DEVICE}"
echo ""
echo -e "${RED}WARNING: This will ERASE ALL DATA on ${DEVICE}${NC}"
read -rp "Type 'YES' to continue: " answer
if [[ "${answer}" != "YES" ]]; then
    echo "Aborted."
    exit 0
fi

# Unmount
for part in $(lsblk -ln -o NAME "${DEVICE}" | tail -n +2); do
    umount "/dev/${part}" 2>/dev/null || true
done

# Partition
echo -e "${GOLD}Creating GPT partition table...${NC}"
parted -s "${DEVICE}" mklabel gpt
parted -s "${DEVICE}" mkpart primary ext4 0% 100%
sleep 1

# Get partition path
PARTITION="/dev/$(lsblk -ln -o NAME "${DEVICE}" | tail -1)"

# Format
echo -e "${GOLD}Formatting ${PARTITION} as ext4...${NC}"
mkfs.ext4 -L bitcoin "${PARTITION}"

# Mount
MOUNT_POINT="/media/${TARGET_USER}/bitcoin"
mkdir -p "${MOUNT_POINT}"
mount "${PARTITION}" "${MOUNT_POINT}"
chown "${TARGET_USER}:${TARGET_USER}" "${MOUNT_POINT}"

# fstab
UUID=$(blkid -s UUID -o value "${PARTITION}")
if ! grep -q "${UUID}" /etc/fstab 2>/dev/null; then
    echo "UUID=${UUID} ${MOUNT_POINT} ext4 defaults,noatime 0 2" >> /etc/fstab
    echo -e "${GREEN}Added to /etc/fstab${NC}"
fi

# Create bitcoin data directory
mkdir -p "${MOUNT_POINT}/.bitcoin"
chown "${TARGET_USER}:${TARGET_USER}" "${MOUNT_POINT}/.bitcoin"

echo ""
echo -e "${GREEN}Drive ready.${NC}"
echo "  Device:     ${PARTITION}"
echo "  Filesystem: ext4"
echo "  Mount:      ${MOUNT_POINT}"
echo "  Data dir:   ${MOUNT_POINT}/.bitcoin"
echo "  UUID:       ${UUID}"
echo ""
echo "Use this in bitcoin.conf:"
echo "  datadir=${MOUNT_POINT}/.bitcoin"
