package executor

import (
	"context"
	"testing"

	"go.uber.org/zap"

	"github.com/everything-on-mysql/cassandra-on-mysql/pkg/cql/systemtables"
)

type testKeyspaceState struct {
	keyspace string
}

func (t *testKeyspaceState) GetKeyspace() string {
	return t.keyspace
}

func (t *testKeyspaceState) SetKeyspace(keyspace string) {
	t.keyspace = keyspace
}

func TestUseAppliesDefaultKeyspace(t *testing.T) {
	executor := &Executor{
		logger:         zap.NewNop(),
		systemExecutor: systemtables.NewSystemTableExecutor(systemtables.NewRegistry()),
	}

	state := &testKeyspaceState{}
	ctx := WithKeyspaceState(context.Background(), state)

	result, err := executor.Execute(ctx, "test_user", "test_password", "USE system")
	if err != nil {
		t.Fatalf("USE failed: %v", err)
	}
	if result.SetKeyspace != "system" {
		t.Fatalf("expected SetKeyspace system, got %q", result.SetKeyspace)
	}
	if state.GetKeyspace() != "system" {
		t.Fatalf("expected session keyspace system, got %q", state.GetKeyspace())
	}

	result, err = executor.Execute(ctx, "test_user", "test_password", "SELECT * FROM local")
	if err != nil {
		t.Fatalf("SELECT failed: %v", err)
	}
	if len(result.Columns) == 0 {
		t.Fatal("expected columns for system.local")
	}
	if len(result.Rows) == 0 {
		t.Fatal("expected rows for system.local")
	}
}
