package util

import (
	"net"

	"github.com/juju/errors"
)

// GetLocalIP returns un-loop localip.
func GetLocalIP() (ip string, err error) {
	addrs, err := net.InterfaceAddrs()
	if err != nil {
		return "", errors.Trace(err)
	}

	for _, addr := range addrs {
		switch tp := addr.(type) {
		case *net.IPNet:
			if tp.IP.IsGlobalUnicast() && tp.IP.To4() != nil {
				ip = tp.IP.String()
				return
			}
		}
	}

	err = errors.New("failed to get local ip")
	return
}
