package storage

import (
	"github.com/juju/errors"
	"github.com/pingcap/schrodinger/pkg/types"
)

/* ------------------ mysql storage ------------- */

func (m *mysqlClient) setManagerSettings(settings *types.ManagerSettings) error {
	if _, err := m.db.NamedExec(managerSettingsInsertOnUpdate, managerSettingsToParams(settings)); err != nil {
		return errors.Trace(err)
	}

	return nil
}

func (m *mysqlClient) listManagerSettings() (*types.ManagerSettings, error) {
	var settings types.ManagerSettings

	err := m.db.Get(&settings, "SELECT general_running_size_limit, bench_running_size_limit FROM manager_config WHERE id=1")
	if err != nil {
		return nil, errors.Trace(err)
	}
	return &settings, nil
}

func managerSettingsToParams(settings *types.ManagerSettings) map[string]interface{} {
	return map[string]interface{}{
		"id":                         1,
		"general_running_size_limit": settings.GeneralRunningSizeLimit,
		"bench_running_size_limit":   settings.BenchRunningSizeLimit,
	}
}

const managerSettingsInsertOnUpdate = `
INSERT INTO manager_config (
 id
,general_running_size_limit
,bench_running_size_limit
) VALUES (
 :id
,:general_running_size_limit
,:bench_running_size_limit
) ON DUPLICATE KEY UPDATE general_running_size_limit = :general_running_size_limit, bench_running_size_limit = :bench_running_size_limit;
`
