package variables

import (
	"database/sql"
	"embed"

	"github.com/pkg/errors"
)

//go:embed schema/**
var schema embed.FS

func getVariable(key string) (string, error) {
	row := db.DB().QueryRow(
		`SELECT value
			FROM variables
			WHERE name = $1`,
		key,
	)

	var vc string
	err := row.Scan(&vc)
	switch {
	case err == nil:
		return vc, nil

	case errors.Is(err, sql.ErrNoRows):
		return "", nil // Compatibility to old behavior

	default:
		return "", errors.Wrap(err, "getting value from database")
	}
}

func setVariable(key, value string) error {
	_, err := db.DB().Exec(
		`INSERT INTO variables
			(name, value)
			VALUES ($1, $2)
			ON CONFLICT DO UPDATE
				SET value = excluded.value;`,
		key, value,
	)

	return errors.Wrap(err, "updating value in database")
}

func removeVariable(key string) error {
	_, err := db.DB().Exec(
		`DELETE FROM variables
			WHERE name = $1;`,
		key,
	)

	return errors.Wrap(err, "deleting value in database")
}