{
  "openapi": "3.1.0",
  "info": {
    "title": "Driver Guide France",
    "description": "Private guided tours by car in Paris and the French countryside",
    "version": "1.0.0",
    "contact": {
      "name": "Driver Guide France",
      "url": "https://www.driverguidefrance.com/",
      "phone": "+33 (0) 142 407 554"
    }
  },
  "servers": [
    {
      "url": "https://www.driverguidefrance.com",
      "description": "Driver Guide France website"
    }
  ],
  "paths": {
    "/": {
      "get": {
        "operationId": "listTours",
        "summary": "Browse available private guided tours",
        "description": "List all private guided tours by car from Paris — half-day, full-day and multi-day options.",
        "responses": {
          "200": {
            "description": "Tour listing page",
            "content": {
              "text/html": {
                "schema": {"type": "string", "description": "Contenu HTML de la page d'accueil"}
              }
            }
          },
          "500": {
            "description": "Erreur serveur",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/Error"}
              }
            }
          }
        }
      }
    },
    "/contact/": {
      "post": {
        "operationId": "submitBooking",
        "summary": "Submit a tour booking inquiry",
        "description": "Send a booking request or inquiry to Driver Guide France.",
        "x-payment-info": {
          "intent": "charge",
          "method": "card",
          "amount": 560,
          "currency": "EUR",
          "description": "Private guided tour from Paris (price varies by destination and duration)"
        },
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {"$ref": "#/components/schemas/BookingRequest"}
            }
          }
        },
        "responses": {
          "200": {
            "description": "Inquiry submitted successfully",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/BookingResponse"}
              }
            }
          },
          "400": {
            "description": "Requête invalide — champ requis manquant ou email malformé",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/Error"}
              }
            }
          },
          "500": {
            "description": "Erreur serveur",
            "content": {
              "application/json": {
                "schema": {"$ref": "#/components/schemas/Error"}
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "BookingRequest": {
        "type": "object",
        "description": "Formulaire de demande de réservation d'un tour privé.",
        "required": ["name", "email", "message"],
        "properties": {
          "name": { "type": "string", "description": "Visitor full name" },
          "email": { "type": "string", "format": "email", "description": "Visitor email address" },
          "message": { "type": "string", "description": "Booking request or inquiry" },
          "tour_date": { "type": "string", "format": "date", "description": "Desired tour date" }
        }
      },
      "BookingResponse": {
        "type": "object",
        "description": "Confirmation de prise en compte d'une demande de réservation.",
        "properties": {
          "status": {"type": "string", "enum": ["ok"], "description": "Statut de la demande"},
          "message": {"type": "string", "description": "Message de confirmation à destination de l'agent"}
        },
        "required": ["status"]
      },
      "Error": {
        "type": "object",
        "description": "Réponse d'erreur standard.",
        "properties": {
          "code": {"type": "string", "description": "Code d'erreur machine-readable"},
          "message": {"type": "string", "description": "Description humaine de l'erreur"}
        },
        "required": ["code", "message"]
      }
    }
  }
}
