# TODO: HM config for i2p profile in LibreWolf

{ config, lib, ... }:

let
  cfg = config.services.i2pd;

  inherit (lib)
    mkDefault
    mkIf
    mkOption
    optional
    types
    ;
in
{
  options.services.i2pd = {
    openFirewall = mkOption {
      type = types.bool;
      default = false;
      description = "Whether to open the necessary firewall ports for enabled protoclos of i2pd.";
    };
  };

  config = mkIf cfg.enable {
    services.i2pd = {
      address = mkDefault "127.0.0.1";
      proto = {
        http.enable = mkDefault true;
        socksProxy.enable = mkDefault true;
        httpProxy.enable = mkDefault true;
        sam.enable = mkDefault true;
        i2cp.enable = mkDefault true;
      };
    };

    networking.firewall.allowedTCPPorts = mkIf cfg.openFirewall (
      with cfg.proto;
      optional bob.enable bob.port
      ++ optional http.enable http.port
      ++ optional httpProxy.enable httpProxy.port
      ++ optional i2cp.enable i2cp.port
      ++ optional i2pControl.enable i2pControl.port
      ++ optional sam.enable sam.port
      ++ optional socksProxy.enable socksProxy.port
    );
  };
}
