module QueueIt
	class QueueUrlParams
		KEY_VALUE_SEPARATOR_GROUP_CHAR = '~';
		KEY_VALUE_SEPARATOR_CHAR = '_';
		TIMESTAMP_KEY = "ts"
		COOKIE_VALIDITY_MINUTES_KEY = "cv";
		EVENT_ID_KEY = "e";
		EXTENDABLE_COOKIE_KEY = "ce";
		HASH_KEY = "h";
		QUEUE_ID_KEY = "q";
		REDIRECT_TYPE_KEY = "rt"

		attr_accessor :timeStamp
		attr_accessor :eventId
		attr_accessor :hashCode
		attr_accessor :extendableCookie
		attr_accessor :cookieValidityMinutes
		attr_accessor :queueITToken
		attr_accessor :queueITTokenWithoutHash
		attr_accessor :queueId
		attr_accessor :redirectType

		def initialize
			@timeStamp = 0
			@eventId = ""
			@hashCode = ""
			@extendableCookie = false
			@cookieValidityMinutes = nil
			@queueITToken = ""
			@queueITTokenWithoutHash = ""
			@queueId = ""
			@redirectType = nil
		end

		def self.extractQueueParams(queueitToken)
			begin
				if(Utils.isNilOrEmpty(queueitToken))
					return nil
				end
				result = QueueUrlParams.new
				result.queueITToken = queueitToken
				paramsNameValueList = result.queueITToken.split(KEY_VALUE_SEPARATOR_GROUP_CHAR)

				paramsNameValueList.each do |pNameValue|
					paramNameValueArr = pNameValue.split(KEY_VALUE_SEPARATOR_CHAR)
			
					case paramNameValueArr[0]
						when TIMESTAMP_KEY 
							begin
								result.timeStamp = Integer(paramNameValueArr[1])
							rescue
								result.timeStamp = 0					
							end
						when COOKIE_VALIDITY_MINUTES_KEY
							begin
								result.cookieValidityMinutes = Integer(paramNameValueArr[1])
							rescue
								result.cookieValidityMinutes = nil
							end
						when EVENT_ID_KEY
							result.eventId = paramNameValueArr[1]
						when EXTENDABLE_COOKIE_KEY
							if paramNameValueArr[1].upcase.eql? 'TRUE'
								result.extendableCookie = true
							end
						when HASH_KEY
							result.hashCode = paramNameValueArr[1]
						when QUEUE_ID_KEY
							result.queueId = paramNameValueArr[1]
						when REDIRECT_TYPE_KEY
							result.redirectType = paramNameValueArr[1] 
					end		
				end
				result.queueITTokenWithoutHash = result.queueITToken.gsub((KEY_VALUE_SEPARATOR_GROUP_CHAR + HASH_KEY + KEY_VALUE_SEPARATOR_CHAR + result.hashCode), "")		
				return result
			rescue 
				return nil
			end
		end
	end
end