package cn.net.cpzslibs.prot;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;

import cn.net.cpzslibs.address.AddressUtil;


/**
 * 这个协议被1304替代
 * 
 * @author zwj
 * 
 *         2015-4-13
 */
@Deprecated
public class Prot14FirstSaleInfo extends ProtBase {

	private Map<String, String> map14;
	private boolean isFirst;

	/**
	 * 14.和1401.云南汽配。获取第一次消费信息(消费地址和时间) 消息处理 第一次消费，上传了地址，服务器返回刚上传的地址
	 * 
	 * @param dos
	 * @param iLabel
	 *            String的id号，16位普通，20位去掉前4位作为iConsCheckCode
	 * @throws IOException
	 */
	private void sendProt(DataOutputStream dos, short iTaskCode, long iLabel,
			int SaleAreaCode) throws IOException {
		short bodySize = countBodySize(iLabel, SaleAreaCode);
		sendHeader(dos, iTaskCode, bodySize);
		sendiLabel(dos, iLabel);
		sendiAreaCode(dos, SaleAreaCode);
		sendCheckCode(dos);
	}

	/**
	 * 14协议被1303替代<br/>
	 * 14.获取第一次消费信息(消费地址和时间) 消息处理 第一次消费，上传了地址，服务器返回刚上传的地址
	 * 
	 * @param dos
	 * @param dis
	 * @param iLabelId
	 * @param ConsAreaCode
	 *            目前所在地
	 * @return
	 * @throws IOException
	 */
	@Deprecated
	private void dealFirstSaleInfo(DataOutputStream dos, DataInputStream dis,
			long iLabelId, int lbsAreaCode) throws IOException {
		recProt(dos, dis, (short) 14, iLabelId, lbsAreaCode);
	}

	/**
	 * 
	 * 1401号协议被1304替代<br/>
	 * 2015-04-13
	 * 
	 * @param dos
	 * @param dis
	 * @param iLabelId
	 * @return
	 * @throws IOException
	 */
	@Deprecated
	private void dealFirstSaleInfoYunCar(DataOutputStream dos,
			DataInputStream dis, long iLabelId, int lbsAreaCode)
			throws IOException {
		recProt(dos, dis, (short) 1401, iLabelId, lbsAreaCode);
	}

	/**
	 * 是否第一次消费，需改正 true：第一次，false：非第一次
	 */
	private static final String kIsFirstCons = "ISFIRSTCONS";
	/**
	 * 第一次消费时间，需更改
	 */
	private static final String kFirstConsDate = "FIRST_QUERY_DATE";
	/**
	 * 第一次消费地点，需更改
	 */
	private static final String kFirstConsAddress = "FIRST_CONS_ADDRESS";

	/**
	 * 14号协议升级模式，兼容1401号协议
	 * <p>
	 * 2014-11-4下午3:22:07
	 * </p>
	 * 
	 * @param dos
	 * @param dis
	 * @param iTaskCode
	 * @param iLabelId
	 * @param mHandler
	 * @return
	 * @throws IOException
	 */
	private void recProt(DataOutputStream dos, DataInputStream dis,
			short iTaskCode, long iLabelId, int lbsAreaCode) throws IOException {

		sendProt(dos, iTaskCode, iLabelId, lbsAreaCode);
		recHeader(dis);
		debugLog(iTaskCode, toStringRecHeader());
		if (isTaskCode(iTaskCode)) {
			// 任务代码正确
			short iIsFirstQuery = dis.readShort();
			int iFirstConsArea = reciAreadCode(dis);
			int iFirstConsDate = dis.readInt();
			int iFirstConsTime = dis.readInt();

			recCheckCode(dis);
			String date = String.valueOf(iFirstConsDate);
			String time = String.valueOf(iFirstConsTime);
			// 时间
			String firstConsDate = formatDate(date, time);
			// 消费地点
			String firstConsAddress = AddressUtil
					.searchCityNameByNum(iFirstConsArea);

			Map<String, String> map = new HashMap<String, String>();
			map.put(kFirstConsAddress, firstConsAddress);
			map.put(kFirstConsDate, firstConsDate);
			// 返回正确信息
			setSuccess(true);
			if (iIsFirstQuery == 1) {
				// 1第一次查询
				isFirst = true;
			} else {
				// 不是第一次消费，传递消费地点和时间
				isFirst = false;
			}
			this.map14 = map;
		} else {
			// 错误，返回
			recFFFF(dis, iTaskCode);
		}
	}

	/**
	 * <br/>
	 * 2015-3-18下午3:21:10
	 * 
	 * @return
	 */
	private Map<String, String> getMap14() {
		return map14;
	}

	/**
	 * <br/>
	 * 2015-3-25下午1:26:41
	 * 
	 * @return true:第一次消费<br/>
	 *         false:多次消费<br/>
	 */
	private boolean isFirst() {
		return isFirst;
	}

	/**
	 * 2014年7月2日 11:49:46 修正时间,当时间为10点前，会出错，这里修正了 获取现在时间 yyyyMMddHHmmss===>
	 * yyyy-MM-dd HH:mm:ss
	 * 
	 * @return 返回时间类型 yyyy-MM-dd HH:mm:ss
	 */
	private String formatDate(String date, String time) {
		time = correctionTime(time);
		String str = date + time;
		String retStr = "";
		SimpleDateFormat sf1 = new SimpleDateFormat("yyyyMMddHHmmss");

		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		try {
			retStr = formatter.format(sf1.parse(str));
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return retStr;

	}

	/**
	 * 传递进来的字符串不足为6位，补足六位 2014-7-2上午10:32:37
	 * 
	 * @param time
	 */
	private String correctionTime(String time) {
		StringBuffer sb = new StringBuffer();
		if (time.length() < 6) {
			for (int i = 0; i < (6 - time.length()); i++) {
				sb.append("0");
			}
			sb.append(time);
		} else {
			sb.append(time);
		}
		return sb.toString();
	}
}
