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

package task

import (
	"fmt"

	"git.secluded.site/lune/internal/client"
	"git.secluded.site/lune/internal/ui"
	"git.secluded.site/lune/internal/validate"
	"github.com/spf13/cobra"
)

// DeleteCmd deletes a task. Exported for potential use by shortcuts.
var DeleteCmd = &cobra.Command{
	Use:   "delete ID",
	Short: "Delete a task",
	Long: `Permanently delete a task from Lunatask.

Accepts a UUID or lunatask:// deep link.
Prompts for confirmation unless --force is specified.`,
	Args: cobra.ExactArgs(1),
	RunE: runDelete,
}

func init() {
	DeleteCmd.Flags().BoolP("force", "f", false, "Skip confirmation prompt")
}

func runDelete(cmd *cobra.Command, args []string) error {
	id, err := validate.Reference(args[0])
	if err != nil {
		return err
	}

	force, _ := cmd.Flags().GetBool("force")
	if !force {
		if !ui.Confirm(fmt.Sprintf("Delete task %s?", id)) {
			fmt.Fprintln(cmd.OutOrStdout(), "Cancelled")

			return nil
		}
	}

	apiClient, err := client.New()
	if err != nil {
		return err
	}

	if err := ui.SpinVoid("Deleting task…", func() error {
		_, err := apiClient.DeleteTask(cmd.Context(), id)

		return err
	}); err != nil {
		return err
	}

	fmt.Fprintln(cmd.OutOrStdout(), ui.Success.Render("Task deleted"))

	return nil
}
