package args

import (
	"errors"
	"strings"

	"github.com/go-task/task/internal/taskfile"
)

var (
	// ErrVariableWithoutTask is returned when variables are given before any task
	ErrVariableWithoutTask = errors.New("task: variable given before any task")
)

// Parse parses command line argument: tasks and vars of each task
func Parse(args ...string) ([]taskfile.Call, error) {
	var calls []taskfile.Call

	for _, arg := range args {
		if !strings.Contains(arg, "=") {
			calls = append(calls, taskfile.Call{Task: arg})
			continue
		}
		if len(calls) < 1 {
			return nil, ErrVariableWithoutTask
		}

		if calls[len(calls)-1].Vars == nil {
			calls[len(calls)-1].Vars = make(taskfile.Vars)
		}

		pair := strings.SplitN(arg, "=", 2)
		calls[len(calls)-1].Vars[pair[0]] = taskfile.Var{Static: pair[1]}
	}
	return calls, nil
}