// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
//
// SPDX-License-Identifier: AGPL-3.0-or-later

package lunatask

import (
	"errors"
	"fmt"
	"strings"
)

// Errors returned by Motivation operations.
var (
	// ErrInvalidMotivation is returned when parsing an unknown motivation string.
	ErrInvalidMotivation = errors.New("invalid motivation")
)

// ParseMotivation parses a string to a Motivation value (case-insensitive).
// Valid values: "unknown", "must", "should", "want".
func ParseMotivation(str string) (Motivation, error) {
	switch strings.ToLower(str) {
	case "unknown":
		return MotivationUnknown, nil
	case "must":
		return MotivationMust, nil
	case "should":
		return MotivationShould, nil
	case "want":
		return MotivationWant, nil
	default:
		return "", fmt.Errorf("%w: %q", ErrInvalidMotivation, str)
	}
}
