# SPDX-FileCopyrightText: 2024 Auxolotl Infrastructure Contributors
# SPDX-FileCopyrightText: 2024 Clicks Codes
#
# SPDX-License-Identifier: GPL-3.0-only

{ lib, inputs }:
let
  inherit (inputs) deploy-rs;
in
{
  ## Create deployment configuration for use with deploy-rs.
  ##
  ## ```nix
  ## mkDeploy {
  ##   inherit self;
  ##   overrides = {
  ##     my-host.system.sudo = "doas -u";
  ##   };
  ## }
  ## ```
  ##
  #@ { self: Flake, overrides: Attrs ? {} } -> Attrs
  deploy = {
    mkDeploy =
      {
        self,
        overrides ? { },
      }:
      let
        hosts = self.nixosConfigurations or { };
        names = builtins.attrNames hosts;
        nodes = lib.foldl (
          result: name:
          let
            host = hosts.${name};
            user = host.config.users.infra or null;
            inherit (host.pkgs) system;
          in
          result
          // {
            ${name} = (overrides.${name} or { }) // {
              hostname = overrides.${name}.hostname or "${name}";
              profiles = (overrides.${name}.profiles or { }) // {
                system =
                  (overrides.${name}.profiles.system or { })
                  // {
                    path = deploy-rs.lib.${system}.activate.nixos host;
                  }
                  // {
                    user = "root";
                  }
                  // lib.optionalAttrs host.config.clicks.security.doas.enable { sudo = "doas -u"; };
              };
            };
          }
        ) { } names;
      in
      {
        inherit nodes;
      };
  };
}
