require 'json'

module QAHelpers
  class GrassTokenHelper

    attr_accessor :db_client

    def user_grass(params={})
      if params[:vend_contact_id]
        grass_by_vend_contact_id(params[:vend_contact_id])
      elsif params[:vendor_id]
        vend_contact_id = vend_contact_id(params[:vendor_id])
        grass_by_vend_contact_id(vend_contact_id)
      else
        raise("Provide :vend_contact_id or :vendor_id to get the grass token")
      end
    end

    def grass_by_vend_contact_id(vend_contact_id)
      begin
        vectorapi_user = vectorapi_access_token(vend_contact_id)
        grass_url = "/auth/session/?user=#{vectorapi_user['user_type']}:#{vend_contact_id}"
        grass_url += "&token=#{vectorapi_user['oauth_token']}"
        grass_url += "&client=#{vectorapi_user['client_id']}"
        JSON.parse(api_client.call(:get, grass_url).body)['token']
      rescue => _e
        "Something went wrong when trying to get grass_token for vend_contact_id:#{vend_contact_id}"
      end
    end

    def vectorapi_access_token(vend_contact_id)
      query = "SELECT * FROM vectorapi_access_tokens where user_id = #{vend_contact_id}"
      db_client.query(query).first
    end

    def vend_contact_id(vendor_id)
      query = "SELECT id FROM vend_contact WHERE vendor_id = #{vendor_id} and master = 'Y'"
      result = db_client.query(query).first
      if result
        result['id']
      else
        # Maybe it's a sub account
        puts "Looking for a subaccount #{vendor_id}"
        query = "SELECT * FROM vend_contact WHERE subaccount_id = #{vendor_id} and active = 'Y'"
        result = db_client.query(query).first
        result ? result['id'] : nil
      end
    end

    private

    def db_client(db_params={})
      @db_client ||= QAHelpers::DataBase::Client.new(db_params).client
    end

    def api_client
      @api_client ||= QAHelpers::API::Client.new
    end
  end
end
