package lib

import (
	"encoding/binary"
	"fmt"
	"io"
)

type DataType uint

const (
	DATA_TYPE_UINT8   DataType = 0x00
	DATA_TYPE_UINT16           = 0x01
	DATA_TYPE_UINT32           = 0x02
	DATA_TYPE_UINT64           = 0x03
	DATA_TYPE_INT8             = 0x10
	DATA_TYPE_INT16            = 0x11
	DATA_TYPE_INT32            = 0x12
	DATA_TYPE_INT64            = 0x13
	DATA_TYPE_FLOAT32          = 0x40
)

func (dt DataType) Size() int {
	switch dt {
	case DATA_TYPE_UINT8:
		return 1
	case DATA_TYPE_UINT16:
		return 2
	case DATA_TYPE_UINT32:
		return 4
	case DATA_TYPE_UINT64:
		return 8
	case DATA_TYPE_INT8:
		return 1
	case DATA_TYPE_INT16:
		return 2
	case DATA_TYPE_INT32:
		return 4
	case DATA_TYPE_INT64:
		return 8
	case DATA_TYPE_FLOAT32:
		return 4
	default:
		return -1
	}
}

func (dt DataType) Read(r io.Reader) (float64, error) {
	switch dt {
	case DATA_TYPE_UINT8:
		var val uint8
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_UINT16:
		var val uint16
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_UINT32:
		var val uint32
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_UINT64:
		var val uint64
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_INT8:
		var val int8
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_INT16:
		var val int16
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_INT32:
		var val int32
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_INT64:
		var val int64
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	case DATA_TYPE_FLOAT32:
		var val float32
		err := binary.Read(r, binary.LittleEndian, &val)
		return float64(val), err
	default:
		return 0.0, fmt.Errorf("Can't decode type %d.", dt)
	}
}
