#!/bin/bash

# ==============================================================================
# ALSA / HDA / DAPM Güç Tasarrufu ve Mute (MM) Durumu Onarım Betiği
# ==============================================================================

if [ "$EUID" -ne 0 ]; then
  echo "[-] Lütfen bu betiği root/sudo yetkisi ile çalıştırın!"
  echo "    Kullanım: sudo bash $0"
  exit 1
fi

echo "[+] Ses kartı güç ve ses kanalı yapılandırması başlatılıyor..."

# 1. HDA Intel Güç Tasarrufunu Kalıcı Olarak Kapat
echo "[1/5] /etc/modprobe.d/ klasörüne HDA power_save=0 kuralı ekleniyor..."
cat << 'EOF' > /etc/modprobe.d/audio_power_save.conf
# Ses kartının uykuya (suspended) geçmesini engeller
options snd_hda_intel power_save=0 power_save_controller=N
options snd_soc_core pmdown_time=-1
EOF

# Anlık olarak çekirdeğe uygula
if [ -f /sys/module/snd_hda_intel/parameters/power_save ]; then
    echo 0 > /sys/module/snd_hda_intel/parameters/power_save
fi

# 2. TLP Yapılandırmasını Güncelle (Eğer TLP yüklüyse)
if [ -f /etc/tlp.conf ]; then
    echo "[2/5] TLP güç yöneticisi algılandı, ses tasarrufu ayarları kapatılıyor..."
    sed -i 's/^SOUND_POWER_SAVE_ON_AC=.*/SOUND_POWER_SAVE_ON_AC=0/' /etc/tlp.conf
    sed -i 's/^SOUND_POWER_SAVE_ON_BAT=.*/SOUND_POWER_SAVE_ON_BAT=0/' /etc/tlp.conf
fi

# 3. Mute (MM) Durumunu Kaldır ve Unmute Et (Ses Seviyesini Değiştirmeden)
echo "[3/5] ALSA ana kanalları Unmute ediliyor (MM -> 00)..."
/usr/bin/amixer -c 0 sset Master unmute >/dev/null 2>&1
/usr/bin/amixer -c 0 sset Speaker unmute >/dev/null 2>&1
/usr/bin/amixer -c 0 sset Headphone unmute >/dev/null 2>&1
# Mute durumunu sistem açılışı için kaydet
alsactl store >/dev/null 2>&1

# 4. Otomatik Sessiz Akış ve Unmute Servisi (Systemd Service)
# Bu servis hem kartı uyanık tutar hem de başlatıldığında Mute kalmamasını sağlar.
echo "[4/5] Kesintisiz ses akışı ve otomatik Unmute servisi oluşturuluyor..."

cat << 'EOF' > /etc/systemd/system/keep-audio-alive.service
[Unit]
Description=Keep ALSA/HDA Audio Alive and Unmuted
After=sound.target

[Service]
Type=simple
ExecStartPre=/usr/bin/amixer -c 0 sset Master unmute
ExecStart=/usr/bin/aplay -DRW -fnull /dev/zero
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

# Servisi etkinleştir ve başlat
systemctl daemon-reload
systemctl enable keep-audio-alive.service --now >/dev/null 2>&1

# 5. Eski Cron Job Temizleme
echo "[5/5] Cron job denetimi yapılıyor..."
CRON_USER=${SUDO_USER:-$USER}
if crontab -u "$CRON_USER" -l 2>/dev/null | grep -q "amixer"; then
    echo "[!] DİKKAT: $CRON_USER kullanıcısına ait crontab içinde 'amixer' komutu bulundu."
    read -p "    Sesi %100 yapan eski cron job silinsin mi? (e/h): " choice
    if [[ "$choice" =~ ^[Ee]$ ]]; then
        crontab -u "$CRON_USER" -l | grep -v "amixer" | crontab -u "$CRON_USER" -
        echo "[+] amixer içeren cron job başarıyla temizlendi."
    else
        echo "[!] Cron job bırakıldı."
    fi
fi

echo "----------------------------------------------------"
echo "[OK] Tüm işlemler tamamlandı!"
echo "[i] Ses kartı artık kapanmayacak ve Mute (MM) moduna düşmeyecektir."


