# frozen_string_literal: true

# openAPI documentation for invoices endpoints
class OpenAPI::V1::InvoicesDoc < OpenAPI::V1::BaseDoc
  resource_description do
    short 'Invoices'
    desc 'Invoices'
    formats FORMATS
    api_version API_VERSION
  end

  include OpenAPI::V1::Concerns::ParamGroups

  doc_for :index do
    api :GET, "/#{API_VERSION}/invoices", 'Invoices index'
    description "Index of users' invoices, with optional pagination. Order by *created_at* descendant."
    param_group :pagination
    param :user_id, [Integer, Array], optional: true, desc: 'Scope the request to one or various users.'
    example <<-INVOICES
      # /open_api/v1/invoices?user_id=211&page=1&per_page=3
      {
        "invoices": [
          {
            "id": 2809,
            "user_id": 211,
            "payment_gateway_object": {
              id: "in_187DLE4zBvgjueAZ6L7SyQlU",
              type: "Stripe::Invoice"
            },
            "reference": "1605017/VL",
            "total": 1000,
            "type": null,
            "description": null,
            "invoice_url": "/open_api/v1/invoices/2809/download",
            "main_object": {
              "type": "Reservation",
              "id": 3257,
              "created_at": "2016-05-04T01:54:16.686+02:00"
            }
          },
          {
            "id": 2783,
            "user_id": 211,
            "payment_gateway_object": {
              id: "pi_2Dat4P2eYbKYlo2C3MxszwQp",
              type: "Stripe::PaymentIntent"
            },
            "reference": "1604176/VL",
            "total": 2000,
            "type": null,
            "description": null,
            "invoice_url": "/open_api/v1/invoices/2783/download",
            "main_object": {
              "type": "Reservation",
              "id": 3229,
              "created_at": "2016-04-28T18:14:52.524+02:00"
            }
          },
          {
            "id": 2773,
            "user_id": 211,
            "payment_gateway_object": {
              id: "ba15dc9d8f3e0fa17bf527466",
              type: "PayZen::Order"
            },
            "reference": "1604166/VL",
            "total": 2000,
            "type": null,
            "description": null,
            "invoice_url": "/open_api/v1/invoices/2773/download",
            "main_object": {
              "type": "Reservation",
              "id": 3218,
              "created_at": "2016-04-27T10:50:30.806+02:00"
            }
          }
        ]
      }
    INVOICES
  end

  doc_for :download do
    api :GET, "/#{API_VERSION}/invoices/:id/download", 'Download an invoice'
    param :id, Integer, desc: 'Invoice id', required: true

    example <<-URL
      # /open_api/v1/invoices/2809/download
    URL
  end
end