package executor

import (
	"testing"

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

func TestValidateGroupByWithPK(t *testing.T) {
	stmt, err := parser.NewParser("SELECT b, count(*) FROM ks.tbl WHERE a = ? GROUP BY b").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	selectStmt, ok := stmt.(*parser.SelectStatement)
	if !ok {
		t.Fatalf("expected select statement, got %T", stmt)
	}
	if err := validateGroupByWithPK(selectStmt, []string{"a", "b", "c"}); err != nil {
		t.Fatalf("expected valid group by, got %v", err)
	}
}

func TestValidateGroupByWithPKRejectsOrder(t *testing.T) {
	stmt, err := parser.NewParser("SELECT c, count(*) FROM ks.tbl WHERE a = ? GROUP BY c").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	selectStmt, ok := stmt.(*parser.SelectStatement)
	if !ok {
		t.Fatalf("expected select statement, got %T", stmt)
	}
	if err := validateGroupByWithPK(selectStmt, []string{"a", "b", "c"}); err == nil {
		t.Fatalf("expected group by order error")
	}
}

func TestValidateGroupByWithPKRejectsSelectList(t *testing.T) {
	stmt, err := parser.NewParser("SELECT b, c FROM ks.tbl WHERE a = ? GROUP BY b").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	selectStmt, ok := stmt.(*parser.SelectStatement)
	if !ok {
		t.Fatalf("expected select statement, got %T", stmt)
	}
	if err := validateGroupByWithPK(selectStmt, []string{"a", "b", "c"}); err == nil {
		t.Fatalf("expected select list validation error")
	}
}
