{ config, lib, ... }:

let
  cfg = config.services.ollama;
  domain = config.networking.domain;
  subdomain = cfg.reverseProxy.subdomain;
  fqdn = if (cfg.reverseProxy.enable && subdomain != "") then "${subdomain}.${domain}" else domain;

  inherit (lib)
    mkDefault
    mkForce
    mkIf
    ;

  inherit (lib.utils)
    mkReverseProxyOption
    mkVirtualHost
    ;
in
{
  options.services.ollama = {
    reverseProxy = mkReverseProxyOption "Ollama" "ollama";
  };

  config = mkIf cfg.enable {
    services.ollama = {
      host = mkDefault (if cfg.reverseProxy.enable then "127.0.0.1" else "0.0.0.0");
      user = mkDefault "ollama";
      group = mkDefault "ollama";
    };

    services.nginx.virtualHosts = mkIf cfg.reverseProxy.enable {
      "${fqdn}" = mkVirtualHost {
        port = cfg.port;
        ssl = cfg.reverseProxy.forceSSL;
        recommendedProxySettings = mkForce false;
        extraConfig = ''
          proxy_set_header Host ${cfg.host}:${toString cfg.port};
        '';
      };
    };

    systemd.tmpfiles.rules = [
      "d ${cfg.home} 0755 ${cfg.user} ${cfg.group} -"
    ];
  };
}
