#!/usr/bin/env bash
set -euo pipefail

LOCK_FILES=(
    /var/lib/dpkg/lock
    /var/lib/dpkg/lock-frontend
    /var/lib/apt/lists/lock
    /var/cache/apt/archives/lock
)

killed=0

for lock in "${LOCK_FILES[@]}"; do
    if [ ! -f "$lock" ]; then
        continue
    fi

    pid=$(sudo fuser "$lock" 2>/dev/null || true)
    if [ -z "$pid" ]; then
        continue
    fi

    pid=$(echo "$pid" | tr -s ' ' '\n' | grep -v '^$' | head -1)
    name=$(ps -p "$pid" -o comm= 2>/dev/null || echo "unknown")

    echo "Killing PID $pid ($name) holding $lock"
    sudo kill -9 "$pid" 2>/dev/null || true
    killed=$((killed + 1))
done

if [ $killed -eq 0 ]; then
    echo "No apt locks held by any process."
else
    # Wait briefly and clean up any stale lock files
    sleep 1
    for lock in "${LOCK_FILES[@]}"; do
        if [ -f "$lock" ] && ! sudo fuser "$lock" &>/dev/null 2>&1; then
            sudo rm -f "$lock"
        fi
    done
    echo "Done. $killed lock(s) cleared."
fi
