package opts

import (
	"fmt"

	"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
}
