# Copyright (C) 2024 Manuel Bustillo

require 'swagger_helper'

RSpec.describe 'guests', type: :request do
  path '/{slug}/guests' do
    get('list guests') do
      tags 'Guests'
      produces 'application/json'
      parameter Swagger::Schema::SLUG
      response(200, 'successful') do
        schema type: :array,
               items: {
                 type: :object,
                 required: %i[id name status group],
                 properties: {
                   id: { type: :string, format: :uuid },
                   name: { type: :string },
                   status: { type: :string, enum: Guest.statuses.keys },
                   group: { type: :object,
                            required: %i[id name],
                            properties: {
                              id: { type: :string, format: :uuid },
                              name: { type: :string }
                            } }
                 }
               }
        xit
      end
      regular_api_responses
    end

    post('create guest') do
      tags 'Guests'
      consumes 'application/json'
      produces 'application/json'
      parameter Swagger::Schema::SLUG
      parameter name: :body, in: :body, schema: {
        type: :object,
        required: %i[guest],
        properties: {
          guest: {
            type: :object,
            required: %i[name status],
            properties: {
              name: { type: :string },
              group_id: { type: :string, format: :uuid },
              status: { type: :string, enum: Guest.statuses.keys }
            }
          }
        }
      }

      response_empty_201
      response_422
      regular_api_responses
    end
  end

  path '/{slug}/guests/{id}' do
    patch('update guest') do
      tags 'Guests'
      consumes 'application/json'
      produces 'application/json'
      parameter Swagger::Schema::SLUG
      parameter name: 'id', in: :path, type: :string, format: :uuid
      parameter name: :body, in: :body, schema: {
        type: :object,
        required: %i[guest],
        properties: {
          guest: {
            type: :object,
            required: %i[name status],
            properties: {
              name: { type: :string },
              group_id: { type: :string, format: :uuid },
              status: { type: :string, enum: Guest.statuses.keys }
            }
          }
        }
      }

      response_empty_200
      response_422
      response_404
      regular_api_responses
    end

    delete('delete guest') do
      tags 'Guests'
      produces 'application/json'
      parameter Swagger::Schema::SLUG
      parameter name: 'id', in: :path, type: :string, format: :uuid

      response_empty_200
      response_404
      regular_api_responses
    end
  end
end