{ lib, pkgs, ... }:

let
  # Define the systemd service type
  quadletInternalType = lib.types.submodule {
    options = {
      assertions = lib.mkOption {
        type = with lib.types; listOf unspecified;
        default = [ ];
        internal = true;
        description = "List of Nix type assertions.";
      };

      resourceType = lib.mkOption {
        type = lib.types.str;
        default = "";
        internal = true;
        description = "The type of the podman Quadlet resource.";
      };

      serviceName = lib.mkOption {
        type = lib.types.str;
        internal = true;
        description = "The name of the systemd service.";
      };

      source = lib.mkOption {
        type = lib.types.str;
        internal = true;
        description = "The quadlet source file content.";
      };
    };
  };
in {
  options.services.podman = {
    internal.quadletDefinitions = lib.mkOption {
      type = lib.types.listOf quadletInternalType;
      default = { };
      internal = true;
      description = "List of quadlet source file content and service names.";
    };

    package = lib.mkOption {
      type = lib.types.package;
      default = pkgs.podman;
      defaultText = lib.literalExpression "pkgs.podman";
      description = "The podman package to use.";
    };

    enableTypeChecks = lib.mkEnableOption "type checks for podman quadlets";
  };
}