{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://github.com/api-evangelist/akka/json-schema/akka-config.json",
  "title": "Akka Configuration",
  "description": "JSON Schema representing the Akka framework HOCON configuration structure covering actor system, dispatchers, remoting, cluster, persistence, and HTTP settings.",
  "type": "object",
  "properties": {
    "akka": {
      "type": "object",
      "properties": {
        "loglevel": {
          "type": "string",
          "description": "Log level for the actor system.",
          "enum": ["OFF", "ERROR", "WARNING", "INFO", "DEBUG"],
          "default": "INFO"
        },
        "stdout-loglevel": {
          "type": "string",
          "description": "Log level during startup before logging is configured.",
          "default": "WARNING"
        },
        "actor": {
          "type": "object",
          "description": "Actor system configuration.",
          "properties": {
            "provider": {
              "type": "string",
              "description": "Actor provider (local, cluster, or remote).",
              "enum": ["local", "remote", "cluster"],
              "default": "local"
            },
            "default-dispatcher": {
              "type": "object",
              "description": "Default dispatcher configuration.",
              "properties": {
                "type": {
                  "type": "string",
                  "description": "Dispatcher type.",
                  "default": "Dispatcher"
                },
                "executor": {
                  "type": "string",
                  "description": "Executor to use (fork-join-executor or thread-pool-executor).",
                  "default": "fork-join-executor"
                },
                "fork-join-executor": {
                  "type": "object",
                  "properties": {
                    "parallelism-min": {
                      "type": "integer",
                      "default": 8
                    },
                    "parallelism-factor": {
                      "type": "number",
                      "default": 1.0
                    },
                    "parallelism-max": {
                      "type": "integer",
                      "default": 64
                    }
                  },
                  "additionalProperties": true
                },
                "thread-pool-executor": {
                  "type": "object",
                  "properties": {
                    "core-pool-size-min": {
                      "type": "integer",
                      "default": 8
                    },
                    "core-pool-size-factor": {
                      "type": "number",
                      "default": 3.0
                    },
                    "core-pool-size-max": {
                      "type": "integer",
                      "default": 64
                    }
                  },
                  "additionalProperties": true
                },
                "throughput": {
                  "type": "integer",
                  "description": "Messages to process before rescheduling.",
                  "default": 5
                }
              },
              "additionalProperties": true
            },
            "serializers": {
              "type": "object",
              "description": "Named serializer bindings.",
              "additionalProperties": {
                "type": "string"
              }
            },
            "serialization-bindings": {
              "type": "object",
              "description": "Class to serializer mappings.",
              "additionalProperties": {
                "type": "string"
              }
            },
            "allow-java-serialization": {
              "type": "boolean",
              "description": "Allow Java serialization (discouraged in production).",
              "default": false
            }
          },
          "additionalProperties": true
        },
        "remote": {
          "type": "object",
          "description": "Akka Remoting configuration.",
          "properties": {
            "artery": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": true
                },
                "transport": {
                  "type": "string",
                  "description": "Transport protocol.",
                  "enum": ["aeron-udp", "tcp", "tls-tcp"],
                  "default": "aeron-udp"
                },
                "canonical": {
                  "type": "object",
                  "properties": {
                    "hostname": {
                      "type": "string"
                    },
                    "port": {
                      "type": "integer",
                      "default": 25520
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "cluster": {
          "type": "object",
          "description": "Akka Cluster configuration.",
          "properties": {
            "seed-nodes": {
              "type": "array",
              "description": "List of seed node addresses.",
              "items": {
                "type": "string"
              }
            },
            "downing-provider-class": {
              "type": "string",
              "description": "Split brain resolver provider class."
            },
            "min-nr-of-members": {
              "type": "integer",
              "description": "Minimum number of members before cluster is up.",
              "default": 1
            },
            "roles": {
              "type": "array",
              "description": "Roles for this cluster node.",
              "items": {
                "type": "string"
              }
            },
            "sharding": {
              "type": "object",
              "description": "Cluster Sharding configuration.",
              "properties": {
                "number-of-shards": {
                  "type": "integer",
                  "default": 100
                },
                "state-store-mode": {
                  "type": "string",
                  "enum": ["ddata", "persistence"],
                  "default": "ddata"
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "persistence": {
          "type": "object",
          "description": "Akka Persistence configuration.",
          "properties": {
            "journal": {
              "type": "object",
              "properties": {
                "plugin": {
                  "type": "string",
                  "description": "Journal plugin class."
                }
              },
              "additionalProperties": true
            },
            "snapshot-store": {
              "type": "object",
              "properties": {
                "plugin": {
                  "type": "string",
                  "description": "Snapshot store plugin class."
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "http": {
          "type": "object",
          "description": "Akka HTTP configuration.",
          "properties": {
            "server": {
              "type": "object",
              "properties": {
                "idle-timeout": {
                  "type": "string",
                  "default": "60s"
                },
                "request-timeout": {
                  "type": "string",
                  "default": "20s"
                },
                "max-connections": {
                  "type": "integer",
                  "default": 1024
                },
                "preview": {
                  "type": "object",
                  "properties": {
                    "enable-http2": {
                      "type": "boolean",
                      "default": false
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            },
            "client": {
              "type": "object",
              "properties": {
                "idle-timeout": {
                  "type": "string",
                  "default": "60s"
                },
                "connecting-timeout": {
                  "type": "string",
                  "default": "10s"
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        },
        "management": {
          "type": "object",
          "description": "Akka Management HTTP endpoint configuration.",
          "properties": {
            "http": {
              "type": "object",
              "properties": {
                "hostname": {
                  "type": "string",
                  "default": "0.0.0.0"
                },
                "port": {
                  "type": "integer",
                  "default": 8558
                },
                "base-path": {
                  "type": "string",
                  "description": "Base path prefix for management routes."
                }
              },
              "additionalProperties": true
            },
            "cluster": {
              "type": "object",
              "properties": {
                "bootstrap": {
                  "type": "object",
                  "properties": {
                    "contact-point-discovery": {
                      "type": "object",
                      "properties": {
                        "discovery-method": {
                          "type": "string",
                          "description": "Service discovery method (e.g., kubernetes-api, akka-dns)."
                        },
                        "service-name": {
                          "type": "string"
                        },
                        "required-contact-point-nr": {
                          "type": "integer",
                          "default": 2
                        }
                      },
                      "additionalProperties": true
                    }
                  },
                  "additionalProperties": true
                }
              },
              "additionalProperties": true
            }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    }
  },
  "additionalProperties": true
}
