class Api::V1::Admin::MachineTokensController < Api::V1::ApiController
  protect_from_forgery with: :null_session
  before_action :user_authentication_for_api

  def index
    machine_tokens = @user.organisation.users.machine_token_users

    render json: { data: { machine_tokens: machine_tokens.map{|n| {name: n.full_name, access_token: n.access_token} }}, status: 200 }
  end

  def create
    user_name = params[:name]
    role_id = Role.api_role.id
    user_params = {"full_name" => user_name, "email" => "api#{Time.now.to_i}@wavespot.ai", "password" => "pr0nt0xl", "password_confirmation" => "pr0nt0xl", "role_id" => role_id, "phone_number" => "912212345678"}
    machine_token = @user.organisation.users.build(user_params)
    if machine_token.save
      render json: { msg: "Machine Token Created Successfully", access_token: machine_token.access_token, id: machine_token.id, status: 200 }
    else
      render json: { msg: "Machine Token is not Created (Reason: #{machine_token.errors.full_messages}). Please check again.", status: 422}, status: 422
    end
  end

  def update
    role_id = Role.api_role.id
    update_user = @user.organisation.users.machine_token_users.where(id: params[:id]).last
    if update_user && update_user.generate_access_token.save
      render json: { data: {name: update_user.full_name, access_token: update_user.access_token}, msg: "Machine Token is regenerated Successfully", status: 200 }
    else
      render json: { msg: "Machine Token is not regenerated (Reason: #{update_user.errors.full_messages}). Please check again.", status: 422}, status: 422
    end
  end

  def destroy
    machine_token = @user.organisation.users.machine_token_users.where(id: params[:id]).last
    if machine_token && machine_token.destroy
      render json: { msg: "Machine Token deleted Successfully", status: 200 }
    else
      unless machine_token
        render json: {msg: "Machine Token not found."}, status: 404
      else
        render json: { msg: "Machine Token is not Deleted. Please check again.", status: 422}, status:422
      end
    end
  end

end
