package task

import (
	"fmt"

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

func (e *Executor) GetHash(t *taskfile.Task) (string, error) {
	r := t.Run
	if r == "" {
		r = e.Taskfile.Run
	}

	var h hash.HashFunc
	switch r {
	case "always":
		h = hash.Empty
	case "once":
		h = hash.Name
	case "when_changed":
		h = hash.Hash
	default:
		return "", fmt.Errorf(`task: invalid run "%s"`, r)
	}
	return h(t)
}