package main

import (
	"fmt"
	"time"

	wire "github.com/tendermint/go-wire"
)

func main() {

	encode(uint8(6))
	encode(uint32(6))
	encode(int8(-6))
	encode(int32(-6))
	Break()
	encode(uint(6))
	encode(uint(70000))
	encode(int(0))
	encode(int(-6))
	encode(int(-70000))
	Break()
	encode("")
	encode("a")
	encode("hello")
	encode("¥")
	Break()
	encode([4]int8{1, 2, 3, 4})
	encode([4]int16{1, 2, 3, 4})
	encode([4]int{1, 2, 3, 4})
	encode([2]string{"abc", "efg"})
	Break()
	encode([]int8{})
	encode([]int8{1, 2, 3, 4})
	encode([]int16{1, 2, 3, 4})
	encode([]int{1, 2, 3, 4})
	encode([]string{"abc", "efg"})
	Break()

	timeFmt := "Mon Jan 2 15:04:05 -0700 MST 2006"
	t1, _ := time.Parse(timeFmt, timeFmt)
	n := (t1.UnixNano() / 1000000.) * 1000000
	encode(n)
	encode(t1)

	t2, _ := time.Parse(timeFmt, "Thu Jan 1 00:00:00 -0000 UTC 1970")
	encode(t2)

	t2, _ = time.Parse(timeFmt, "Thu Jan 1 00:00:01 -0000 UTC 1970")
	fmt.Println("N", t2.UnixNano())
	encode(t2)
	Break()
	encode(struct {
		A int
		B string
		C time.Time
	}{
		4,
		"hello",
		t1,
	})
}

func encode(i interface{}) {
	Println(wire.BinaryBytes(i))

}

func Println(b []byte) {
	s := "["
	for _, x := range b {
		s += fmt.Sprintf("0x%.2X, ", x)
	}
	s = s[:len(s)-2] + "]"
	fmt.Println(s)
}

func Break() {
	fmt.Println("------")
}