{
  "openapi": "3.1.0",
  "info": {
    "title": "WESTO API — Presupuestos Integrales",
    "description": "API pública de WESTO para generación de presupuestos técnicos de construcción y servicios del hogar en Buenos Aires, Argentina. Los precios se expresan en ARS con referencias de mercado premium (MercadoLibre Argentina). Cada presupuesto se registra con hash SHA-256 para garantizar inmutabilidad.",
    "version": "1.0.0",
    "contact": {
      "name": "WESTO Servicio Integral",
      "email": "info@westo.com.ar",
      "url": "https://westo.com.ar"
    },
    "license": {
      "name": "Privado — Uso Interno"
    }
  },
  "servers": [
    {
      "url": "https://westo.com.ar",
      "description": "Servidor de producción"
    }
  ],
  "paths": {
    "/api/v1/status": {
      "get": {
        "operationId": "getSystemStatus",
        "summary": "Estado del sistema",
        "description": "Verifica que el backend de WESTO esté operativo. Los agentes deben llamar a este endpoint antes de intentar generar un presupuesto.",
        "tags": ["Sistema"],
        "responses": {
          "200": {
            "description": "Sistema operativo",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "status": { "type": "string", "example": "ok" },
                    "service": { "type": "string", "example": "WESTO Backend" },
                    "version": { "type": "string", "example": "1.0.0" },
                    "timestamp": { "type": "string", "format": "date-time" },
                    "uptime_seconds": { "type": "number" },
                    "capabilities": {
                      "type": "object",
                      "properties": {
                        "budget_generation": { "type": "boolean" },
                        "email_notification": { "type": "boolean" },
                        "blockchain_integrity": { "type": "boolean" }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/budget": {
      "post": {
        "operationId": "generateBudget",
        "summary": "Generar presupuesto técnico",
        "description": "Genera un presupuesto técnico detallado usando IA. Devuelve desglose de materiales, tiempo estimado y costo total en ARS. El presupuesto queda registrado con hash de integridad SHA-256.",
        "tags": ["Presupuestos"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": ["nombre", "servicio", "localidad", "descripcion"],
                "properties": {
                  "nombre": {
                    "type": "string",
                    "description": "Nombre del cliente",
                    "example": "Juan García"
                  },
                  "servicio": {
                    "type": "string",
                    "description": "Tipo de servicio solicitado",
                    "enum": [
                      "Gasista Matriculado",
                      "Electricista Matriculado",
                      "Plomería",
                      "Pintura",
                      "Construcción",
                      "Durlock",
                      "Aberturas",
                      "Muebles",
                      "Alto Vacío e Hidrojet"
                    ],
                    "example": "Plomería"
                  },
                  "localidad": {
                    "type": "string",
                    "description": "Ciudad o barrio dentro del AMBA",
                    "example": "Quilmes"
                  },
                  "descripcion": {
                    "type": "string",
                    "description": "Descripción detallada del trabajo a realizar. Mientras más detalle, más preciso el presupuesto.",
                    "example": "Cambio de cañería de agua fría y caliente en baño principal. Aproximadamente 15 metros lineales de PPR 25mm."
                  },
                  "telefono": {
                    "type": "string",
                    "description": "Teléfono de contacto del cliente (opcional)",
                    "example": "+54 11 5555-1234"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Presupuesto generado con éxito",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "description": "Identificador único del presupuesto"
                    },
                    "hash": {
                      "type": "string",
                      "description": "Hash SHA-256 para verificación de integridad"
                    },
                    "createdAt": {
                      "type": "string",
                      "format": "date-time"
                    },
                    "status": {
                      "type": "string",
                      "example": "pending"
                    },
                    "generated": {
                      "type": "object",
                      "properties": {
                        "estimatedTimeInDays": {
                          "type": "number",
                          "description": "Días laborables estimados de obra"
                        },
                        "estimatedCost": {
                          "type": "number",
                          "description": "Costo total estimado en ARS"
                        },
                        "projectDescription": {
                          "type": "string",
                          "description": "Memoria descriptiva del proyecto"
                        },
                        "materialBreakdown": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "material": { "type": "string" },
                              "quantity": { "type": "string" },
                              "estimatedPrice": { "type": "number" }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Límite de 3 presupuestos diarios por IP alcanzado",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "error": { "type": "string" }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Error interno del servidor"
          }
        }
      }
    },
    "/api/notify": {
      "post": {
        "operationId": "sendBudgetNotification",
        "summary": "Enviar notificación de presupuesto por email",
        "description": "Envía el presupuesto por email al cliente y notifica al propietario. Debe llamarse con los datos del presupuesto generado.",
        "tags": ["Notificaciones"],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "id": { "type": "string" },
                  "hash": { "type": "string" },
                  "createdAt": { "type": "string" },
                  "nombre": { "type": "string" },
                  "servicio": { "type": "string" },
                  "localidad": { "type": "string" },
                  "telefono": { "type": "string" },
                  "contacto_final": {
                    "type": "string",
                    "format": "email",
                    "description": "Email del cliente para enviarle el presupuesto"
                  },
                  "generated": { "type": "object" }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Emails enviados con éxito"
          }
        }
      }
    }
  },
  "tags": [
    { "name": "Sistema", "description": "Endpoints de salud y descubrimiento" },
    { "name": "Presupuestos", "description": "Generación de presupuestos con IA" },
    { "name": "Notificaciones", "description": "Envío de emails y alertas" }
  ]
}
