package tm

import (
	"errors"
	"fmt"
)

// Common task management errors
var (
	ErrTaskNotFound         = errors.New("task not found")
	ErrOwnerNotFound        = errors.New("owner not found")
	ErrInvalidTaskStatus    = errors.New("invalid task status")
	ErrInvalidTaskPriority  = errors.New("invalid task priority")
	ErrTaskAlreadyCompleted = errors.New("task is already completed")
	ErrTaskAlreadyArchived  = errors.New("task is already archived")
	ErrTaskNotStarted       = errors.New("task is not started")
	ErrTaskNotInProgress    = errors.New("task is not in progress")
	ErrInvalidOwner         = errors.New("invalid owner")
	ErrInvalidTaskData      = errors.New("invalid task data")
)

// TaskError represents a task-specific error with additional context
type TaskError struct {
	TaskID string
	Op     string
	Err    error
}

func (e *TaskError) Error() string {
	if e.TaskID != "" {
		return fmt.Sprintf("task %s: %s: %v", e.TaskID, e.Op, e.Err)
	}
	return fmt.Sprintf("%s: %v", e.Op, e.Err)
}

func (e *TaskError) Unwrap() error {
	return e.Err
}

// NewTaskError creates a new TaskError
func NewTaskError(taskID, op string, err error) *TaskError {
	return &TaskError{
		TaskID: taskID,
		Op:     op,
		Err:    err,
	}
}
