package configmigrate

import (
	"context"

	"github.com/AdguardTeam/golibs/errors"
)

// migrateTo24 performs the following changes:
//
//	# BEFORE:
//	'schema_version': 23
//	'log_file': ""
//	'log_max_backups': 0
//	'log_max_size': 100
//	'log_max_age': 3
//	'log_compress': false
//	'log_localtime': false
//	'verbose': false
//	# …
//
//	# AFTER:
//	'schema_version': 24
//	'log':
//	  'file': ""
//	  'max_backups': 0
//	  'max_size': 100
//	  'max_age': 3
//	  'compress': false
//	  'local_time': false
//	  'verbose': false
//	# …
func (m *Migrator) migrateTo24(_ context.Context, diskConf yobj) (err error) {
	diskConf["schema_version"] = 24

	logObj := yobj{}
	err = errors.Join(
		moveVal[string](diskConf, logObj, "log_file", "file"),
		moveVal[int](diskConf, logObj, "log_max_backups", "max_backups"),
		moveVal[int](diskConf, logObj, "log_max_size", "max_size"),
		moveVal[int](diskConf, logObj, "log_max_age", "max_age"),
		moveVal[bool](diskConf, logObj, "log_compress", "compress"),
		moveVal[bool](diskConf, logObj, "log_localtime", "local_time"),
		moveVal[bool](diskConf, logObj, "verbose", "verbose"),
	)
	if err != nil {
		// Don't wrap the error, because it's informative enough as is.
		return err
	}

	if len(logObj) != 0 {
		diskConf["log"] = logObj
	}

	return nil
}
