// Package testdb provides a pure-Go SQLite helper for tests.
// It uses modernc.org/sqlite (CGO-free) via gorm.io/driver/sqlite's DriverName override.
package testdb

import (
	"testing"

	_ "modernc.org/sqlite" // 注册纯Go SQLite驱动，驱动名 "sqlite"
	gormsqlite "gorm.io/driver/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

// Open 使用 modernc.org/sqlite（纯Go，无需CGO）打开内存测试数据库。
// 驱动名必须是 "sqlite"（modernc 注册），而非 gorm 默认的 "sqlite3"（mattn/CGO）。
func Open(t testing.TB) *gorm.DB {
	t.Helper()

	db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{
		DriverName: "sqlite",
		DSN:        "file::memory:?cache=shared&mode=memory",
	}), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Silent),
	})
	if err != nil {
		t.Skipf("跳过数据库测试（SQLite不可用）: %v", err)
	}

	return db
}

// OpenWith 使用自定义DSN
func OpenWith(t testing.TB, dsn string) *gorm.DB {
	t.Helper()

	db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{
		DriverName: "sqlite",
		DSN:        dsn,
	}), &gorm.Config{
		Logger: logger.Default.LogMode(logger.Silent),
	})
	if err != nil {
		t.Skipf("跳过数据库测试（SQLite不可用）: %v", err)
	}

	return db
}
