{
  "openapi": "3.0.3",
  "info": {
    "title": "API de tipo de cambio CRC/USD",
    "description": "Compra y venta del dólar publicadas por el Banco Central de Costa Rica. Contrato v1: {compra, venta, fecha}.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://tipodecambio.paginasweb.cr"
    }
  ],
  "paths": {
    "/api": {
      "get": {
        "summary": "Tipo de cambio actual",
        "description": "Devuelve el último registro disponible (hoy hábil o el anterior si aún no hay dato).",
        "operationId": "getCurrentRate",
        "responses": {
          "200": {
            "description": "Tipo de cambio",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rate"
                },
                "example": {
                  "compra": 504.12,
                  "venta": 510.45,
                  "fecha": "17/08/2026"
                }
              }
            }
          },
          "500": {
            "description": "Sin dato disponible",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": "No se pudo obtener la información del Banco Central de Costa Rica"
                }
              }
            }
          }
        }
      }
    },
    "/api/{dd}/{mm}/{yyyy}": {
      "get": {
        "summary": "Tipo de cambio de una fecha",
        "description": "Si no hay fila ese día, responde el último hábil anterior.",
        "operationId": "getRateByDate",
        "parameters": [
          {
            "name": "dd",
            "in": "path",
            "required": true,
            "schema": { "type": "string", "pattern": "^[0-9]{2}$" },
            "example": "13"
          },
          {
            "name": "mm",
            "in": "path",
            "required": true,
            "schema": { "type": "string", "pattern": "^[0-9]{2}$" },
            "example": "08"
          },
          {
            "name": "yyyy",
            "in": "path",
            "required": true,
            "schema": { "type": "string", "pattern": "^[0-9]{4}$" },
            "example": "2026"
          }
        ],
        "responses": {
          "200": {
            "description": "Tipo de cambio",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rate"
                }
              }
            }
          },
          "400": {
            "description": "Fecha inválida",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": "Fecha inválida. Formato esperado: dd/mm/yyyy"
                }
              }
            }
          },
          "500": {
            "description": "Sin dato disponible",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Rate": {
        "type": "object",
        "required": ["compra", "venta", "fecha"],
        "properties": {
          "compra": { "type": "number", "example": 504.12 },
          "venta": { "type": "number", "example": 510.45 },
          "fecha": {
            "type": "string",
            "description": "Día del dato en dd/mm/yyyy",
            "example": "17/08/2026"
          }
        }
      },
      "Error": {
        "type": "object",
        "required": ["error"],
        "properties": {
          "error": { "type": "string" }
        }
      }
    }
  }
}
