package com.seculayer.seql.util;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SearchTimeSpliter {
	public static List<Map<String, String>> makeSearchList(String start_date, String end_date, int interval) throws Exception {
		List<Map<String, String>> schList = new ArrayList<Map<String, String>>();
		
		try {
			Map<String, String> param = null;
			if(start_date==null && end_date==null) {
				param = new HashMap<String, String>();
				param.put("sdt", null);
				param.put("ddt", null);
				param.put("pSearch", "false");
				schList.add(param);
				return schList;
			}
			
			String last_ddt = null;
			String sdt   = null;
			String ddt   = null;
			
			String sec = end_date.substring(12);
			if(sec.equals("59")) {
				end_date = DateTime.addTimes(end_date, 1, "yyyyMMddHHmmss");
			}
			String min_sec = end_date.substring(10);
			if(!min_sec.equals("0000")) {
				last_ddt = end_date;
				if(end_date.substring(12).equals("00")) {
					ddt = DateTime.addTimes(last_ddt, -1, "yyyyMMddHHmmss");
				} else ddt = last_ddt;
				sdt = ddt.substring(0, 10) + "0000";
				if(Long.parseLong(sdt) < Long.parseLong(start_date)) {
					sdt = start_date;
				}
				//System.out.println("> sdt="+sdt+", ddt=" + ddt);
				
				param = new HashMap<String, String>();
				param.put("sdt", sdt);
				param.put("ddt", ddt);
				param.put("pSearch", "false");
				schList.add(param);
			}
			
			boolean isWorking = true;
			while(isWorking) {
				last_ddt = (last_ddt==null?end_date:sdt);
				ddt = DateTime.addTimes(last_ddt, -1, "yyyyMMddHHmmss");
				sdt = DateTime.addTimes(last_ddt, -1*interval*60*60, "yyyyMMddHHmmss");
				if(Long.parseLong(sdt) <= Long.parseLong(start_date)) {
					isWorking = false;
					sdt = start_date;
				}
				if(Long.parseLong(ddt) < Long.parseLong(start_date)) continue;
				//logger.debug("> sdt="+sdt+", ddt=" + ddt);
				
				param = new HashMap<String, String>();
				param.put("sdt", sdt);
				param.put("ddt", ddt);
				param.put("pSearch", String.valueOf(sdt.substring(10).equals("0000")));
				
				schList.add(param);
			}
		} catch(Exception e) {
			throw e;
		}
		return schList;
	}
	
	public static List<Map<String, String>> makeSearchListDay(String start_date, String end_date, int interval) throws Exception {
		List<Map<String, String>> schList = new ArrayList<Map<String, String>>();
		
		try {
			Map<String, String> param = null;
			if(start_date==null && end_date==null) {
				param = new HashMap<String, String>();
				param.put("sdt", null);
				param.put("ddt", null);
				param.put("pSearch", "false");
				schList.add(param);
				return schList;
			}
			
			String last_ddt = null;
			String sdt   = null;
			String ddt   = null;
			
			String sec = end_date.substring(10);
			if(sec.equals("5959")) {
				end_date = DateTime.addTimes(end_date, 1, "yyyyMMddHHmmss");
			}
			String min_sec = end_date.substring(8);
			if(!min_sec.equals("000000")) {
				last_ddt = end_date;
				if(end_date.substring(10).equals("0000")) {
					ddt = DateTime.addTimes(last_ddt, -1, "yyyyMMddHHmmss");
				} else ddt = last_ddt;
				sdt = ddt.substring(0, 8) + "000000";
				if(Long.parseLong(sdt) < Long.parseLong(start_date)) {
					sdt = start_date;
				}
				//System.out.println("> sdt="+sdt+", ddt=" + ddt);
				
				param = new HashMap<String, String>();
				param.put("sdt", sdt);
				param.put("ddt", ddt);
				param.put("pSearch", "false");
				schList.add(param);
			}
			
			boolean isWorking = true;
			while(isWorking) {
				last_ddt = (last_ddt==null?end_date:sdt);
				ddt = DateTime.addTimes(last_ddt, -1, "yyyyMMddHHmmss");
				sdt = DateTime.addTimes(last_ddt, -1*interval*60*60*24, "yyyyMMddHHmmss");
				if(Long.parseLong(sdt) <= Long.parseLong(start_date)) {
					isWorking = false;
					sdt = start_date;
				}
				if(Long.parseLong(ddt) < Long.parseLong(start_date)) continue;
				//logger.debug("> sdt="+sdt+", ddt=" + ddt);
				
				param = new HashMap<String, String>();
				param.put("sdt", sdt);
				param.put("ddt", ddt);
				param.put("pSearch", String.valueOf(sdt.substring(10).equals("0000")));
				
				schList.add(param);
			}
		} catch(Exception e) {
			throw e;
		}
		return schList;
	}
	
	public static void main(String[] args) {
		try {
			//Hour
			List<Map<String, String>> list = makeSearchList("20150410081000", "20150416095959", 3);
			//Day
			list = makeSearchListDay("20150410081000", "20150416095959", 1);
			
			for(Map<String, String> m:list) {
				System.out.println("> sdt="+m.get("sdt")+", ddt=" + m.get("ddt")+", pSearch=" + m.get("pSearch"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}