{ lib, pkgs, ... }:

let
  domain = "music.giugl.io";
  network = import ./network.nix;
  library_path = "/media/Music";
  beets_config = "/media/beets.conf";
in {
  services = {
    navidrome = {
      enable = true;

      settings = {
        MusicFolder = library_path;
        LastFM.enable = true;
        LastFM.ApiKey = "5cef5cb5f9d31326b97d0f929ca9cf20";
        LastFM.Secret = "d1296896126f4caae47407aecf080b25";
        Spotify.ID = "3900c029b4f34f3fb61d554dda64794d";
        Spotify.Secret = "d931ce5575a9401aa5ff8d37558cca0a";
        EnableGravatar = true;
        LogLevel = "WARN";
      };
    };

    nginx.virtualHosts.${domain} = {
      forceSSL = true;
      enableACME = true;
      locations."/" = {
        proxyPass = "http://localhost:4533";
        #        extraConfig = ''
        #          allow 10.0.0.0/24;
        #          ${lib.concatMapStrings (x: "allow ${x};") network.gdevices-wg}
        #          deny all;
        #        '';
      };
    };
  };

  systemd.services = {
    "beets-update" = {
      enable = true;
      #      requires = [ "remove-badmp3.service" "remove-badflac.service" ];
      before = [ "beets-import.service" ];
      serviceConfig = {
        Type = "oneshot";
        ExecStart = "${pkgs.beets}/bin/beet -c ${beets_config} update";
      };
    };

    "beets-import" = {
      enable = true;
      path = [ pkgs.imagemagick ];
      requires = [ "beets-update.service" ];
      after = [ "beets-update.service" ];
      serviceConfig = {
        Type = "oneshot";
        ExecStart =
          "${pkgs.beets}/bin/beet -c ${beets_config} import --flat -q ${library_path}";
      };
      startAt = "daily";
    };

    "remove-badmp3" = {
      enable = true;
      before = [ "beets-import.service" "beets-update.service" ];
      serviceConfig = {
        Type = "oneshot";
        ExecStart = ''
          ${pkgs.findutils}/bin/find ${library_path} -name "*.mp3" -type f -exec ${pkgs.bash}/bin/sh -c '${pkgs.mp3val}/bin/mp3val "{}" | grep -Pi error 1>/dev/null && ${pkgs.busybox}/bin/rm "{}"' \;
        '';
      };
    };

    "remove-badflac" = {
      enable = true;
      before = [ "beets-import.service" "beets-update.service" ];
      serviceConfig = {
        Type = "oneshot";
        ExecStart = ''
          ${pkgs.findutils}/bin/find ${library_path} -name "*.flac" -type f -exec ${pkgs.bash}/bin/sh -c '${pkgs.flac}/bin/flac -st "{}" || ${pkgs.busybox}/bin/rm "{}"' \;
        '';
      };
    };
  };

  networking.extraHosts = ''
    ${network.architect-lan} ${domain}
    ${network.architect-wg} ${domain}
  '';

  users.groups.media.members = [ "navidrome" ];
}