package infra

import (
	"database/sql"
	"testing"

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

func openMemDB(t *testing.T) *sql.DB {
	t.Helper()
	db, err := sql.Open("sqlite3", ":memory:")
	if err != nil {
		t.Fatalf("open :memory: db: %v", err)
	}
	t.Cleanup(func() { db.Close() })
	return db
}

func TestColumnExists(t *testing.T) {
	t.Run("columna existente retorna true", func(t *testing.T) {
		db := openMemDB(t)
		if _, err := db.Exec(`CREATE TABLE t (id INTEGER PRIMARY KEY, name TEXT)`); err != nil {
			t.Fatal(err)
		}
		got, err := ColumnExists(db, "t", "name")
		if err != nil {
			t.Fatalf("unexpected error: %v", err)
		}
		if !got {
			t.Errorf("expected true for existing column 'name'")
		}
	})

	t.Run("columna inexistente retorna false", func(t *testing.T) {
		db := openMemDB(t)
		if _, err := db.Exec(`CREATE TABLE t (id INTEGER PRIMARY KEY)`); err != nil {
			t.Fatal(err)
		}
		got, err := ColumnExists(db, "t", "missing")
		if err != nil {
			t.Fatalf("unexpected error: %v", err)
		}
		if got {
			t.Errorf("expected false for missing column")
		}
	})

	t.Run("tabla inexistente retorna false sin error", func(t *testing.T) {
		db := openMemDB(t)
		got, err := ColumnExists(db, "no_such_table", "col")
		if err != nil {
			t.Fatalf("unexpected error: %v", err)
		}
		if got {
			t.Errorf("expected false for non-existent table")
		}
	})
}
