package update

import (
	"flag"
	"os"
	"os/exec"

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

var CmdUpdate = &commands.Command{
	UsageLine: "update",
	Short:     "Update Bee",
	Long: `
Automatic run command "go get -u github.com/beego/bee/v2" for selfupdate
`,
	Run: updateBee,
}

func init() {
	fs := flag.NewFlagSet("update", flag.ContinueOnError)
	CmdUpdate.Flag = *fs
	commands.AvailableCommands = append(commands.AvailableCommands, CmdUpdate)
}

func updateBee(cmd *commands.Command, args []string) int {
	beeLogger.Log.Info("Updating")
	beePath := config.GitRemotePath
	cmdUp := exec.Command("go", "get", "-u", beePath)
	cmdUp.Stdout = os.Stdout
	cmdUp.Stderr = os.Stderr
	if err := cmdUp.Run(); err != nil {
		beeLogger.Log.Warnf("Run cmd err:%s", err)
	}
	// update the Time when updateBee every time
	utils.UpdateLastPublishedTime()
	return 0
}