package core

import (
	"database/sql"
	"testing"

	_ "github.com/mattn/go-sqlite3"
)

// TestDBSetup abre una base de datos SQLite en memoria, ejecuta el schema SQL
// proporcionado y registra el cleanup en t.Cleanup.
// Retorna un TestDB con el DB abierto listo para usar en tests.
func TestDBSetup(t *testing.T, schema string) TestDB {
	t.Helper()

	db, err := sql.Open("sqlite3", ":memory:")
	if err != nil {
		t.Fatalf("TestDBSetup: open sqlite3: %v", err)
	}

	if schema != "" {
		if _, err := db.Exec(schema); err != nil {
			db.Close()
			t.Fatalf("TestDBSetup: exec schema: %v", err)
		}
	}

	cleanup := func() { db.Close() }
	t.Cleanup(cleanup)

	return TestDB{
		DB:      db,
		Path:    ":memory:",
		Cleanup: cleanup,
	}
}
