{ lib, config, ... }:
let
  cfg = config.presets.languages.angular;
in
{
  options.presets.languages.angular = {
    enable = lib.mkEnableOption "Angular";
  };

  config = lib.mkIf cfg.enable {
    plugins = {
      lsp.enabledServers = [
        {
          name = "angularls";
          extraOptions = {
            cmd = [
              "ngserver"
              "--stdio"
              "--tsProbeLocations"
              ""
              "--ngProbeLocations"
              ""
            ];
            on_new_config.__raw = # lua
              ''
                function(new_config, new_root_dir)
                  new_config.cmd = {
                    new_root_dir .. "/node_modules/@angular/language-server/bin/ngserver",
                    "--stdio",
                    "--tsProbeLocations",
                    new_root_dir .. "/node_modules",
                    "--ngProbeLocations",
                    new_root_dir .. "/node_modules",
                  }
                end
              '';
            filetypes = [
              "typescript"
              "html"
              "typescriptreact"
              "typescript.tsx"
              "angular"
              "html.angular"
            ];
            on_attach.__raw = # lua
              ''
                function(client, bufnr)
                  if vim.bo[bufnr].filetype == "html" then
                    vim.bo[bufnr].filetype = "angular"
                  end
                end
              '';
          };
        }
      ];
    };
  };
}
