{ pkgs
, mpv
, pamixer
, lib
}:

let
  mpvExe = lib.getExe mpv;
  pamixerExe = lib.getExe pamixer;
in
pkgs.writers.writeRustBin "pipewire-controller" { } ''
  use std::{process::Command, str};

  const MUTE_AUDIO: &str = "${./audio/discord-mute.mp3}";
  const UNMUTE_AUDIO: &str = "${./audio/discord-unmute.mp3}";

  fn main() {
      let mute_status = Command::new("${pamixerExe}")
          .args(["--default-source", "--get-mute"])
          .output()
          .expect("Unable to get mute status from pamixer")
          .stdout;

      let mute_status = str::from_utf8(&mute_status[..]).expect("pamixer output wasn't a string").trim();

      if mute_status == "false" {
          Command::new("${pamixerExe}")
              .args(["--default-source", "--mute"])
              .output()
              .expect("Unable to mute via pamixer");

          Command::new("${mpvExe}")
              .args(["--no-video", "--volume=80", MUTE_AUDIO])
              .output()
              .expect("Unable to play audio via mpv");
      } else {
          Command::new("${pamixerExe}")
              .args(["--default-source", "--unmute"])
              .output()
              .expect("Unable to unmute via pamixer");

          Command::new("${mpvExe}")
              .args(["--no-video", "--volume=80", UNMUTE_AUDIO])
              .output()
              .expect("Unable to play audio via mpv");
      }

      let xrootdatetime_pid_raw =
          Command::new("systemctl")
              .args([
                "--user",
                "show",
                "--property", "MainPID",
                "--value", "xrootdatetime"
              ])
              .output();

      if let Ok(xrootdatetime_pid_raw) = xrootdatetime_pid_raw {
          if let Ok(xrootdatetime_pid) = str::from_utf8(&xrootdatetime_pid_raw.stdout[..]) {
              let _ = Command::new("kill")
                .args([
                  "-s",
                  "SIGUSR1",
                  xrootdatetime_pid
                ])
                .spawn();
          }
      }
  }
''