{ config, realPkgs, ... }:

let

  inherit (config.programs.borgmatic) backups;

in
{
  programs.borgmatic = {
    enable = true;
    backups = {
      main = {
        location = {
          patterns = [
            "R /home/user"
            "+ home/user/stuff-to-backup"
            "+ home/user/junk/important-file"
            "- home/user/junk"
          ];
          repositories = [ "/mnt/backup-drive" ];
        };
      };
    };
  };

  nmt.script = ''
    config_file=$TESTED/home-files/.config/borgmatic.d/main.yaml
    assertFileExists $config_file

    declare -A expectations

    expectations[patterns[0]]="${builtins.elemAt backups.main.location.patterns 0}"
    expectations[patterns[1]]="${builtins.elemAt backups.main.location.patterns 1}"
    expectations[patterns[2]]="${builtins.elemAt backups.main.location.patterns 2}"
    expectations[patterns[3]]="${builtins.elemAt backups.main.location.patterns 3}"

    yq=${realPkgs.yq-go}/bin/yq

    for filter in "''${!expectations[@]}"; do
      expected_value="''${expectations[$filter]}"
      actual_value="$($yq ".$filter" $config_file)"

      if [[ "$actual_value" != "$expected_value" ]]; then
        fail "Expected '$filter' to be '$expected_value' but was '$actual_value'"
      fi
    done
  '';
}
