{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Module Configuration",
  "description": "Configuration schema for Stago modules",
  "type": "object",
  "$defs": {
    "menuItem": {
      "type": "object",
      "required": ["key", "title"],
      "additionalProperties": false,
      "properties": {
        "key": {
          "type": "string",
          "description": "Unique identifier for the menu item",
          "minLength": 1,
          "maxLength": 50
        },
        "title": {
          "type": "string",
          "description": "Display title for the menu item",
          "minLength": 1,
          "maxLength": 50
        },
        "icon": {
          "type": "string",
          "description": "Icon name (Ant Design icon)",
          "maxLength": 50
        },
        "path": {
          "type": "string",
          "description": "Module internal route path (optional on leaf; Host can derive from key)",
          "maxLength": 100
        },
        "children": {
          "type": "array",
          "description": "Nested sub-menu items (arbitrary depth)",
          "items": { "$ref": "#/$defs/menuItem" }
        }
      }
    }
  },
  "required": ["name", "version", "menu", "federation"],
  "additionalProperties": false,
  "properties": {
    "name": {
      "type": "string",
      "description": "Module name in @scope/name format",
      "pattern": "^@[a-z0-9-]+/[a-z0-9-]+$",
      "minLength": 3,
      "maxLength": 100,
      "examples": ["@demo/sales-dashboard", "@company/employee-manage"]
    },
    "version": {
      "type": "string",
      "description": "Semantic version (semver)",
      "pattern": "^\\d+\\.\\d+\\.\\d+(-[a-z0-9]+(\\.[a-z0-9]+)*)?(\\+[a-z0-9]+(\\.[a-z0-9]+)*)?$",
      "examples": ["1.0.0", "2.1.0-beta.1", "1.0.0+build.123"]
    },
    "description": {
      "type": "string",
      "description": "Module description",
      "maxLength": 500,
      "default": ""
    },
    "author": {
      "type": "string",
      "description": "Module author",
      "maxLength": 100,
      "default": ""
    },
    "menu": {
      "type": "object",
      "description": "Menu configuration for navigation",
      "required": ["title"],
      "additionalProperties": false,
      "properties": {
        "title": {
          "type": "string",
          "description": "Menu display title",
          "minLength": 1,
          "maxLength": 50
        },
        "icon": {
          "type": "string",
          "description": "Icon name (Ant Design icon)",
          "maxLength": 50,
          "default": "AppstoreOutlined"
        },
        "level": {
          "type": "integer",
          "description": "Host sidebar: 1=top-level module, 2=module under parent group (distinct from in-module pages in menu.children)",
          "minimum": 1,
          "maximum": 3,
          "default": 1
        },
        "parent": {
          "type": "string",
          "description": "When level is 2: parent group label shown in host sidebar",
          "maxLength": 100,
          "default": ""
        },
        "order": {
          "type": "integer",
          "description": "Sort order within same level",
          "minimum": 0,
          "default": 0
        },
        "children": {
          "type": "array",
          "description": "In-module pages for host sidebar (paths must match React Router); supports nested children",
          "items": { "$ref": "#/$defs/menuItem" }
        }
      }
    },
    "federation": {
      "type": "object",
      "description": "Module Federation configuration",
      "required": ["exposes"],
      "additionalProperties": false,
      "properties": {
        "exposes": {
          "type": "array",
          "description": "Exposed Module Federation modules",
          "minItems": 1,
          "items": {
            "type": "string",
            "pattern": "^\\.\\/[A-Za-z][A-Za-z0-9]*$"
          },
          "examples": ["./Page", "./Component"]
        },
        "remotes": {
          "type": "object",
          "description": "Remote dependencies from public libs",
          "additionalProperties": {
            "type": "object",
            "required": ["requiredVersion"],
            "properties": {
              "requiredVersion": {
                "type": "string",
                "description": "Required version range",
                "pattern": "^(\\^|~|>=|>|<=|<)?\\d+\\.\\d+\\.\\d+"
              }
            }
          },
          "default": {}
        },
        "shared": {
          "type": "object",
          "description": "Shared dependencies configuration",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "singleton": {
                "type": "boolean",
                "default": true
              },
              "requiredVersion": {
                "type": "string",
                "description": "Required version for shared dependency"
              },
              "eager": {
                "type": "boolean",
                "default": false
              }
            }
          },
          "default": {}
        }
      }
    },
    "api": {
      "type": "object",
      "description": "API routes configuration",
      "additionalProperties": false,
      "properties": {
        "routes": {
          "type": "object",
          "description": "API route definitions",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "methods": {
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": ["GET", "POST", "PUT", "DELETE", "PATCH"]
                },
                "minItems": 1
              },
              "handler": {
                "type": "string",
                "description": "Handler file path relative to module root"
              }
            },
            "required": ["methods"]
          }
        },
        "prefix": {
          "type": "string",
          "description": "API route prefix",
          "pattern": "^/[a-z0-9-]*$",
          "default": ""
        }
      }
    },
    "dataBinding": {
      "type": "object",
      "description": "Data binding configuration",
      "additionalProperties": false,
      "properties": {
        "table": {
          "type": "string",
          "description": "Database table name",
          "pattern": "^[a-z_][a-z0-9_]*$",
          "maxLength": 50
        },
        "schema": {
          "type": "object",
          "description": "Table schema definition",
          "additionalProperties": {
            "type": "object",
            "required": ["type"],
            "properties": {
              "type": {
                "type": "string",
                "enum": ["string", "number", "boolean", "date", "json"]
              },
              "required": {
                "type": "boolean",
                "default": false
              },
              "unique": {
                "type": "boolean",
                "default": false
              },
              "label": {
                "type": "string",
                "maxLength": 50
              }
            }
          }
        },
        "permissions": {
          "type": "array",
          "description": "数据权限级别",
          "items": {
            "type": "string",
            "enum": ["read", "write", "admin"]
          },
          "default": ["read"]
        }
      }
    }
  }
}
