{
  "openapi": "3.0.0",
  "info": {
    "title": "Container Management API",
    "version": "0.0.5",
    "description": "API for managing containers and system resources."
  },
  "servers": [
    { "url": "http://localhost:8888" }
  ],
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-API-Key"
      }
    },
    "schemas": {
      "ContainerModel": {
        "type": "object",
        "properties": {
          "UUID": { "type": "string" },
          "email": { "type": "string" },
          "expires": { "type": "string", "format": "date" },
          "tags": { "type": "string" },
          "env": { "type": "string" },
          "affiliate": { "type": "string" },
          "image": { "type": "string" },
          "history": { "type": "string" },
          "comment": { "type": "string" },
          "domains": { "type": "string" },
          "status": { "type": "string" },
          "created": { "type": "string", "format": "date" },
          "bump": { "type": "string", "format": "date" }
        },
        "required": ["UUID", "email", "expires", "status", "created"]
      },
      "ContainerIDRequest": {
        "type": "object",
        "properties": {
          "container_id": { "type": "string" }
        },
        "required": ["container_id"]
      },
      "InfoContainerRequest": {
        "type": "object",
        "properties": {
          "container_id": { "type": "string" }
        }
      }
    }
  },
  "security": [{ "ApiKeyAuth": [] }],
  "paths": {
    "/": {
      "get": {
        "summary": "Root redirect",
        "responses": {
          "302": { "description": "Redirect to ODOO4PROJECTS.com" }
        }
      }
    },
    "/container/update": {
      "post": {
        "summary": "Create or update container",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/ContainerModel" }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Container updated or created",
            "content": { "application/json": { "example": { "message": "Container updated or created" } } }
          }
        }
      }
    },
    "/container/start": {
      "post": {
        "summary": "Start a container",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContainerIDRequest" } } }
        },
        "responses": { "200": { "description": "Container started" } }
      }
    },
    "/container/stop": {
      "post": {
        "summary": "Stop a container",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContainerIDRequest" } } }
        },
        "responses": { "200": { "description": "Container stopped" } }
      }
    },
    "/container/nuke": {
      "post": {
        "summary": "Nuke a container",
        "description": "Permanently deletes container if its status is 'nuke'.",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContainerIDRequest" } } }
        },
        "responses": {
          "200": { "description": "Container nuked" },
          "400": { "description": "Container status is not 'nuke'" }
        }
      }
    },
    "/container/info": {
      "post": {
        "summary": "Get container info",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InfoContainerRequest" } } }
        },
        "responses": { "200": { "description": "Container info list" } }
      }
    },
    "/container/bump": {
      "post": {
        "summary": "Bump a container",
        "description": "Updates bump date and runs bump script.",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContainerIDRequest" } } }
        },
        "responses": {
          "200": { "description": "Bump successful", "content": { "application/json": {} } }
        }
      }
    },
    "/container/quota": {
      "post": {
        "summary": "Get container quota",
        "security": [{ "ApiKeyAuth": [] }],
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContainerIDRequest" } } }
        },
        "responses": {
          "200": {
            "description": "Quota usage",
            "content": {
              "application/json": {
                "example": {
                  "memory_usage": "50MiB / 2GiB",
                  "disk_io": "10MB / 200MB"
                }
              }
            }
          }
        }
      }
    },
    "/system/containers": {
      "get": {
        "summary": "List running containers",
        "security": [{ "ApiKeyAuth": [] }],
        "responses": {
          "200": {
            "description": "Containers in system",
            "content": { "application/json": {} }
          }
        }
      }
    },
    "/system/images": {
      "get": {
        "summary": "List system images",
        "security": [{ "ApiKeyAuth": [] }],
        "responses": {
          "200": {
            "description": "List of docker images",
            "content": {
              "application/json": {
                "example": {
                  "images": ["repo1:tag", "repo2:tag"]
                }
              }
            }
          }
        }
      }
    },
    "/system/info": {
      "get": {
        "summary": "Get system info",
        "security": [{ "ApiKeyAuth": [] }],
        "responses": {
          "200": {
            "description": "System resource info",
            "content": {
              "application/json": {
                "example": {
                  "alpine_version": "3.18.2",
                  "last_update": "2025-08-01",
                  "latest_bump": "2025-08-10",
                  "version": "API: 0.0.5",
                  "resources": {
                    "memory": { "total": 16777216, "available": 8388608, "used": 8388608 },
                    "disk": { "total": 100000000, "used": 50000000, "free": 50000000 },
                    "cpu_count": 8
                  }
                }
              }
            }
          }
        }
      }
    },
    "/system/pull": {
      "post": {
        "summary": "Pull all images",
        "security": [{ "ApiKeyAuth": [] }],
        "responses": {
          "200": {
            "description": "All images pulled",
            "content": { "application/json": { "example": { "message": "All images pulled" } } }
          }
        }
      }
    }
  }
}

