package db

import (
	"path/filepath"
	"testing"
)

// Regression test for the WAL leak: data written through the batch writer must
// be visible in the main .sqlite file after Close, without needing the -wal.
func TestCloseCheckpointsWAL(t *testing.T) {
	dir := t.TempDir()
	dbPath := filepath.Join(dir, "wal.sqlite")
	conn, err := Open(dbPath)
	if err != nil {
		t.Fatal(err)
	}
	if err := EnsureSchema(conn); err != nil {
		t.Fatal(err)
	}
	if _, err := conn.Exec("INSERT INTO posts (keyword, slug, status) VALUES ('k1','k1',0)"); err != nil {
		t.Fatal(err)
	}

	w := NewWriter(conn, WriterOptions{BatchSize: 10, FlushEvery: 500_000_000})
	UpdateImages(nil, w, 1, `[{"title":"t","image_url":"u"}]`)
	w.Close()
	if err := Close(conn); err != nil {
		t.Fatal(err)
	}

	// Reopen and verify data is in the main file (checkpointed).
	conn2, err := Open(dbPath)
	if err != nil {
		t.Fatal(err)
	}
	defer conn2.Close()
	var images string
	if err := conn2.QueryRow(`SELECT images FROM posts WHERE id = 1`).Scan(&images); err != nil {
		t.Fatalf("row not visible after checkpoint: %v", err)
	}
	if images == "" {
		t.Fatal("images empty after checkpoint")
	}
}
