package opts

import (
	"fmt"

	"github.com/fsouza/go-dockerclient/external/github.com/docker/docker/pkg/ulimit"
)

type UlimitOpt struct {
	values *map[string]*ulimit.Ulimit
}

func NewUlimitOpt(ref *map[string]*ulimit.Ulimit) *UlimitOpt {
	if ref == nil {
		ref = &map[string]*ulimit.Ulimit{}
	}
	return &UlimitOpt{ref}
}

func (o *UlimitOpt) Set(val string) error {
	l, err := ulimit.Parse(val)
	if err != nil {
		return err
	}

	(*o.values)[l.Name] = l

	return nil
}

func (o *UlimitOpt) String() string {
	var out []string
	for _, v := range *o.values {
		out = append(out, v.String())
	}

	return fmt.Sprintf("%v", out)
}

func (o *UlimitOpt) GetList() []*ulimit.Ulimit {
	var ulimits []*ulimit.Ulimit
	for _, v := range *o.values {
		ulimits = append(ulimits, v)
	}

	return ulimits
}
