package com.cmos.msgframe.admin.service.Impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import com.alibaba.rocketmq.common.namesrv.NamesrvUtil;
import com.alibaba.rocketmq.common.protocol.body.KVTable;
import com.alibaba.rocketmq.tools.admin.DefaultMQAdminExt;
import com.cmos.msgframe.admin.common.AbstractService;
import com.cmos.msgframe.admin.common.ListUtils;
import com.cmos.msgframe.admin.service.INameSrvService;
import com.cmos.msgframe.common.util.Constants;
import com.cmos.msgframe.common.util.OutPutParameter;

@Service("nameService")
public class NameSrvServiceImpl extends AbstractService implements INameSrvService {
	static final Logger logger = LoggerFactory
			.getLogger(NameSrvServiceImpl.class);
	@Override
	public OutPutParameter getKTFornameSrv(String key, int start, int end) throws Exception {
		DefaultMQAdminExt defaultMQAdminExt = getDefaultMQAdminExt();
		OutPutParameter outData = new OutPutParameter();
		List<Map<String, String>> resultList = new ArrayList<Map<String, String>>();
		try {
			defaultMQAdminExt.start();
			KVTable tableKv = defaultMQAdminExt.getKVListByNamespace(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG);
			Map<String, Object> totalMap = new HashMap<String, Object>();
			
			for (Map.Entry<String, String> entry : tableKv.getTable().entrySet()) {
				Map<String, String> tabkeMap = new HashMap<String, String>();
				tabkeMap.put("key",entry.getKey());
				tabkeMap.put("value", entry.getValue());
				resultList.add(tabkeMap);
			}
			if (StringUtils.isNotBlank(key)&&!key.equals("null")) {
				resultList = (List<Map<String, String>>) ListUtils.listFilerMap(resultList, key, false);
			
			}
			totalMap.put("total", resultList.size());
			outData.setBean(totalMap);
			outData.setBeans((List<Map<String, String>>) page(resultList, start, end));
			outData.setReturnCode(Constants.IS_OK);
			return outData;
		} catch (Exception e) {
			outData.setReturnCode(Constants.SYSTEM_ERROR);
			outData.setReturnMessage("获取nameSrv属性出现异常");
			logger.error("获取nameSrv属性出现异常",e);
			return outData;
		}finally{
			shutdownDefaultMQAdminExt(defaultMQAdminExt);
		}
		
	}

	@Override
	public OutPutParameter updateKTFornameSrv(String key, String value)
			throws Exception {
		DefaultMQAdminExt defaultMQAdminExt = getDefaultMQAdminExt();
		OutPutParameter outData = new OutPutParameter();
		try {
			if(StringUtils.isEmpty(key)||key.equals("null")){
				outData.setReturnCode(Constants.SYSTEM_ERROR);
				outData.setReturnMessage("key值不能为空");
				return outData;
			}
			if(StringUtils.isEmpty(value)||value.equals("null")){
				outData.setReturnCode(Constants.SYSTEM_ERROR);
				outData.setReturnMessage("value值不能为空");
				return outData;
			}
			defaultMQAdminExt.start();
			defaultMQAdminExt.createAndUpdateKvConfig(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG, key, value);
			outData.setReturnCode(Constants.IS_OK);
			return outData;
		}catch (Exception e) {
			outData.setReturnCode(Constants.SYSTEM_ERROR);
			outData.setReturnMessage("修改nameSrv属性出现异常");
			logger.error("修改nameSrv属性出现异常",e);
			return outData;
		}finally{
			shutdownDefaultMQAdminExt(defaultMQAdminExt);
		}
	}

	@Override
	public OutPutParameter addKTFornameSrv(String key, String value) throws Exception {
		DefaultMQAdminExt defaultMQAdminExt = getDefaultMQAdminExt();
		OutPutParameter outData = new OutPutParameter();
		try {
			if(StringUtils.isEmpty(key)||key.equals("null")){
				outData.setReturnCode(Constants.SYSTEM_ERROR);
				outData.setReturnMessage("key值不能为空");
				return outData;
			}
			if(StringUtils.isEmpty(value)||value.equals("null")){
				outData.setReturnCode(Constants.SYSTEM_ERROR);
				outData.setReturnMessage("value值不能为空");
				return outData;
			}
			defaultMQAdminExt.start();
			defaultMQAdminExt.createAndUpdateKvConfig(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG, key, value);
			outData.setReturnCode(Constants.IS_OK);
			return outData;
		}catch (Exception e) {
			outData.setReturnCode(Constants.SYSTEM_ERROR);
			outData.setReturnMessage("添加nameSrv属性出现异常");
			logger.error("添加nameSrv属性出现异常",e);
			return outData;
		}finally{
			shutdownDefaultMQAdminExt(defaultMQAdminExt);
		}
	}

	@Override
	public OutPutParameter deleteKTFornameSrv(String key) throws Exception {
		DefaultMQAdminExt defaultMQAdminExt = getDefaultMQAdminExt();
		OutPutParameter outData = new OutPutParameter();
		try {
			if(StringUtils.isEmpty(key)||key.equals("null")){
				outData.setReturnCode(Constants.SYSTEM_ERROR);
				outData.setReturnMessage("key值不能为空");
				return outData;
			}
			defaultMQAdminExt.start();
			defaultMQAdminExt.deleteKvConfig(NamesrvUtil.NAMESPACE_ORDER_TOPIC_CONFIG, key);
			outData.setReturnCode(Constants.IS_OK);
			return outData;
		}catch (Exception e) {
			outData.setReturnCode(Constants.SYSTEM_ERROR);
			outData.setReturnMessage("删除nameSrv属性出现异常");
			logger.error("删除nameSrv属性出现异常",e);
			return outData;
		}finally{
			shutdownDefaultMQAdminExt(defaultMQAdminExt);
		}
	}
	
}
