package model

import (
	"strings"
)

// Command represents the optional "runs" and "args" attributes.
// Each one takes one of two forms:
//   - runs="entrypoint arg1 arg2 ..."
//   - runs=[ "entrypoint", "arg1", "arg2", ... ]
type Command interface {
	isCommand()
	Split() []string
}

// StringCommand represents the string based form of the "runs" or "args"
// attribute.
//   - runs="entrypoint arg1 arg2 ..."
type StringCommand struct {
	Value string
}

// ListCommand represents the list based form of the "runs" or "args" attribute.
//   - runs=[ "entrypoint", "arg1", "arg2", ... ]
type ListCommand struct {
	Values []string
}

func (s *StringCommand) isCommand() {}
func (l *ListCommand) isCommand()   {}

func (s *StringCommand) Split() []string {
	return strings.Fields(s.Value)
}

func (l *ListCommand) Split() []string {
	return l.Values
}