package com.ps.visualization.service.impl;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Repository;

import com.ps.base.dao.BaseDao;
import com.ps.base.service.impl.BaseServiceImpl;
import com.ps.visualization.dao.PortsinfoDao;
import com.ps.visualization.dao.ProtocolProgressDao;
import com.ps.visualization.service.ProtocolProgressService;
import com.ps.visualization.vo.ProtocolProgress;

@Repository(value = "protocolProgressService")
public class ProtocolProgressServiceImpl extends
		BaseServiceImpl<ProtocolProgress, Integer> implements
		ProtocolProgressService {

	@Resource(name = "protocolProgressDao")
	private ProtocolProgressDao protocolProgressDao;
	@Resource(name = "portsinfoDao")
	private PortsinfoDao portsinfoDao;

	// @Resource(name="portsinfoClearDao")
	// private PortsinfoClearDao portsinfoClearDao;

	@Override
	public BaseDao<ProtocolProgress, Integer> getBaseDao() {
		// TODO Auto-generated method stub
		return protocolProgressDao;
	}

	@Override
	public List<Object> getScanProgress(String protocolName) {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao
				.getScanProgress(protocolName);
		List<Object[]> scanningList = portsinfoDao.getScanningProtocol();
		List<Object> totalScanProgress = protocolProgressDao
				.getTotalScanProcess();
		for (Object[] objArray : spList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();

			currentMap.put("protocolName", objArray[0]);
			double rate = 0;
			Object tempObj = objArray[1];
			if (tempObj == null || tempObj == "")
				rate = 0;
			else
				rate = Double.parseDouble(objArray[1].toString());
			DecimalFormat df = new DecimalFormat("#.0000");
			String answer = df.format(rate);
			// double doubleanswer = Double.parseDouble(answer)*100;

			Double rateScan = Double.parseDouble(answer);
			if (rateScan >= 1)
				rateScan = 1.0;
			currentMap.put("progress", rateScan);

			returnList.add(currentMap);
		}
		HashMap<String, Object> currentMap = new HashMap<String, Object>();
		HashMap<String, Object> currentMap1 = new HashMap<String, Object>();
		Object scanningObj = scanningList.get(0);
		currentMap.put("protocolName", scanningObj.toString());
		currentMap.put("progress", 0.0);
		currentMap1.put("protocolName", "totalScanProgress");
		currentMap1.put("progress", totalScanProgress.get(0).toString());
		returnList.add(currentMap);
		returnList.add(currentMap1);
		return returnList;
	}

	@Override
	public List<Object> getScanTopKey(String protocolName,
			String[] protocolGroup) {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao.getScanTopKey(protocolName,
				protocolGroup);
		for (Object[] objArray : spList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			currentMap.put("protocolName", objArray[0]);
			currentMap.put("exist", objArray[1]);
			returnList.add(currentMap);
		}

		return returnList;
	}

	@Override
	public List<Object> getProtocolInfo() {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao.getProtocolInfo();
		for (Object[] objArray : spList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			currentMap.put("protocolName", objArray[0]);
			currentMap.put("done", objArray[1]);
			currentMap.put("exist", objArray[2]);
			returnList.add(currentMap);
		}
		return returnList;
	}

	@Override
	public List<Object> getAllScanRoundLog(String[] protocolGroup) {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao
				.getAllScanRoundLog(protocolGroup);
		for (Object[] objArray : spList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			currentMap.put("protocolDone", objArray[0]);
			currentMap.put("protocolExit", objArray[1]);

			long startTime = Integer.parseInt(objArray[2].toString());
			Calendar c2 = Calendar.getInstance();
			c2.setTimeInMillis(System.currentTimeMillis());
			if (startTime == 0) {
				currentMap.put("continuedTime", 0);
			} else {
				long watch1 = c2.getTimeInMillis();

				long middleTime = (c2.getTimeInMillis() - startTime * 1000) / 1000;// 获取当前时间
				currentMap.put("continuedTime", middleTime);
			}

			Integer.parseInt(portsinfoDao.getExistProtocolNum().get(0)
					.toString());
			currentMap.put("round", objArray[3]);
			currentMap.put("endTime", objArray[4]);
			if (protocolGroup[0] != "") {
				currentMap.put(
						"existProtocolNum",
						Double.parseDouble(portsinfoDao
								.getExistProtocolNum_ics().get(0).toString()));
			} else {
				currentMap.put(
						"existProtocolNum",
						Double.parseDouble(portsinfoDao.getExistProtocolNum()
								.get(0).toString()));
			}

			returnList.add(currentMap);
		}
		return returnList;

	}

	@Override
	public List<Object> getProtocolRate() {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao.getProtocolRate();
		ArrayList<HashMap<String, Object>> noOrderList = new ArrayList<HashMap<String, Object>>();
		for (Object[] objArray : spList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			currentMap.put("protocolName", objArray[0]);
			currentMap.put("exist", objArray[1]);
			currentMap.put("existRate", objArray[2]);
			noOrderList.add(currentMap);
		}

		int size = noOrderList.size(); // 数组大小
		for (int i = 0; i < size - 1; i++) {
			for (int j = i + 1; j < size; j++) {
				if (Double.parseDouble(noOrderList.get(i).get("existRate")
						.toString()) < Double.parseDouble(noOrderList.get(j)
						.get("existRate").toString())) { // 交换两数的位置
					HashMap<String, Object> temp = new HashMap<String, Object>();
					// 记录临时中间值
					temp = (HashMap<String, Object>) noOrderList.get(i).clone();
					noOrderList.set(i, (HashMap<String, Object>) noOrderList
							.get(j).clone());
					noOrderList.set(j, (HashMap<String, Object>) temp.clone());
				}
			}
		}
		HashMap<String, Object> otherHashMap = new HashMap<String, Object>();
		double otherRate = 0;
		for (int i = 0; i < noOrderList.size(); i++) {
			if (i < 10) {
				returnList.add(noOrderList.get(i).clone());
			} else {
				otherRate += Double.parseDouble(noOrderList.get(i)
						.get("existRate").toString());

			}
		}
		otherHashMap.put("other", otherRate);
		returnList.add(otherHashMap);

		return returnList;
	}

	@Override
	public List getProtocolNumRounds() {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> spList = protocolProgressDao.getProtocolNumRounds();
		List<Object> rounds = new ArrayList<Object>();
		List<Object> values = new ArrayList<Object>();

		for (Object[] objArray : spList) {
			rounds.add(objArray[0]);
			values.add(objArray[1]);
		}
		returnList.add(rounds);
		returnList.add(values);
		return returnList;
	}

}
