#Bash command for installing all relevant audio drivers for IQAudio DAC Pro HAT
#sudo curl -sL https://bit.ly/RPiConfig-DACProHAT | bash

#!/bin/bash

set -e

############################################################
#  UNIVERSAL SECURE IQAUDIO DAC INSTALLER (ALL RPI)
#  - Auto-detects DAC
#  - No root SSH
#  - No passwordless sudo
#  - Works on Pi 2/3/4/5
#  - Works on Legacy / Bullseye / Bookworm
############################################################

if [ "$EUID" -ne 0 ]; then
  echo "Please run with: sudo bash script.sh"
  exit 1
fi

echo "================================================="
echo "Secure Raspberry Pi IQAudio Setup"
echo "================================================="

############################################################
# 1. Update system
############################################################
echo "Updating system..."
apt update
apt upgrade -y

############################################################
# 2. Install required packages
############################################################
echo "Installing required packages..."
apt install -y \
  alsa-utils \
  raspi-config \
  i2c-tools \
  curl \
  wget

############################################################
# 3. Expand filesystem (safe on all versions)
############################################################
echo "Expanding filesystem (if needed)..."
raspi-config --expand-rootfs || true

############################################################
# 4. Detect correct boot config location
############################################################
if [ -f /boot/firmware/config.txt ]; then
    BOOT_CONFIG="/boot/firmware/config.txt"
elif [ -f /boot/config.txt ]; then
    BOOT_CONFIG="/boot/config.txt"
else
    echo "ERROR: Cannot find boot config file."
    exit 1
fi

echo "Boot config detected at: $BOOT_CONFIG"

############################################################
# 5. Enable I2S safely
############################################################
sed -i '/^#*dtparam=i2s=on/ s/^#*//' "$BOOT_CONFIG"
grep -q "^dtparam=i2s=on" "$BOOT_CONFIG" || echo "dtparam=i2s=on" >> "$BOOT_CONFIG"

############################################################
# 6. Disable onboard analog audio
############################################################
sed -i '/^dtparam=audio=on/ s/^/#/' "$BOOT_CONFIG"

############################################################
# 7. Remove previous audio overlays (prevent duplicates)
############################################################
sed -i '/dtoverlay=iqaudio/d' "$BOOT_CONFIG"

############################################################
# 8. Auto-detect IQAudio DAC via EEPROM
############################################################
echo "Detecting IQAudio DAC..."

HAT_EEPROM="/proc/device-tree/hat/product"
DAC_FOUND=0

if [ -f "$HAT_EEPROM" ]; then
    PRODUCT=$(tr -d '\0' < "$HAT_EEPROM")
    echo "Detected HAT: $PRODUCT"

    if echo "$PRODUCT" | grep -qi "IQaudIO"; then
        DAC_FOUND=1
    fi
fi

############################################################
# 9. Apply correct overlay
############################################################
if [ "$DAC_FOUND" -eq 1 ]; then
    echo "Applying IQAudio DAC+ overlay..."
else
    echo "No EEPROM match found."
    echo "Applying IQAudio DAC+ overlay (standard fallback)..."
fi

echo "dtoverlay=iqaudio-dacplus" >> "$BOOT_CONFIG"

############################################################
# 10. Disable HDMI audio if vc4 driver active
############################################################
if grep -q "^dtoverlay=vc4-kms-v3d" "$BOOT_CONFIG"; then
    sed -i 's/^dtoverlay=vc4-kms-v3d.*/dtoverlay=vc4-kms-v3d,noaudio/' "$BOOT_CONFIG"
fi

############################################################
# 11. Remove conflicting onboard module
############################################################
sed -i '/snd_bcm2835/d' /etc/modules || true

############################################################
# 12. Set system-wide ALSA default (all users)
############################################################
echo "Setting IQAudio as default ALSA device..."

cat > /etc/asound.conf <<EOF
defaults.pcm.card 0
defaults.ctl.card 0
EOF

############################################################
# 13. Verify configuration
############################################################
echo ""
echo "Verifying configuration..."

if grep -q "iqaudio-dacplus" "$BOOT_CONFIG"; then
    echo "✓ Overlay successfully written"
else
    echo "✗ Overlay missing!"
fi

############################################################
# DONE
############################################################
echo ""
echo "================================================="
echo "INSTALL COMPLETE"
echo "================================================="
echo "Reboot required:"
echo "sudo reboot"
echo ""
echo "After reboot test with:"
echo "speaker-test -c2 -twav -l5"
echo "================================================="