{ hscloud, lib, pkgs, ... }:

# This supports building laserproxy in nix, which is used for deploying it to customs.
# This is mildly hacky and should be reworked to function for any hscloud bazel target
# in a more generic fashion.
#
# To build:
#   ~/hscloud $ nix-build -A hswaw.laserproxy

pkgs.buildBazelPackage rec {
  name = "laserproxy";

  # Cleanup source tree to limit impact of unrelated changes to hscloud source
  # tree on nix build cache. This should only pass over:
  #   //BUILD, //WORKSPACE, //.bazelrc
  #   //hscloud/go/**
  #   //hscloud/third_party/**
  #   //hscloud/devtools/gerrit/**  (WORKSPACE reference)
  #   //hswaw/laserproxy/**         (our build target)
  src = lib.cleanSourceWith {
    filter = name: type: (
      lib.strings.hasInfix "/go" name ||
      lib.strings.hasInfix "/third_party" name ||

      lib.strings.hasSuffix "/devtools" name ||
      lib.strings.hasInfix "/devtools/gerrit" name ||

      lib.strings.hasSuffix "/hswaw" name ||
      lib.strings.hasInfix "/hswaw/site" name ||
      lib.strings.hasInfix "/hswaw/laserproxy" name ||
      lib.strings.hasInfix "/hswaw/site" name ||

      lib.strings.hasSuffix "/BUILD" name ||
      lib.strings.hasSuffix "/WORKSPACE" name ||
      lib.strings.hasSuffix "/.bazelrc" name
    );
    src = hscloud.root;
  };

  bazelTarget = "//hswaw/laserproxy";
  nativeBuildInputs = with pkgs; [
    git python3 postgresql go
  ];
  patches = [
    ./nix-use-system-go.patch
    ./nix-disable-workspace-status.patch
  ];

  removeRulesCC = false;
  fetchConfigured = true;
  fetchAttrs = {
    # Nicked from nixpkgs'  usages of buildBazelPackage in bazel_watcher.
    preInstall = ''
      # Remove the go_sdk (it's just a copy of the go derivation) and all
      # references to it from the marker files. Bazel does not need to download
      # this sdk because we have patched the WORKSPACE file to point to the one
      # currently present in PATH. Without removing the go_sdk from the marker
      # file, the hash of it will change anytime the Go derivation changes and
      # that would lead to impurities in the marker files which would result in
      # a different sha256 for the fetch phase.
      rm -rf $bazelOut/external/{go_sdk,\@go_sdk.marker}
      sed -e '/^FILE:@go_sdk.*/d' -i $bazelOut/external/\@*.marker
      
      # Retains go build input markers
      chmod -R 755 $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_cache,@\bazel_gazelle_go_repository_cache.marker}
      
      # Remove the gazelle tools, they contain go binaries that are built
      # non-deterministically. As long as the gazelle version matches the tools
      # should be equivalent.
      rm -rf $bazelOut/external/{bazel_gazelle_go_repository_tools,\@bazel_gazelle_go_repository_tools.marker}
      sed -e '/^FILE:@bazel_gazelle_go_repository_tools.*/d' -i $bazelOut/external/\@*.marker
    '';
    sha256 = "sha256-WbM9+9Pt//21MCwb/zVro29uKVdNXHnWpuh7kILUbco=";
  };
  buildAttrs = {
    inherit patches;
    installPhase = ''
      install -Dm755 bazel-bin/hswaw/laserproxy/*/laserproxy $out/bin/laserproxy
    '';
  };
}
