package util

import (
	"flag"
	"fmt"
	"net"
	"strings"
)

type ipList []net.IP

func (l *ipList) String() string {
	var sl []string
	for _, ip := range *l {
		sl = append(sl, ip.String())
	}
	return strings.Join(sl, ",")
}

func (l *ipList) Set(value string) error {
	ip := net.ParseIP(value)
	if ip == nil {
		return fmt.Errorf("Unable to parse IP address \"%s\"", value)
	}
	*l = append(*l, ip)
	return nil
}

func IPList(name, help string) *[]net.IP {
	var l ipList
	flag.Var(&l, name, help)
	return (*[]net.IP)(&l)
}

func IPListWithDefault(l []net.IP, deflt string) []net.IP {
	if len(l) == 0 {
		return []net.IP{net.ParseIP(deflt)}
	}
	return l
}