package executor

import (
	"testing"

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

func TestDMLArithmeticAndRangeIntegration(t *testing.T) {
	stmt, err := parser.NewParser("UPDATE ks.tbl SET unread = unread + 1 WHERE user_id = 1 AND score > 0").Parse()
	if err != nil {
		t.Fatalf("parse failed: %v", err)
	}
	updateStmt, ok := stmt.(*parser.UpdateStatement)
	if !ok {
		t.Fatalf("expected update statement, got %T", stmt)
	}

	columnTypes := map[string]string{
		"unread":  "int",
		"user_id": "bigint",
		"score":   "int",
	}

	assignments, hasMutation, err := collectAssignmentInfo(updateStmt.Assigments, columnTypes, nil)
	if err != nil {
		t.Fatalf("collectAssignmentInfo failed: %v", err)
	}
	if hasMutation {
		t.Fatalf("expected no collection mutation")
	}
	if len(assignments) != 1 {
		t.Fatalf("expected one assignment, got %d", len(assignments))
	}

	conds, err := extractEqualityConditions(updateStmt.Where)
	if err != nil {
		t.Fatalf("extractEqualityConditions failed: %v", err)
	}

	exec := &Executor{translator: translator.NewTranslator()}
	dml := &dmlExecutor{Executor: exec}
	sql, _ := dml.buildWhereClause(conds, buildBindMarkerIndex(stmt), nil)
	expected := "`user_id` = 1 AND `score` > 0"
	if sql != expected {
		t.Fatalf("unexpected where SQL: %s", sql)
	}
}
