nelmio_api_doc:
    documentation:
        info:
            title: My App
            description: This is an awesome app!
            version: 1.0.0
        paths:
          /api/login:
            post:
              tags:
                - "Compte"
              summary: "Connexion JWT (email + mot de passe)"
              operationId: "post_app_user_api_logindoc__invoke"
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      required:
                        - email
                        - password
                      properties:
                        email:
                          type: string
                          example: "user@example.com"
                        password:
                          type: string
                          example: "password123"
              responses:
                200:
                  description: "Token JWT retourné"
                  content:
                    application/json:
                      schema:
                        type: object
                        properties:
                          token:
                            type: string
                            example: "eyJhbGciOi..."
                401:
                  description: "Identifiants invalides"
          /api/users/lost-password:
                post:
                    summary: 'Demande de nouveau mot de passe'
                    tags:
                        - 'Compte'
                    requestBody:
                        required: true
                        content:
                            application/json:
                                schema:
                                    type: object
                                    properties:
                                        email:
                                            type: string
                                            example: 'user@example.com'
                    responses:
                        200:
                            description: 'Demande de nouveau mot de passe envoyée par e-mail'
                        400:
                            description: 'Données invalides ou compte non trouvé'
          /api/me:
            get:
              tags:
                - "Compte"
              summary: "Récupère les infos du user connecté"
              operationId: "get_api_user_me"
              responses:
                200:
                  description: "Données de l’utilisateur connecté"
                  content:
                    application/json:
                      schema:
                        type: object
                        properties:
                          email:
                            type: string
                            example: "user@example.com"
                          lastname:
                            type: string
                            example: "Doe"
                          firstname:
                            type: string
                            example: "John"
                401:
                  description: "JWT manquant ou invalide"
              security:
                - bearerAuth: []
          /api/check-token:
            get:
              tags:
                - "Compte"
              summary: "Vérifie si le token JWT est valide"
              operationId: "get_api_check_token"
              responses:
                200:
                  description: "Le token JWT est valide et l’utilisateur est authentifié."
                  content:
                    application/json:
                      schema:
                        type: object
                        properties:
                          valid:
                            type: boolean
                            example: true
                          message:
                            type: string
                            example: "Token valide"
                401:
                  description: "Le token JWT est invalide ou expiré."
              security:
                - bearerAuth: []
          /api/users/create:
            post:
              tags:
                - "Compte"
              summary: "Créer un nouvel utilisateur"
              security:
                - bearerAuth: []
              operationId: "post_api_user_create"
              requestBody:
                required: true
                content:
                  application/json:
                    schema:
                      required:
                        - email
                        - password
                        - firstname
                        - lastname
                      properties:
                        email:
                          type: string
                        password:
                          type: string
                        firstname:
                          type: string
                        lastname:
                          type: string
          /api/bookings/all:
                get:
                    summary: 'Liste toutes les réservations passées et à venir'
                    description: 'Retourne la liste complète des réservations'
                    security:
                        - bearerAuth: []
                    tags:
                        - 'Réservations'
                    responses:
                        200:
                            description: 'Liste des réservations'
                            content:
                                application/json:
                                    schema:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                startAt:
                                                    type: string
                                                    format: date
                                                    example: '2025-03-19'
                                                stopAt:
                                                    type: string
                                                    format: date
                                                    example: '2025-03-22'
                                                room:
                                                    type: string
                                                    example: '1 chambre(s) - John Doe (2 personnes : 2/0)'
                                                status:
                                                    type: string
                                                    example: 'PENDING'
                                                url:
                                                    type: string
                                                    example: '/admin/booking/reservations/5/show'
          /api/bookings/by_room/{id}:
                get:
                    summary: 'Récupération des réservations pour une chambre'
                    description: 'Permet de récupérer toutes les réservations associées à une chambre donnée.'
                    security:
                        - bearerAuth: []
                    tags:
                        - 'Réservations'
                    parameters:
                        - name: 'id'
                          in: 'path'
                          required: true
                          description: 'ID de la chambre'
                          schema:
                              type: 'integer'
                              example: 12
                    responses:
                        200:
                            description: 'Liste des réservations pour une chambre'
                            content:
                                application/json:
                                    schema:
                                        type: array
                                        items:
                                            type: object
                                            properties:
                                                startAt:
                                                    type: string
                                                    format: date
                                                    example: '2025-03-19'
                                                stopAt:
                                                    type: string
                                                    format: date
                                                    example: '2025-03-22'
                                                room:
                                                    type: string
                                                    example: '1 chambre(s) - John Doe (2 personnes : 2/0)'
                                                status:
                                                    type: string
                                                    example: 'PENDING'
                                                url:
                                                    type: string
                                                    example: '/admin/booking/reservations/5/show'
          /api/bookings/available-rooms:
                get:
                    summary: 'Liste les chambres disponibles pour une période donnée'
                    description: 'Retourne les chambres encore disponibles pour une période définie via les paramètres startAt et stopAt. Le format attendu pour les dates est YYYY-MM-DD.'
                    security:
                        - bearerAuth: []
                    tags:
                        - 'Réservations'
                    parameters:
                        - name: 'startAt'
                          in: 'query'
                          required: true
                          description: 'Date de début de la réservation (format Y-m-d)'
                          schema:
                              type: 'string'
                              format: 'date'
                              example: '2025-07-01'
                        - name: 'stopAt'
                          in: 'query'
                          required: true
                          description: 'Date de fin de la réservation (format Y-m-d)'
                          schema:
                              type: 'string'
                              format: 'date'
                              example: '2025-07-07'
                    responses:
                        200:
                            description: 'Retourne un objet indiquant la disponibilité des chambres pour la période.'
                            content:
                                application/json:
                                    schema:
                                        type: object
                                        properties:
                                            success:
                                                type: boolean
                                                example: true
                                            nbAvailableRooms:
                                                type: integer
                                                example: 3
                                            hasAvailableRooms:
                                                type: boolean
                                                example: true
                                            className:
                                                type: string
                                                example: 'text-green-600'
                                            text:
                                                type: string
                                                example: '3 chambres disponibles'
          /api/realizations/total-metrage:
                get:
                    summary: 'Récupération du total du métrage imprimé'
                    description: 'Retourne le total du métrage imprimé selon les réalisations stockées.'
                    security:
                        - bearerAuth: []
                    tags:
                        - 'Réalisations'
                    responses:
                        200:
                            description: 'Retourne les dimensions et la surface totales des réalisations.'
                            content:
                                application/json:
                                    schema:
                                        type: object
                                        properties:
                                            totalWidth:
                                                type: number
                                                format: integer
                                                example: 100
                                            totalHeight:
                                                type: number
                                                format: integer
                                                example: 200
                                            totalSurface:
                                                type: number
                                                format: integer
                                                example: 20000
                                            totalTime:
                                                type: string
                                                pattern: '^\d{1,2}:\d{2}$'
                                                example: 23:59
                                            unit:
                                                type: string
                                                example: 'cm / hh:mm'
                        500:
                            description: 'Erreur interne du serveur'
    areas: # to filter documented areas
        path_patterns:
            - ^/api(?!/doc$) # Accepts routes under /api except /api/docs