package beefix

import (
	"strings"

	"github.com/beego/bee/v2/cmd/commands"
	"github.com/beego/bee/v2/cmd/commands/version"
	beeLogger "github.com/beego/bee/v2/logger"
	"github.com/beego/bee/v2/utils"
)

var CmdFix = &commands.Command{
	UsageLine: "fix",
	Short:     "Fixes your application by making it compatible with newer versions of Beego",
	Long: `
  The command 'fix' will try to solve those issues by upgrading your code base
  to be compatible  with Beego old version
  -s source version
  -t target version

  example: bee fix -s 1 -t 2 means that upgrade Beego version from v1.x to v2.x
`,
}

var (
	source, target utils.DocValue
)

func init() {
	CmdFix.Run = runFix
	CmdFix.PreRun = func(cmd *commands.Command, args []string) { version.ShowShortVersionBanner() }
	CmdFix.Flag.Var(&source, "s", "source version")
	CmdFix.Flag.Var(&target, "t", "target version")
	commands.AvailableCommands = append(commands.AvailableCommands, CmdFix)
}

func runFix(cmd *commands.Command, args []string) int {
	t := target.String()
	if t == "" || t == "1.6" {
		return fixTo16(cmd, args)
	} else if strings.HasPrefix(t, "2") {
		// upgrade to v2
		return fix1To2()
	}

	beeLogger.Log.Info("The target is compatible version, do nothing")
	return 0
}