// ignore
// +build allcommands walletcmd

package main

import (
	"fmt"
	"math/rand"
	"strings"
	"time"
)

var walletConfirmationCode string
var walletConfirmationUser string
var walletTransactionAmnt string

func init() {
	command := Command{
		Cmd:         []string{"wallet", "confirm"},
		Description: "$user $amount / $user $confirmation - Send or confirm a wallet payment",
		Help:        "",
		Exec:        cmdWallet,
	}

	RegisterCommand(command)
}

func cmdWallet(cmd []string) {
	if len(cmd) < 3 {
		return
	}
	if cmd[0] == "wallet" {
		rand.Seed(time.Now().UnixNano())
		chars := []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
			"abcdefghijklmnopqrstuvwxyz" +
			"0123456789")
		length := 8
		var b strings.Builder
		for i := 0; i < length; i++ {
			b.WriteRune(chars[rand.Intn(len(chars))])
		}
		walletConfirmationCode = b.String()
		walletConfirmationUser = cmd[1]
		walletTransactionAmnt = cmd[2]
		printInfo(fmt.Sprintf("To confirm sending %s to %s, type /confirm %s %s", cmd[2], cmd[1], cmd[1], walletConfirmationCode))

	} else if cmd[0] == "confirm" {
		if cmd[1] == walletConfirmationUser && cmd[2] == walletConfirmationCode {
			txWallet := k.NewWallet()
			wAPI, err := txWallet.SendXLM(walletConfirmationUser, walletTransactionAmnt, "")
			if err != nil {
				printError(fmt.Sprintf("There was an error with your wallet tx:\n\t%+v", err))
			} else {
				printInfo(fmt.Sprintf("You have sent %sXLM to %s with tx ID: %s", wAPI.Result.Amount, wAPI.Result.ToUsername, wAPI.Result.TxID))
			}

		} else {
			printError("There was an error validating your confirmation. Your wallet has been untouched.")
		}

	}

}