package converter

import (
	log "github.com/cihub/seelog"
	"net"
	"strconv"
	"strings"
)

func MacToInt(IPv4Addr net.HardwareAddr) int64 {
	bits := strings.Split(IPv4Addr.String(), ":")

	b0, _ := strconv.ParseInt(bits[0], 16, 64)
	b1, _ := strconv.ParseInt(bits[1], 16, 64)
	b2, _ := strconv.ParseInt(bits[2], 16, 64)
	b3, _ := strconv.ParseInt(bits[3], 16, 64)
	b4, _ := strconv.ParseInt(bits[4], 16, 64)
	b5, _ := strconv.ParseInt(bits[5], 16, 64)

	var sum int64

	//52242420297
	//52242420297
	sum += int64(b0) << 40
	sum += int64(b1) << 32
	sum += int64(b2) << 24
	sum += int64(b3) << 16
	sum += int64(b4) << 8
	sum += int64(b5)

	return sum
}

func IntToMac(ipInt int64) net.HardwareAddr {

	b0 := strconv.FormatInt((ipInt>>40)&0xff, 16)
	b1 := strconv.FormatInt((ipInt>>32)&0xff, 16)
	b2 := strconv.FormatInt((ipInt>>24)&0xff, 16)
	b3 := strconv.FormatInt((ipInt>>16)&0xff, 16)
	b4 := strconv.FormatInt((ipInt>>8)&0xff, 16)
	b5 := strconv.FormatInt((ipInt & 0xff), 16)

	if len(b0) == 1 {
		b0 = "0" + b0
	}
	if len(b1) == 1 {
		b1 = "0" + b1
	}
	if len(b2) == 1 {
		b2 = "0" + b2
	}
	if len(b3) == 1 {
		b3 = "0" + b3
	}
	if len(b4) == 1 {
		b4 = "0" + b4
	}
	if len(b5) == 1 {
		b5 = "0" + b5
	}

	str := b0 + ":" + b1 + ":" + b2 + ":" + b3 + ":" + b4 + ":" + b5

	log.Debug("mac string: ", str)
	nt, _ := net.ParseMAC(str)

	return nt
}
