package cmd

import (
	"fmt"

	"github.com/ddworken/hishtory/client/data"
	"github.com/ddworken/hishtory/client/hctx"
	"github.com/ddworken/hishtory/client/lib"
	"github.com/spf13/cobra"
)

var verbose *bool

var statusCmd = &cobra.Command{
	Use:   "status",
	Short: "View status info including the secret key which is needed to sync shell history from another machine",
	Run: func(cmd *cobra.Command, args []string) {
		ctx := hctx.MakeContext()
		config := hctx.GetConf(ctx)
		fmt.Printf("hiSHtory: v0.%s\nEnabled: %v\n", lib.Version, config.IsEnabled)
		fmt.Printf("Secret Key: %s\n", config.UserSecret)
		if *verbose {
			fmt.Printf("User ID: %s\n", data.UserId(config.UserSecret))
			fmt.Printf("Device ID: %s\n", config.DeviceId)
			printOnlineStatus(config)
		}
		fmt.Printf("Commit Hash: %s\n", lib.GitCommit)
	},
}

func printOnlineStatus(config *hctx.ClientConfig) {
	if config.IsOffline {
		fmt.Println("Sync Mode: Disabled")
	} else {
		fmt.Println("Sync Mode: Enabled")
		if config.HaveMissedUploads || len(config.PendingDeletionRequests) > 0 {
			fmt.Println("Sync Status: Unsynced (device is offline?)")
			fmt.Printf("  HaveMissedUploads=%v MissedUploadTimestamp=%v len(PendingDeletionRequests)=%v\n", config.HaveMissedUploads, config.MissedUploadTimestamp, len(config.PendingDeletionRequests))
		} else {
			fmt.Println("Sync Status: Synced")
		}
	}
}

func init() {
	rootCmd.AddCommand(statusCmd)
	verbose = statusCmd.Flags().BoolP("verbose", "v", false, "Display verbose hiSHtory information")
}