package com.pleuvoir.tookit;

import java.util.List;

import com.pleuvoir.time.DateUtil;



/**
 * 简单输出日志
 * @author pleuvoir
 *
 */
public class DevLog{
	
	/** 日志占位符 */
	private static final String PLACEHOLDER = "{}";
	
	/** 空格 */
	public static final String BLANK_LINE = " ";
	
	/**
	 * 通过此方法构建实例
	 * @return
	 */
	public static DevLog create(Class<?> clazz) {
		return new DevLog(clazz);
	}
	
	
	/**
	 * 通过此方法构建实例
	 * @return
	 */
	public static DevLog create() {
		return new DevLog();
	}
	
	
	/** 默认的日志标识 */
	private Class<?> defaultClazz = null;
	

	private DevLog(Class<?> defaultClazz) {
		this.defaultClazz = defaultClazz;
	}
	
	
	private DevLog() {}


	/**
	 * 输出日志
	 * @param s
	 */
	public void info(String source) {
		System.out.println(logPrefix() + source);
	}
	
	
	/**
	 * 输出日志 可参考的格式  "姓名:{}，年龄：{}","James Gosling",45
	 * @param source
	 * @param values
	 */
	public void info(String source, Object... values) {
		System.out.println(logPrefix() + readableLog(source, values));
	}
	
	
	/**
	 * 增加日志前缀：标识及当前时间
	 * @return
	 */
	public String logPrefix() {
		String postfix =  DateUtil.nowTime() + BLANK_LINE;
		return defaultClazz == null ? postfix : defaultClazz.getName() + BLANK_LINE + postfix;
	}

	
	/**
	 * 返回可读的日志
	 * @param source 待输出的文本信息 应当包含占位符{}
	 * @param values 占位符对应的值
	 * @return
	 */
	public String readableLog(String source, Object... values) {
		List<String> KeyList = ListUtil.toArrayList(source, PLACEHOLDER);
		if (KeyList.size() != values.length)  throw new IllegalArgumentException("格式有误");
		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < values.length; i++) {
			builder.append(KeyList.get(i)).append(String.valueOf(values[i]));
		}
		return builder.toString();
	}


	
	
}
