{ config, lib, pkgs, ... }:

with lib;

{
  config = {
    programs.firefox = {
      enable = true;
      profiles.basic.isDefault = true;

      profiles.test = {
        id = 1;
        settings = { "general.smoothScroll" = false; };
      };

      profiles.bookmarks = {
        id = 2;
        settings = { "general.smoothScroll" = false; };
        bookmarks = {
          wikipedia = {
            keyword = "wiki";
            url =
              "https://en.wikipedia.org/wiki/Special:Search?search=%s&go=Go";
          };
          "kernel.org" = { url = "https://www.kernel.org"; };
        };
      };
    };

    nixpkgs.overlays = [
      (self: super: {
        firefox-unwrapped = pkgs.runCommand "firefox-0" {
          meta.description = "I pretend to be Firefox";
          preferLocalBuild = true;
          passthru.gtk3 = null;
        } ''
          mkdir -p "$out/bin"
          touch "$out/bin/firefox"
          chmod 755 "$out/bin/firefox"
        '';
      })
    ];

    nmt.script = ''
      assertFileRegex \
        home-path/bin/firefox \
        MOZ_APP_LAUNCHER

      assertDirectoryExists home-files/.mozilla/firefox/basic

      assertFileContent \
        home-files/.mozilla/firefox/test/user.js \
        ${./profile-settings-expected-user.js}

      bookmarksUserJs=$(normalizeStorePaths \
        home-files/.mozilla/firefox/bookmarks/user.js)

      assertFileContent \
        $bookmarksUserJs \
        ${./profile-settings-expected-bookmarks-user.js}

      bookmarksFile="$(sed -n \
        '/browser.bookmarks.file/ {s|^.*\(/nix/store[^"]*\).*|\1|;p}' \
        $TESTED/home-files/.mozilla/firefox/bookmarks/user.js)"

      assertFileContent \
        $bookmarksFile \
        ${./profile-settings-expected-bookmarks.html}
    '';
  };
}