package ast

import (
	"gopkg.in/yaml.v3"

	"github.com/go-task/task/v3/errors"
)

type Glob struct {
	Glob   string
	Negate bool
}

func (g *Glob) UnmarshalYAML(node *yaml.Node) error {
	switch node.Kind {

	case yaml.ScalarNode:
		g.Glob = node.Value
		return nil

	case yaml.MappingNode:
		var glob struct {
			Exclude string
		}
		if err := node.Decode(&glob); err != nil {
			return errors.NewTaskfileDecodeError(err, node)
		}
		g.Glob = glob.Exclude
		g.Negate = true
		return nil
	}

	return errors.NewTaskfileDecodeError(nil, node).WithTypeMessage("glob")
}