package cmd

import (
	"fmt"

	"github.com/lbryio/reflector.go/publish"

	"github.com/lbryio/lbry.go/v2/lbrycrd"

	log "github.com/sirupsen/logrus"
	"github.com/spf13/cobra"
)

func init() {
	var cmd = &cobra.Command{
		Use:   "publish FILE",
		Short: "Publish a file",
		Args:  cobra.ExactArgs(1),
		Run:   publishCmd,
	}
	cmd.Flags().String("name", "", "Claim name")
	cmd.Flags().String("title", "", "Title of the content")
	cmd.Flags().String("description", "", "Description of the content")
	cmd.Flags().String("author", "", "Content author")
	cmd.Flags().String("tags", "", "Comma-separated list of tags")
	cmd.Flags().Int64("release-time", 0, "original public release of content, seconds since UNIX epoch")
	rootCmd.AddCommand(cmd)
}

func publishCmd(cmd *cobra.Command, args []string) {
	var err error

	claimName := mustGetFlagString(cmd, "name")
	if claimName == "" {
		log.Errorln("--name required")
		return
	}

	path := args[0]

	client, err := lbrycrd.NewWithDefaultURL(nil)
	checkErr(err)

	tx, txid, err := publish.Publish(
		client,
		path,
		claimName,
		"bSzpgkTnAoiT2YAhUShPpfpajPESfNXVTu",
		publish.Details{
			Title:       mustGetFlagString(cmd, "title"),
			Description: mustGetFlagString(cmd, "description"),
			Author:      mustGetFlagString(cmd, "author"),
			Tags:        nil,
			ReleaseTime: mustGetFlagInt64(cmd, "release-time"),
		},
		"reflector.lbry.com:5566",
	)
	checkErr(err)

	decoded, err := publish.Decode(client, tx)
	checkErr(err)

	fmt.Printf("TX: %s\n\n", decoded)
	fmt.Printf("TXID: %s\n", txid.String())
}