package command

import (
	"ewintr.nl/gte/cmd/cli/format"
	"ewintr.nl/gte/internal/configuration"
	"ewintr.nl/gte/internal/process"
	"ewintr.nl/gte/internal/storage"
)

type Update struct {
	updater *process.Update
}

func NewUpdate(localId int, conf *configuration.Configuration, cmdArgs []string) (*Update, error) {
	local, err := storage.NewSqlite(conf.Sqlite())
	if err != nil {
		return &Update{}, err
	}

	update, err := format.ParseTaskFieldArgs(cmdArgs)
	if err != nil {
		return &Update{}, err
	}
	localTask, err := local.FindByLocalId(localId)
	if err != nil {
		return &Update{}, err
	}
	update.ForVersion = localTask.Version

	updater := process.NewUpdate(local, localTask.Id, update)

	return &Update{
		updater: updater,
	}, nil
}

func (u *Update) Do() string {
	if err := u.updater.Process(); err != nil {
		return format.FormatError(err)
	}

	return ""
}