{
    "openapi": "3.0.0",
    "info": {
      "title": "API Partenaires Easygo",
      "description": "Documentation interactive de l'API de réservation.  Pour toute question, contactez-nous à [api-partenaire@easygo.co](mailto:api-partenaire@easygo.co).",
      "contact": {
        "email": "api-partenaire@easygo.co"
      },
      "version": "1.0.0",
      "x-logo": {
        "url": "https://api.easygo.co/v1/logo.png",
        "altText": "Easygo"
      }
    },
    "servers": [
      {
        "url": "https://api.easygo.co/v1/addReservation.php",
        "description": "Serveur de production"
      }
    ],
    "paths": {
      "/?endpoint=reservation-unique": {
        "post": {
          "summary": "Créer une réservation unique",
          "description": "Ajoute une réservation unique.",
          "operationId": "createReservationUnique",
          "tags": ["Réservations"],
          "security": [{ "BearerAuth": [] }],
          "requestBody": {
            "required": true,
            "content": {
              "application/json": {
                "schema": { "$ref": "#/components/schemas/Reservation" }
              }
            }
          },
          "responses": {
            "200": { "description": "Réservation enregistrée" },
            "400": { "description": "Requête invalide" },
            "403": { "description": "Token invalide" },
            "404": { "description": "Endpoint inconnu" },
            "500": { "description": "Erreur d'écriture dans le fichier" }
          }
        }
      },
      "/?endpoint=reservation-lot": {
        "post": {
          "summary": "Créer des réservations en lot",
          "description": "Ajoute plusieurs réservations en même temps.",
          "operationId": "createReservationLot",
          "tags": ["Réservations"],
          "security": [{ "BearerAuth": [] }],
          "requestBody": {
            "required": true,
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": { "$ref": "#/components/schemas/Reservation" }
                }
              }
            }
          },
          "responses": {
            "200": { "description": "Toutes les réservations ont été enregistrées" },
            "400": { "description": "Requête invalide" },
            "403": { "description": "Token invalide" },
            "404": { "description": "Endpoint inconnu" },
            "500": { "description": "Certaines réservations n'ont pas été enregistrées" }
          }
        }
      }
    },
    "components": {
      "schemas": {
        "Reservation": {
          "type": "object",
          "properties": {
            "mode": {
              "type": "string",
              "enum": ["Test", "Production"],
              "description": "Mode de la requete"
            },
            "reservationNumber": {
              "type": "string",
              "description": "Numéro de réservation unique fourni au client lors de sa réservation"
            },
            "nom_station_depart": { "type": "string" },
            "nom_station_retour": { "type": "string" },
            "categorie_vehicule": { "type": "string" },
            "date_depart": { "type": "string", "format": "date-time" },
            "date_retour": { "type": "string", "format": "date-time" },
            "depart_info_sup": { "type": "string" },
            "retour_info_sup": { "type": "string" },
            "montant_total": { "type": "number", "format": "float",
                                "description": "Montant total TTC de la réservation" },
            "acompte_paye": { "type": "number", "format": "float",
                                "description": "Acompte TTC déjà payé par l'utilisateur" },
            "option_nom": { "type": "string" },
            "option_qty": { "type": "integer" },
            "nomClient": { "type": "string" },
            "prenomClient": { "type": "string" },
            "adresseClient": { "type": "string" },
            "code_postalClient": { "type": "string" },
            "villeClient": { "type": "string" },
            "telClient": { "type": "string" },
            "mailClient": { "type": "string", "format": "email" },
            "reservationStatus": {
              "type": "string",
              "enum": ["New", "Updated", "Canceled"],
              "description": "Statut de la réservation"
            }
          },
          "required": [
            "mode", "nom_station_depart", "nom_station_retour", "categorie_vehicule", "date_depart",
            "date_retour", "montant_total", "acompte_paye", "mailClient", "reservationStatus", "reservationNumber"
          ]
        }
      },
      "securitySchemes": {
        "BearerAuth": { "type": "http", "scheme": "bearer" }
      }
    },
    "x-quickstart": {
      "description": "Démarrage rapide de l'API",
      "example": {
        "POST /?endpoint=reservation-unique": {
          "description": "Exemple de création d'une réservation unique.",
          "requestBody": {
            "mode": "Production",
            "nom_station_depart": "Station A",
            "nom_station_retour": "Station B",
            "categorie_vehicule": "SUV",
            "date_depart": "2025-03-01T10:00:00",
            "date_retour": "2025-03-01T12:00:00",
            "depart_info_sup": "Aucune",
            "retour_info_sup": "Aucune",
            "montant_total": 150.0,
            "acompte_paye": 150.0,
            "option_nom": "GPS",
            "option_qty": 1,
            "nomClient": "John",
            "prenomClient": "Doe",
            "adresseClient": "123 Rue Exemple",
            "code_postalClient": "69001",
            "villeClient": "Lyon",
            "telClient": "0123456789",
            "mailClient": "johndoe@example.com",
            "reservationStatus": "New"
          }
        }
      }
    }
  }
  