package sqlstore

import (
	sq "github.com/Masterminds/squirrel"
	"github.com/mattermost/focalboard/server/model"
)

func (s *SQLStore) getSystemSetting(db sq.BaseRunner, key string) (string, error) {
	scanner := s.getQueryBuilder(db).
		Select("value").
		From(s.tablePrefix + "system_settings").
		Where(sq.Eq{"id": key}).
		QueryRow()

	var result string
	err := scanner.Scan(&result)
	if err != nil && !model.IsErrNotFound(err) {
		return "", err
	}

	return result, nil
}

func (s *SQLStore) getSystemSettings(db sq.BaseRunner) (map[string]string, error) {
	query := s.getQueryBuilder(db).Select("*").From(s.tablePrefix + "system_settings")

	rows, err := query.Query()
	if err != nil {
		return nil, err
	}
	defer s.CloseRows(rows)

	results := map[string]string{}

	for rows.Next() {
		var id string
		var value string

		err := rows.Scan(&id, &value)
		if err != nil {
			return nil, err
		}

		results[id] = value
	}

	return results, nil
}

func (s *SQLStore) setSystemSetting(db sq.BaseRunner, id, value string) error {
	query := s.getQueryBuilder(db).Insert(s.tablePrefix+"system_settings").Columns("id", "value").Values(id, value)

	if s.dbType == model.MysqlDBType {
		query = query.Suffix("ON DUPLICATE KEY UPDATE value = ?", value)
	} else {
		query = query.Suffix("ON CONFLICT (id) DO UPDATE SET value = EXCLUDED.value")
	}

	_, err := query.Exec()
	if err != nil {
		return err
	}

	return nil
}
