openapi: 3.0.0
info:
  title: 云计算价格计算器 API
  description: 支持多云平台价格计算的服务。
  version: "1.0.0"
servers:
  - url: /api
    description: Main API server

paths:
  /regions:
    get:
      summary: 获取区域列表
      description: 获取指定平台的可用区域列表。
      parameters:
        - name: platform
          in: query
          description: '云平台。支持的值: "aws", "azure", "aliyun"。'
          required: false
          schema:
            type: string
            default: "aws"
            enum: ["aws", "azure", "aliyun"]
      responses:
        '200':
          description: 成功响应
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    code:
                      type: string
                      example: "us-east-1"
                    name:
                      type: string
                      example: "US East (N. Virginia)"
        '400':
          description: 如果平台不受支持。

  /instance-types:
    get:
      summary: 获取实例类型
      description: 获取指定平台的可用实例类型。
      parameters:
        - name: platform
          in: query
          description: 云平台。
          required: false
          schema:
            type: string
            default: "aws"
      responses:
        '200':
          description: 成功响应，包含实例类型及其信息的字典。
          content:
            application/json:
              schema:
                type: object
        '400':
          description: 如果平台不受支持。

  /search-instances:
    post:
      summary: 搜索实例
      description: 搜索符合指定条件的实例类型。
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstanceSearchRequest'
      responses:
        '200':
          description: 匹配的实例列表，按月度总价排序。
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
        '400':
          description: 如果缺少必需的参数。
        '500':
          description: 内部服务器错误。

  /search-instances-v2:
    post:
      summary: 搜索实例 V2
      description: 使用 MySQL 数据库搜索符合条件的 AWS 实例。
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstanceSearchRequestV2'
      responses:
        '200':
          description: 匹配的实例列表。
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
        '500':
          description: 内部服务器错误。

  /compare-prices:
    post:
      summary: 比较价格
      description: 比较多种实例配置的价格。
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceComparison'
      responses:
        '200':
          description: 包含配置及其计算价格的列表。
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
        '500':
          description: 内部服务器错误。

components:
  schemas:
    InstanceSearchRequest:
      type: object
      properties:
        cpu_cores:
          type: integer
          description: CPU 核心数
        memory_gb:
          type: number
          format: float
          description: 内存 (GB)
        disk_gb:
          type: integer
          description: 磁盘大小 (GB)
        region:
          type: string
          description: 区域
        operating_system:
          type: string
          description: 操作系统
          default: "Linux"
        platform:
          type: string
          description: 云平台
          default: "aws"

    InstanceSearchRequestV2:
      type: object
      properties:
        cpu_cores:
          type: integer
          description: CPU 核心数
        memory_gb:
          type: number
          format: float
          description: 内存 (GB)
        disk_gb:
          type: integer
          description: 磁盘大小 (GB)
        region:
          type: string
          description: 区域
        operating_system:
          type: string
          description: 操作系统
          default: "Linux"

    PriceComparison:
      type: object
      properties:
        configurations:
          type: array
          items:
            $ref: '#/components/schemas/PriceRequest'
          description: 价格请求配置列表

    PriceRequest:
      type: object
      required:
        - instance_type
        - region
        - operating_system
        - purchase_option
      properties:
        instance_type:
          type: string
          description: 实例类型
        region:
          type: string
          description: 区域
        operating_system:
          type: string
          description: 操作系统
        purchase_option:
          type: string
          description: 购买选项
        duration:
          type: integer
          description: 持续时间
          default: 1
        disk_gb:
          type: integer
          description: 磁盘大小 (GB)
          default: 0
