package dbutil

import "reflect"

// tableRegistry maps a model struct type to its database table name. The query
// builder (T[M]) resolves table names through it, so the framework never has to
// import the application's models package. Apps populate it once at startup via
// Register / RegisterAll — typically from an init() in their models package:
//
//	func init() { dbutil.RegisterAll(Tables) }
var tableRegistry = map[reflect.Type]string{}

// Register maps a single model type to a table name.
func Register(t reflect.Type, name string) { tableRegistry[t] = name }

// RegisterAll merges a whole type->table map (e.g. an app's models.Tables) into
// the registry.
func RegisterAll(m map[reflect.Type]string) {
	for k, v := range m {
		tableRegistry[k] = v
	}
}

// tableNameFor returns the registered table name for t, or "" if none is set.
func tableNameFor(t reflect.Type) string { return tableRegistry[t] }
