package core

import (
	"os"
	"testing"
)

// TestEnvSet setea las variables de entorno indicadas y retorna una funcion
// que restaura los valores originales. Se registra automaticamente en t.Cleanup.
// Las variables que no existian antes se eliminan al restaurar.
func TestEnvSet(t *testing.T, vars map[string]string) func() {
	t.Helper()

	originals := make(map[string]string, len(vars))
	existed := make(map[string]bool, len(vars))

	for k, v := range vars {
		orig, ok := os.LookupEnv(k)
		originals[k] = orig
		existed[k] = ok
		os.Setenv(k, v)
	}

	restore := func() {
		for k := range vars {
			if existed[k] {
				os.Setenv(k, originals[k])
			} else {
				os.Unsetenv(k)
			}
		}
	}

	t.Cleanup(restore)
	return restore
}
