package translator

import (
	"testing"

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

func TestTranslateSelectGroupByPerPartitionLimit(t *testing.T) {
	stmt, err := parser.NewParser("SELECT a, count(*) FROM ks.tbl WHERE a = ? GROUP BY a LIMIT ? PER PARTITION LIMIT ?").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	_, err = NewTranslator().Translate(stmt)
	if err == nil {
		t.Fatalf("expected translation error for non-literal limits")
	}
}

func TestTranslateSelectPerPartitionLimitOnly(t *testing.T) {
	stmt, err := parser.NewParser("SELECT a FROM ks.tbl PER PARTITION LIMIT 5").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	sql, err := NewTranslator().Translate(stmt)
	if err != nil {
		t.Fatalf("translate failed: %v", err)
	}
	expected := "SELECT `a` FROM `ks`.`tbl` LIMIT 5"
	if sql != expected {
		t.Fatalf("unexpected SQL: %s", sql)
	}
}

func TestTranslateSelectWithOffset(t *testing.T) {
	stmt, err := parser.NewParser("SELECT a FROM ks.tbl LIMIT 5 OFFSET 2").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	sql, err := NewTranslator().Translate(stmt)
	if err != nil {
		t.Fatalf("translate failed: %v", err)
	}
	expected := "SELECT `a` FROM `ks`.`tbl` LIMIT 5 OFFSET 2"
	if sql != expected {
		t.Fatalf("unexpected SQL: %s", sql)
	}
}

func TestTranslateSelectOffsetWithoutLimit(t *testing.T) {
	stmt, err := parser.NewParser("SELECT a FROM ks.tbl OFFSET 3").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	_, err = NewTranslator().Translate(stmt)
	if err == nil {
		t.Fatalf("expected translate error for OFFSET without LIMIT")
	}
}
