package frame.data.convert;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;

import frame.data.Variant;
import frame.util.Util;


public class DateTranslator extends Convertor {

	private static String DefaultFormat = "yyyy-MM-dd HH:mm:ss";
			
	
	public Object loadToObject(String value) throws Exception {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.parse(value);
	}
	
	public Variant loadToVariant(String value) throws Exception {
		if (value == null) {
			return new Variant();
		}
		
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		Date date = sdf.parse(value);
		
		return new Variant(date);
	}

	public String toString(Object value) throws Exception {
		if (value == null) {
			return null;
		}
		
		if (value instanceof Date) {
			Date date = (Date)value;
			
			return Util.DataTimeToString(date, format);
		}
		
		return value.toString();
	}
	
	public String toSqlString(Object value) throws Exception {
		Date date = new Date();
		return Util.newDBDateString(date);
	}
	
	public String toSqlString(String prefix, Object value, String suffix) throws Exception	{
		return toSqlString(value);
	}

	public String toJSONString(Object value) throws Exception {
		if (value == null) {
			return "null";
		}
		
		if (value instanceof Date) {
			Date date = (Date)value;
			
			return "\"" + Util.DataTimeToString(date, format) + "\"";
		}
		
		return "\"" + value.toString() + "\"";
	}
	
	public void setFormat(String format) {
		if (Util.isEmptyStr(format)) {
			this.format = DefaultFormat;
		}
		else {
			this.format = format;
		}
	}

	@Override
	public Integer toInteger(Object object) throws Exception {
		throw new Exception("can not translate date (" + object + ") to Integer");
	}

	@Override
	public Double toDouble(Object object) throws Exception {
		throw new Exception("can not translate date (" + object + ") to Double");
	}

	@Override
	public BigDecimal toBigDecimal(Object object) throws Exception {
		throw new Exception("can not translate date (" + object + ") to BigDecimal");
	}
	
	@Override
	public Boolean toBoolean(Object object) throws Exception {
		throw new Exception("can not translate date (" + object + ") to BigDecimal");
	}

	@Override
	public Date toDate(Object object) throws Exception {
		return (Date) object;
	}

	@Override
	public Object toSelfType(Object value) throws Exception {
		return toDate(value);
	}

}