package com.cmos.msgframe.admin.common;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.springframework.beans.factory.annotation.Autowired;

import com.alibaba.rocketmq.common.constant.PermName;
import com.alibaba.rocketmq.tools.admin.DefaultMQAdminExt;
import com.alibaba.rocketmq.tools.command.SubCommand;


public abstract class AbstractService {

    @Autowired
	protected ConfigureInitializer configureInitializer;


    protected DefaultMQAdminExt getDefaultMQAdminExt() {
        DefaultMQAdminExt defaultMQAdminExt = new DefaultMQAdminExt();
        defaultMQAdminExt.setInstanceName(Long.toString(System.currentTimeMillis()));
        return defaultMQAdminExt;
    }


    protected void shutdownDefaultMQAdminExt(DefaultMQAdminExt defaultMQAdminExt) {
        defaultMQAdminExt.shutdown();
    }


    protected Collection<Option> getOptions(SubCommand subCommand) {
        Options options = new Options();
        subCommand.buildCommandlineOptions(options);
        @SuppressWarnings("unchecked")
        Collection<Option> col = options.getOptions();
        return col;
    }


    protected int translatePerm(String perm) {
        if (perm.toLowerCase().equals("r")) {
            return PermName.PERM_READ;
        }
        else if (perm.toLowerCase().equals("w")) {
            return PermName.PERM_WRITE;
        }
        else {
            return PermName.PERM_READ | PermName.PERM_WRITE;
        }
    }
    protected List<?> page(List list,int start,int end)throws Exception{
    	if(list.size()<start){
    		throw new Exception("分页查询起始位置出现越界，起始位置大于总数据量");
    	}
		return list.subList(start, list.size() > end ? end:list.size());
    	
    }
    protected Map page(Map map,int start,int end)throws Exception{
    	if(map.size()<start){
    		throw new Exception("分页查询起始位置出现越界，起始位置大于总数据量");
    	}
    	TreeMap<String, String> resulTreeMap = new TreeMap<String, String>();
    	 Set<Map.Entry<String, String>> setMap =  map.entrySet();
         List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>();
         list.addAll(setMap);
         list = list.subList(start, list.size() > end ? end:list.size());
         if(list.size()>0){
        	 for (Map.Entry<String, String> entry:list) {
        		 resulTreeMap.put(entry.getKey(), entry.getValue());
        	 }
         }
    	return resulTreeMap;
    	
    }
    public static String frontStringAtLeast(final String str, final int size) {
        if (str != null) {
            if (str.length() > size) {
                return str.substring(0, size);
            }
        }

        return str;
    }
    public static String timeMillisToHumanString2(final long t) {
        Calendar cal = Calendar.getInstance();
        cal.setTimeInMillis(t);
        return String.format("%04d-%02d-%02d %02d:%02d:%02d,%03d",//
                cal.get(Calendar.YEAR),//
                cal.get(Calendar.MONTH) + 1,//
                cal.get(Calendar.DAY_OF_MONTH),//
                cal.get(Calendar.HOUR_OF_DAY),//
                cal.get(Calendar.MINUTE),//
                cal.get(Calendar.SECOND),//
                cal.get(Calendar.MILLISECOND));
    }
}
