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

package note

import (
	"fmt"

	"git.secluded.site/go-lunatask"
	"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 note. Exported for potential use by shortcuts.
var DeleteCmd = &cobra.Command{
	Use:   "delete ID",
	Short: "Delete a note",
	Long: `Delete a note from Lunatask.

Accepts a UUID or lunatask:// deep link.`,
	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 note %s?", id)) {
			fmt.Fprintln(cmd.OutOrStdout(), "Cancelled")

			return nil
		}
	}

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

	note, err := ui.Spin("Deleting note…", func() (*lunatask.Note, error) {
		return apiClient.DeleteNote(cmd.Context(), id)
	})
	if err != nil {
		return err
	}

	fmt.Fprintln(cmd.OutOrStdout(), ui.Success.Render("Deleted note: "+note.ID))

	return nil
}
