module MiscCommands





      ########################################################################################
      def set_steamid(steamid)
            if @loggedin == false
                  @steamid,token = verify_profileid_or_trade_link_or_steamid(steamid)
                  output "steamID set to #{@steamid}"
            else
                  raise "editing steamID while logged in will cause malfunctions"
            end
      end



      def copy_session()
            return @session
      end
########################################################################################
      def use_session()
            @session
      end
########################################################################################

      def use_chat_session()
            @chat_session
      end





      private
      def partner_id_to_steam_id(account_id)
            unknown_constant = 17825793 # or 0x1100001 idk wtf is this but ....
            first_bytes = [account_id.to_i].pack('i>')
            last_bytes = [unknown_constant].pack('i>')
            collect = last_bytes + first_bytes
            return collect.unpack('Q>')[0].to_s
      end

      def output(message)
            time = Time.new
            add = time.strftime("%d-%m-%Y %H:%M:%S")
            puts "#{add} :: #{message}" if @messages == true
      end

      def verify_profileid_or_trade_link_or_steamid(steamid)
            if steamid.to_i == 0 && steamid.include?("?partner=") ##supplied trade link
                partner_raw = steamid.split('partner=',2)[1].split('&',2)[0]
                token = steamid.split('token=', 2)[1]
                steamid = partner_id_to_steam_id(partner_raw)
                return [steamid,token]
            elsif steamid.to_i == 0
                  parser = Nokogiri::XML(@session.get("https://steamcommunity.com/id/#{steamid}?xml=1").content)
                  if parser.xpath('//error').text == ('The specified profile could not be found.')
                        raise "No profile with #{steamid} as profileid"
                  end
                  steamid = parser.xpath('//steamID64').text
                  return steamid
            elsif steamid.to_s.length == 17
                  return steamid
            else
                  raise "invalid steamid : #{steamid}, length of received :: #{steamid.to_s.length}, normal is 17" if steamid.to_s.length != 17
            end
      end

      def sessionid_cookie()
            value = nil
            begin
                  value = @session.cookie_jar.jar["steamcommunity.com"]["/"]["sessionid"].value
            rescue
                  value = nil
            end
            if value == nil
                  begin
                        value = @session.cookie_jar.jar["store.steampowered.com"]["/"]["sessionid"].value
                  rescue
                        value = nil
                  end
            end

            if value == nil
                  @session.cookies.each { |c|
                        if c.name == "sessionid"
                               value = c.value
                         end
                  }
            end
            return value
      end

      def api_call(request_methode, interface, api_methode ,version,params = nil)
            url = ["https://api.steampowered.com","#{interface}", "#{api_methode}", "#{version}"].join('/')
            if request_methode.downcase == "get"
                  response = @session.get(url, params)
            elsif request_methode.downcase == "post"
                  response = @session.get(url,params)
            else
                  raise "invalid request methode : #{request_methode}"
            end
            if response.content.include?("Access is denied")
                  raise "invalid API_key"
            end
            return response.content
      end


end

module Util
      def self.gem_libdir
            require_relative 'meta/version.rb'
            gem_name = 'steam-trade'
            version = '0.0.5'
           t = ["#{File.dirname(File.expand_path($0))}/#{Meta::GEM_NAME}.rb",
                "#{Gem.dir}/gems/#{Meta::GEM_NAME}-#{Meta::VERSION}/lib/#{Meta::GEM_NAME}.rb"]
               t.each {|i|
                      return i.gsub("#{Meta::GEM_NAME}.rb", '') if File.readable?(i)
                }
               raise "both paths are invalid: #{t}, while getting gemlib directory"
         end
end