package market.market_util;

import java.util.*;
import java.net.URLEncoder;
/**
 * Class that handles packet registration to the rwServer.
 * @author: nik
 */
public class rwRegistrationPacket {
	public short Number = 0;
	private short marketKey = 0;
 	private short langKey = 0;
 	private long wrKey = Constants.No_Key;

 	private StringBuffer rwStringBuffer = null;
 	private StringBuffer rwCountsBuffer = null;

	public short Indexes[] = null;
	public long rwKeys[] = null;
/**
 * The constructor of the rwRegistrationPacket class
 * @param CmarketKey short
 * @param ClangKey short
 * @param CwrKey long
 * @param CrwString java.lang.String
 * @param CrwCounts long
 * @param indexes short
 * @param firstIndex short 
 */
public rwRegistrationPacket(short CmarketKey, short ClangKey, long CwrKey, String CrwString, byte CrwCounts, short indexes, short firstIndex) {
	marketKey = CmarketKey;
	langKey = ClangKey;
	wrKey = CwrKey;
	Number = 1;
	rwStringBuffer = new StringBuffer(CrwString);
	rwCountsBuffer = new StringBuffer(String.valueOf(CrwCounts));
	
	Indexes = new short[indexes];
	rwKeys = new long[indexes];
	for (int i = 0; i < indexes; i++) {
		Indexes[i] = Constants.No_Key;
		rwKeys[i] = Constants.No_Key;
	}
	Indexes[0] = firstIndex;
}
/**
 * Adds a element to the packet structure
 * @return boolean
 * @param rwString java.lang.String
 * @param rwCounts long
 * @param index short
 */
public synchronized boolean AddElement(String rwString, byte rwCounts, short index) {
	try {
		if (rwString == null || rwCounts < 1 || index < 0)
			return false;
		rwStringBuffer.append(Constants.Packet_Delimiter);
		rwStringBuffer.append(rwString);
		rwCountsBuffer.append(Constants.Packet_Delimiter);
		rwCountsBuffer.append(rwCounts);
		Indexes[Number] = index;
		Number++;
		return true;
	} catch (Exception e) {
		return false;
	}
}
/**
 * Creares a header that can be send to rwServer
 * @return java.lang.String
 */
public synchronized StringBuffer CreateHeader() {
	try {
		if (wrKey < 1 || marketKey < 1 || langKey < 1)
			return null;
		StringBuffer Header = new StringBuffer();
		
		Header.append(Constants.cs_WR_KEY);
		Header.append('=');
		Header.append(wrKey);
		Header.append('&');
		
		Header.append(Constants.cs_MARKET_KEY);
		Header.append('=');
		Header.append(marketKey);
		Header.append('&');

		Header.append(Constants.cs_Packet_Number);
		Header.append('=');
		Header.append(Number);
		Header.append('&');
			
		Header.append(Constants.cs_LANG_KEY);
		Header.append('=');
		Header.append(langKey);
		Header.append('&');
				
		Header.append(Constants.cs_RW_STRING);
		Header.append('=');
		Header.append(URLEncoder.encode(rwStringBuffer.toString()));
		Header.append('&');

		Header.append(Constants.cs_RW_COUNTS);
		Header.append('=');
		Header.append(rwCountsBuffer.toString());
		
		return Header;
	} catch (Exception e) {
		return null;
	}
}
/**
 * Parce the returned result from registration process to rwServer
 * @return boolean
 * @param rwKeysString java.lang.StringBuffer
 */
public boolean ParceResult(StringBuffer rwKeysString) {
	String temp = null;
	StringTokenizer str_token = new StringTokenizer(rwKeysString.toString(), String.valueOf(Constants.Packet_Delimiter));
	try {
		for (int i = 0; i < Number; i++) {
			temp = str_token.nextToken();
			rwKeys[i] = Long.valueOf(temp).longValue();
		}
		return true;
	} catch (Exception e) {
		return false;
	}
}
}

