package d2helper

// Min returns the lower of two values
func Min(a, b uint32) uint32 {
	if a < b {
		return a
	}
	return b
}

// Max returns the higher of two values
func Max(a, b uint32) uint32 {
	if a > b {
		return a
	}
	return b
}

// MaxInt32 returns the higher of two values
func MaxInt32(a, b int32) int32 {
	if a > b {
		return a
	}
	return b
}

func NextPow2(x int32) int32 {
	result := int32(1)
	for result < x {
		result *= 2
	}
	return result
}

func AbsInt32(a int32) int32 {
	if a < 0 {
		return -a
	}
	return a
}

// MinInt32 returns the higher of two values
func MinInt32(a, b int32) int32 {
	if a < b {
		return a
	}
	return b
}

// BytesToInt32 converts 4 bytes to int32
func BytesToInt32(b []byte) int32 {
	// equivalnt of return int32(binary.LittleEndian.Uint32(b))
	return int32(uint32(b[0]) | uint32(b[1])<<8 | uint32(b[2])<<16 | uint32(b[3])<<24)
}

func IsoToScreen(isoX, isoY, modX, modY int) (int, int) {
	screenX := (isoX - isoY) * 80
	screenY := (isoX + isoY) * 40
	return screenX + modX, screenY + modY
}

func ScreenToIso(sx, sy float64) (float64, float64) {
	x := (sx/80 + sy/40) / 2
	y := (sy/40 - (sx / 80)) / 2
	return x, y
}
