package packngo

const osBasePath = "/operating-systems"

// OSService interface defines available operating_systems methods
type OSService interface {
	List() ([]OS, *Response, error)
}

type osRoot struct {
	OperatingSystems []OS `json:"operating_systems"`
}

// OS represents a Packet operating system
type OS struct {
	Name    string `json:"name"`
	Slug    string `json:"slug"`
	Distro  string `json:"distro"`
	Version string `json:"version"`
}
func (o OS) String() string {
	return Stringify(o)
}

// OSServiceOp implements OSService 
type OSServiceOp struct {
	client *Client
}

// List returns all available operating systems 
func (s *OSServiceOp) List() ([]OS, *Response, error) {
	req, err := s.client.NewRequest("GET", osBasePath, nil)
	if err != nil {
		return nil, nil, err
	}

	root := new(osRoot)
	resp, err := s.client.Do(req, root)
	if err != nil {
		return nil, resp, err
	}

	return root.OperatingSystems, resp, err
}
