package commands

import (
	"context"
	"fmt"
	"time"

	"github.com/iomodo/staff/tm"
	"github.com/spf13/cobra"
)

var createTaskCmd = &cobra.Command{
	Use:   "create-task [title]",
	Short: "Create a new task",
	Long: `Create a new task with specified title, description, and priority.

Examples:
  staff create-task "Add user authentication"
  staff create-task "Fix login bug" --description "Users cannot log in with Google OAuth" --priority high --assignee backend-engineer`,
	Args: cobra.ExactArgs(1),
	RunE: runCreateTask,
}

var (
	taskDescription string
	taskPriority    string
	taskAssignee    string
	taskDueDate     string
)

func init() {
	createTaskCmd.Flags().StringVarP(&taskDescription, "description", "d", "", "Task description")
	createTaskCmd.Flags().StringVarP(&taskPriority, "priority", "p", "medium", "Task priority (low, medium, high)")
	createTaskCmd.Flags().StringVarP(&taskAssignee, "assignee", "a", "", "Agent to assign the task to")
	createTaskCmd.Flags().StringVar(&taskDueDate, "due", "", "Due date (RFC3339 format, e.g., 2024-01-15T10:00:00Z)")
}

func runCreateTask(cmd *cobra.Command, args []string) error {
	title := args[0]

	// Validate priority
	priority := tm.TaskPriority(taskPriority)
	if priority != tm.PriorityLow && priority != tm.PriorityMedium && priority != tm.PriorityHigh {
		return fmt.Errorf("invalid priority: %s (must be low, medium, or high)", taskPriority)
	}

	// Parse due date if provided
	var dueDate *time.Time
	if taskDueDate != "" {
		parsed, err := time.Parse(time.RFC3339, taskDueDate)
		if err != nil {
			return fmt.Errorf("invalid due date format: %s (expected RFC3339)", taskDueDate)
		}
		dueDate = &parsed
	}

	// Create task request
	req := &tm.TaskCreateRequest{
		Title:       title,
		Description: taskDescription,
		OwnerID:     "user", // MVP: single user
		Priority:    priority,
		DueDate:     dueDate,
	}

	// Create the task
	task, err := taskManager.CreateTask(context.Background(), req)
	if err != nil {
		return fmt.Errorf("failed to create task: %w", err)
	}

	fmt.Printf("Task created successfully!\n")
	fmt.Printf("ID: %s\n", task.ID)
	fmt.Printf("Title: %s\n", task.Title)
	fmt.Printf("Priority: %s\n", task.Priority)
	fmt.Printf("Status: %s\n", task.Status)

	// Auto-assign if assignee is specified
	if taskAssignee != "" {
		task.Assignee = taskAssignee
		if err := taskManager.UpdateTask(task); err != nil {
			fmt.Printf("Warning: Failed to assign task to %s: %v\n", taskAssignee, err)
		} else {
			fmt.Printf("Assigned to: %s\n", taskAssignee)
		}
	}

	return nil
}
