package main

import (
	"encoding/json"
	"math/big"
	"testing"

	"github.com/pletorco/fluss-go/pkg/fgo"
)

func TestRowsJSON(t *testing.T) {
	columns := []fgo.Column{
		{Name: "customer_id", Type: fgo.IntType},
		{Name: "account_balance", Type: fgo.DecimalType, LogicalType: &fgo.LogicalType{Root: "DECIMAL", Precision: 15, Scale: 2}},
		{Name: "name", Type: fgo.StringType},
	}
	data, err := rowsJSON(columns, []fgo.Row{{int32(101), big.NewRat(12550, 100), nil}})
	if err != nil {
		t.Fatal(err)
	}
	var rows []map[string]any
	if err := json.Unmarshal(data, &rows); err != nil {
		t.Fatal(err)
	}
	if len(rows) != 1 || rows[0]["customer_id"] != float64(101) || rows[0]["account_balance"] != "125.50" || rows[0]["name"] != nil {
		t.Fatalf("unexpected JSON: %s", data)
	}
	empty, err := rowsJSON(columns, nil)
	if err != nil || string(empty) != "[]" {
		t.Fatalf("empty rows: %s, %v", empty, err)
	}
	if _, err := rowsJSON(columns, []fgo.Row{{int32(101)}}); err == nil {
		t.Fatal("expected a row-width error")
	}
}
