package fr.zng.xxzx.netty.dispatcher;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;

import fr.zng.xxzx.common.bean.LjflResponse;
import fr.zng.xxzx.common.dao.TdFlowDao;
import fr.zng.xxzx.common.dao.UnoDao;
import fr.zng.xxzx.common.dao.impl.TdFlowDaoImpl;
import fr.zng.xxzx.common.dao.impl.UnoDaoImpl;
import fr.zng.xxzx.common.entity.LjflCheckCardReplyDataEntity;
import fr.zng.xxzx.common.entity.LjflCheckCardReplyEntity;
import fr.zng.xxzx.common.entity.TdFlowEntity;
import fr.zng.xxzx.common.entity.TdSqDataEntity;
import fr.zng.xxzx.common.entity.TdSqReplyDataEntity;
import fr.zng.xxzx.common.entity.UnoEntity;
import fr.zng.xxzx.common.util.CommUtil;
import fr.zng.xxzx.common.util.DateUtil;
import fr.zng.xxzx.mqtt2.Server2;
import fr.zng.xxzx.util.HttpExchangeUtil;

/**
 * 垃圾分类消息处理 - 验证卡号
 * 
 * @author lyf
 *
 */
public class LjflCheckCardHandler implements HttpHandler {

	public Logger logger = Logger.getLogger(LjflCheckCardHandler.class);

	public LjflCheckCardHandler() {
	}

	@Override
	public void handle(HttpExchange exchange) {

		// 定义返回结果
		LjflCheckCardReplyEntity result = new LjflCheckCardReplyEntity();
		result.errcode = 20000;
		result.errmsg = "操作失败";
		/**
		 * 解析请求参数与地址信息
		 */
		String requestMethod = exchange.getRequestMethod();
		logger.info("requestMethod=" + requestMethod);
		if (requestMethod.equalsIgnoreCase("GET") || requestMethod.equalsIgnoreCase("POST")) {
			InputStream inputStream = exchange.getRequestBody();
			// 解析入参
			Map<String, String> params = HttpExchangeUtil.getParamersCheckCard(inputStream);
			System.out.println("params: " + params);

			if (StringUtils.isNotBlank(params.get("cardNo"))) {
				String cardNo = params.get("cardNo");
				System.out.println("cardNo: " + cardNo);
				// 是否通过
				int errcode = 2;
				String errmsg = "未知失败";
				String bankno = cardNo;
				if (cardNo.length() >= 24) {
					bankno = cardNo.substring(0, 24);
				}
				// 该用户是否注册
				UnoDao dao = new UnoDaoImpl();
				UnoEntity en = dao.getVillageUserCinfoByUno(bankno);
				if (en != null) {
					errcode = 0;
					errmsg = "操作成功";
					// TODO
					JSONObject jsonObject = new JSONObject();
					result.errcode = errcode;
					result.errmsg = errmsg;
					LjflCheckCardReplyDataEntity dataEn = new LjflCheckCardReplyDataEntity();
					dataEn.integralBalance = Integer.parseInt(en.getPoint()+"");
					dataEn.name = en.getName();
					dataEn.isFace = 0 ;
					dataEn.phone = en.getTel();
					result.data = jsonObject.toJSONString(dataEn);
				} else {
					result.errcode = 20003;
					result.errmsg = "用户不存在";
				}
			} else {
				result.errcode = 20003;
				result.errmsg = "用户不存在";
			}
		}

		// 结果返回给请求端
		Headers headers = exchange.getResponseHeaders();
		headers.add("Access-Control-Allow-Origin", "*");
		headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
		headers.add("Access-Control-Allow-Headers", "Content-Type");
		headers.add("Content-Type", "application/json");
		String data = "";
		OutputStream out = exchange.getResponseBody(); // 获得输出流
		try {
			exchange.sendResponseHeaders(200, data.length());
			out.write(JSON.toJSONString(result).getBytes());
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 设置响应头属性及响应信息的长度
			try {
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 审核用户名
	 * 
	 * @param uno
	 * @return
	 */
	private Boolean checkUno(String uno) {
		UnoDao dao = new UnoDaoImpl();
		UnoEntity en = dao.getVillageUserCinfoByUno(uno);
		if (en != null) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 插入投递记录
	 * 
	 * @return
	 */
	private int InsertTdFlow(TdFlowEntity en) {
		TdFlowDao dao = new TdFlowDaoImpl();
		return dao.insert(en);
	}

}
