package com.github.adejanovski.cassandra.jdbc.codec;

import java.math.BigDecimal;
import java.nio.ByteBuffer;

import org.apache.cassandra.utils.ByteBufferUtil;

import com.datastax.driver.core.DataType;
import com.datastax.driver.core.ProtocolVersion;
import com.datastax.driver.core.TypeCodec;
import com.datastax.driver.core.exceptions.InvalidTypeException;

public class BigDecimalToBigintCodec extends TypeCodec<BigDecimal> {

	public BigDecimalToBigintCodec(Class<BigDecimal> javaClass) {
		super(DataType.bigint(), javaClass);
	}

	@Override
	public ByteBuffer serialize(BigDecimal paramT, ProtocolVersion paramProtocolVersion) throws InvalidTypeException {
		if (paramT == null) {
			return null;
		}
		return ByteBufferUtil.bytes(paramT.longValue());
	}

	@Override
	public BigDecimal deserialize(ByteBuffer paramByteBuffer, ProtocolVersion paramProtocolVersion) throws InvalidTypeException {
		if (paramByteBuffer == null) {
			return null;

		}
		// always duplicate the ByteBuffer instance before consuming it!
		Long value = ByteBufferUtil.toLong(paramByteBuffer.duplicate());
		return new BigDecimal(value);
	}

	@Override
	public BigDecimal parse(String paramString) throws InvalidTypeException {
		return BigDecimal.valueOf(Long.valueOf(paramString));
	}

	@Override
	public String format(BigDecimal paramT) throws InvalidTypeException {
		return String.valueOf(paramT);
	}

}