# frozen_string_literal: true

# API Controller for resources of type OpenAPI::Client
# OpenAPI::Clients are used to allow access to the public API
class API::OpenAPIClientsController < API::ApiController
  before_action :authenticate_user!

  def index
    authorize OpenAPI::Client
    @clients = OpenAPI::Client.order(:created_at)
  end

  def create
    @client = OpenAPI::Client.new(client_params)
    authorize @client
    if @client.save
      render status: :created
    else
      render json: @client.errors, status: :unprocessable_entity
    end
  end

  def update
    @client = OpenAPI::Client.find(params[:id])
    authorize @client
    if @client.update(client_params)
      render status: :ok
    else
      render json: @client.errors, status: :unprocessable_entity
    end
  end

  def reset_token
    @client = OpenAPI::Client.find(params[:id])
    authorize @client
    @client.regenerate_token
  end

  def destroy
    @client = OpenAPI::Client.find(params[:id])
    authorize @client
    @client.destroy
    head 204
  end

  private

  def client_params
    params.require(:open_api_client).permit(:name)
  end
end