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

package lunatask

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

// Errors returned by TaskStatus operations.
var (
	// ErrInvalidTaskStatus is returned when parsing an unknown task status string.
	ErrInvalidTaskStatus = errors.New("invalid task status")
)

// ParseTaskStatus parses a string to a TaskStatus value (case-insensitive).
// Valid values: "later", "next", "started", "waiting", "completed".
func ParseTaskStatus(str string) (TaskStatus, error) {
	switch strings.ToLower(str) {
	case "later":
		return StatusLater, nil
	case "next":
		return StatusNext, nil
	case "started":
		return StatusStarted, nil
	case "waiting":
		return StatusWaiting, nil
	case "completed":
		return StatusCompleted, nil
	default:
		return "", fmt.Errorf("%w: %q", ErrInvalidTaskStatus, str)
	}
}
