package main

import (
	"fmt"
	"os"

	"github.com/tendermint/tendermint/libs/log"
	"github.com/tendermint/tendermint/privval"
)

var (
	logger = log.NewTMLogger(log.NewSyncWriter(os.Stdout))
)

func main() {
	args := os.Args[1:]
	if len(args) != 3 {
		fmt.Println("Expected three args: <old path> <new key path> <new state path>")
		fmt.Println("Eg. ~/.tendermint/config/priv_validator.json ~/.tendermint/config/priv_validator_key.json ~/.tendermint/data/priv_validator_state.json")
		os.Exit(1)
	}
	err := loadAndUpgrade(args[0], args[1], args[2])
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}
}

func loadAndUpgrade(oldPVPath, newPVKeyPath, newPVStatePath string) error {
	oldPV, err := privval.LoadOldFilePV(oldPVPath)
	if err != nil {
		return fmt.Errorf("Error reading OldPrivValidator from %v: %v\n", oldPVPath, err)
	}
	logger.Info("Upgrading PrivValidator file",
		"old", oldPVPath,
		"newKey", newPVKeyPath,
		"newState", newPVStatePath,
	)
	oldPV.Upgrade(newPVKeyPath, newPVStatePath)
	return nil
}