package com.ps.visualization.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.PortsinfoScadaDao;
import com.ps.visualization.dao.ProtocolProgressDao;
import com.ps.visualization.service.PortsinfoService;
import com.ps.visualization.vo.Portsinfo;

@Repository(value = "portsinfoService")
public class PortsinfoServiceImpl extends BaseServiceImpl<Portsinfo, Integer>
		implements PortsinfoService {

	@Resource(name = "portsinfoDao")
	private PortsinfoDao portsinfoDao;
	@Resource(name = "protocolProgressDao")
	private ProtocolProgressDao protocolProgressDao;
	@Resource(name = "portsinfoScadaDao")
	private PortsinfoScadaDao portsinfoScadaDao;

	public List<Object> latlongInfo = new ArrayList<Object>();
	public List<Object> latlongInfoChina = new ArrayList<Object>();

	public List<Object> getLatlongInfo() {
		return latlongInfo;
	}

	public void setLatlongInfo(List<Object> latlongInfo) {
		this.latlongInfo = latlongInfo;
	}

	public List<Object> getLatlongInfoChina() {
		return latlongInfoChina;
	}

	public void setLatlongInfoChina(List<Object> latlongInfoChina) {
		this.latlongInfoChina = latlongInfoChina;
	}

	@Override
	public BaseDao<Portsinfo, Integer> getBaseDao() {
		// TODO Auto-generated method stub
		return portsinfoDao;
	}

	@Override
	public List<Object> realTimeScanInfo(String[] protocolGroup) {
		// TODO Auto-generated method stub
		latlongInfo.clear();
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> rtsiList = portsinfoDao.realTimeScanInfo(protocolGroup);

		for (Object[] objArray : rtsiList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			HashMap<String, Object> currentMapL = new HashMap<String, Object>();
			currentMap.put("name", objArray[0]);
			currentMap.put("port", objArray[1]);
//			currentMap.put("types", objArray[2]);
			currentMap.put("build_date", objArray[2]);
			currentMap.put("ip", objArray[3]);
			currentMap.put("country", objArray[4]);
			currentMap.put("city", objArray[5]);
			currentMapL.put("latitude", objArray[6]);
			currentMapL.put("longitude", objArray[7]);
			latlongInfo.add(currentMapL);
			returnList.add(currentMap);
		}

		return returnList;

	}

	@Override
	public List getProtocolCountryRelation(String[] protocolGroup) {
		// TODO Auto-generated method stub
		List<Object> returnList = new ArrayList<Object>();
		List<ArrayList<Object>> returnListOri = new ArrayList<ArrayList<Object>>();
		List<Object[]> rtsiList = portsinfoDao
				.getProtocolCountryRelation(protocolGroup);
		List<Object> country9List = portsinfoDao
				.getProtocolCountry_countryTop9(protocolGroup);
		List<Object> protocol21List = protocolProgressDao.getProtocolName();

		for (Object[] objArray : rtsiList) {
			ArrayList<Object> currentList = new ArrayList<Object>();
			currentList.add(objArray[0]);
			/*
			 * for(Object countryName : country9List){
			 * if(objArray[1].toString()countryName)
			 * 
			 * 
			 * }
			 */
			if (objArray[1].toString().length() <= 0)
				currentList.add("other");
			else
				currentList.add(objArray[1]);
			currentList.add(objArray[2]);
			currentList.add("0");
			returnListOri.add(currentList);
		}
		// 解析合并相同国家的数据
		country9List.add("other");
		int otherCountryNum = 0;
		// int countreturn = 0;
		List<ArrayList<Object>> returnListPart = new ArrayList<ArrayList<Object>>();
		for (ArrayList<Object> returnItem : returnListOri) {
			for (Object country : country9List) {
				if (returnItem.get(1).toString()
						.equalsIgnoreCase(country.toString())) {
					ArrayList<Object> tempreturnItem = new ArrayList<Object>();
					tempreturnItem.add(returnItem.get(1));
					tempreturnItem.add(returnItem.get(0));
					tempreturnItem.add(returnItem.get(2));
					tempreturnItem.add(returnItem.get(3));

					returnList.add(tempreturnItem);
				} else {
					returnListPart.add((ArrayList<Object>) returnItem.clone());

					// otherCountryNum += Integer.parseInt(returnItem.get(2)
					// .toString());
					// returnItem.set(2, otherCountryNum);
					// returnListOri.set(countreturn, returnItem);

				}
				// if
				// (!returnItem.get(1).toString().equalsIgnoreCase(country.toString()))
				// {
				// otherCountryNum +=
				// Integer.parseInt(returnItem.get(2).toString());
				// returnItem.set(2, otherCountryNum);
				// returnListOri.set(countreturn, returnItem);
				// }
			}
			// countreturn++;
		}
		ArrayList<Object> returnLast = new ArrayList<Object>();
		Integer othernNumItem = 0;
		HashMap<String, Object> myMap = new HashMap<String, Object>();
		for (int j = 0; j < returnListPart.size(); j++) {
			// returnLast.set(, element)
			for (int i = 0; i < protocol21List.size(); i++) {
				if (returnListPart.get(j).get(0).toString()
						.equals(protocol21List.get(i).toString())) {
					if (myMap.containsKey(protocol21List.get(i).toString())) {
						Integer myNum = Integer.parseInt(myMap.get(
								protocol21List.get(i).toString()).toString());
						myNum += Integer.parseInt(returnListPart.get(j).get(2)
								.toString());
					} else {
						myMap.put(protocol21List.get(i).toString(),
								returnListPart.get(j).get(2));
					}
					othernNumItem += othernNumItem;
				}
			}
		}
		for (String str : myMap.keySet()) {
			ArrayList<Object> myList = new ArrayList<Object>();
			myList.add("other");
			myList.add(str);

			myList.add(Integer.parseInt(myMap.get(str).toString()));
			myList.add(0);
			returnList.add(myList);
		}

		return returnList;
	}

	@Override
	public List<Object> realTimeScanInfoChina(String[] protocolGroup) {
		// TODO Auto-generated method stub
		latlongInfoChina.clear();
		List<Object> returnList = new ArrayList<Object>();
		List<Object[]> rtsiList = portsinfoDao
				.realTimeScanInfoChina(protocolGroup);

		for (Object[] objArray : rtsiList) {
			HashMap<String, Object> currentMap = new HashMap<String, Object>();
			HashMap<String, Object> currentMapL = new HashMap<String, Object>();
			currentMap.put("name", objArray[0]);
			currentMap.put("port", objArray[1]);
			currentMap.put("types", objArray[2]);
			currentMap.put("build_date", objArray[3]);
			currentMap.put("ip", objArray[4]);
			currentMap.put("country", objArray[5]);
			currentMap.put("regname", objArray[6]);
			currentMapL.put("latitude", objArray[7]);
			currentMapL.put("longitude", objArray[8]);
			latlongInfoChina.add(currentMapL);
			returnList.add(currentMap);
		}

		return returnList;
	}

	@Override
	public List getCountryCityHotAboutScada() {
		// TODO Auto-generated method stub
		List<Object[]> cityHotGrapyhList = portsinfoScadaDao
				.getCountryCityHotAboutScada();
		List<Object> returnList = new ArrayList<Object>();
		for (Object[] ObjArray : cityHotGrapyhList) {
			Map<Object, Object> m = new HashMap<Object, Object>();
			m.put("name", ObjArray[0]);
			m.put("value", Integer.parseInt(ObjArray[1].toString()));
			returnList.add(m);
		}
		return returnList;
	}
}
