{
  "openapi": "3.0.0",
  "info": {
    "title": "REST4i - File Operations Services",
    "description": "Enhanced file operations services supporting both IFS and SMB file operations with improved error handling and response formatting.",
    "version": "1.0.7-rest4i",
    "contact": {
      "name": "API Support",
      "url": "https://github.com/rest4i"
    },
    "license": {
      "name": "Apache 2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0.html"
    }
  },
  "servers": [
    {
      "url": "/rest4i/api"
    }
  ],
  "tags": [
    {
      "name": "File Operations Services",
      "description": "Enhanced file operations services supporting both IFS and SMB file operations."
    }
  ],
  "paths": {
    "/v1/files/list": {
      "get": {
        "tags": ["File Operations Services"],
        "summary": "List directory contents",
        "description": "List files and directories at specified path using SMB/CIFS or IFS",
        "operationId": "listFiles",
        "parameters": [
          {
            "name": "path",
            "in": "query",
            "required": true,
            "description": "Directory path to list",
            "schema": {
              "type": "string"
            },
            "example": "/home/user/documents"
          }
        ],
        "responses": {
          "200": {
            "description": "Directory listing successful",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "data": {
                    "path": "/home/user/documents",
                    "files": [
                      {
                        "name": "report.pdf",
                        "size": 102400,
                        "isDirectory": false
                      },
                      {
                        "name": "archive",
                        "size": 0,
                        "isDirectory": true
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/download": {
      "get": {
        "tags": ["File Operations Services"],
        "summary": "Download a file",
        "description": "Downloads a file from the specified SMB path.",
        "operationId": "downloadFile",
        "parameters": [
          {
            "name": "path",
            "in": "query",
            "required": true,
            "description": "The SMB path to the file",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "SMB domain",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "username",
            "in": "query",
            "description": "SMB username",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "password",
            "in": "query",
            "description": "SMB password",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "File downloaded successfully",
            "content": {
              "application/octet-stream": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - path parameter required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "File not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/upload": {
      "post": {
        "tags": ["File Operations Services"],
        "summary": "Upload a file",
        "description": "Uploads a file to the specified SMB path.",
        "operationId": "uploadFile",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UploadRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "File uploaded successfully",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "message": "File uploaded successfully",
                  "folder": "/upload/path",
                  "filename": "document.pdf"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - missing required parameters",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/zip": {
      "get": {
        "tags": ["File Operations Services"],
        "summary": "Zip directory contents",
        "description": "Creates a ZIP archive of all files in the specified directory.",
        "operationId": "zipDirectory",
        "parameters": [
          {
            "name": "path",
            "in": "query",
            "required": true,
            "description": "The SMB path to the directory",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "SMB domain",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "username",
            "in": "query",
            "description": "SMB username",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "password",
            "in": "query",
            "description": "SMB password",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Directory zipped successfully",
            "content": {
              "application/zip": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "400": {
            "description": "Bad request - path parameter required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "404": {
            "description": "Directory not found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/v1/files/exists": {
      "get": {
        "tags": ["File Operations Services"],
        "summary": "Check if file or directory exists",
        "description": "Checks whether a file or directory exists at the specified SMB path.",
        "operationId": "checkExists",
        "parameters": [
          {
            "name": "path",
            "in": "query",
            "required": true,
            "description": "The SMB path to check",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "domain",
            "in": "query",
            "description": "SMB domain",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "username",
            "in": "query",
            "description": "SMB username",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "password",
            "in": "query",
            "description": "SMB password",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Existence check completed",
            "content": {
              "application/json": {
                "example": {
                  "success": true,
                  "path": "/path/to/check",
                  "exists": true
                }
              }
            }
          },
          "400": {
            "description": "Bad request - path parameter required",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "UploadRequest": {
        "type": "object",
        "properties": {
          "folder": {
            "type": "string",
            "description": "The target folder path for upload"
          },
          "filename": {
            "type": "string",
            "description": "The name of the file to upload"
          },
          "domain": {
            "type": "string",
            "description": "SMB domain"
          },
          "username": {
            "type": "string",
            "description": "SMB username"
          },
          "password": {
            "type": "string",
            "description": "SMB password"
          },
          "fileContent": {
            "type": "string",
            "format": "byte",
            "description": "Base64 encoded file content"
          }
        },
        "required": ["folder", "filename", "fileContent"]
      },
      "Problem": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "code": {
            "type": "integer",
            "format": "int32"
          },
          "details": {
            "type": "object"
          }
        }
      }
    },
    "securitySchemes": {
      "bearerHttpAuthentication": {
        "type": "http",
        "description": "Bearer token authentication.",
        "scheme": "bearer",
        "bearerFormat": "Bearer [token]"
      },
      "basicHttpAuthentication": {
        "type": "http",
        "description": "Basic authentication.",
        "scheme": "basic"
      }
    }
  }
}
