package executor

import (
	"testing"

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

func TestFindDuplicateIndexName(t *testing.T) {
	tests := []struct {
		name     string
		indexes  []mysqlbackend.IndexInfo
		columns  []string
		expected string
	}{
		{
			name: "single column duplicate",
			indexes: []mysqlbackend.IndexInfo{
				{Name: "idx_value2", Column: "value"},
			},
			columns:  []string{"value"},
			expected: "idx_value2",
		},
		{
			name: "ignore primary index",
			indexes: []mysqlbackend.IndexInfo{
				{Name: "PRIMARY", Column: "id", IsPrimary: true},
			},
			columns:  []string{"id"},
			expected: "",
		},
		{
			name: "multi-column duplicate",
			indexes: []mysqlbackend.IndexInfo{
				{Name: "idx_multi", Column: "value", Seq: 1},
				{Name: "idx_multi", Column: "other", Seq: 2},
			},
			columns:  []string{"value", "other"},
			expected: "idx_multi",
		},
		{
			name: "deterministic choice",
			indexes: []mysqlbackend.IndexInfo{
				{Name: "b_idx", Column: "value"},
				{Name: "a_idx", Column: "value"},
			},
			columns:  []string{"value"},
			expected: "a_idx",
		},
		{
			name: "column mismatch",
			indexes: []mysqlbackend.IndexInfo{
				{Name: "idx_value2", Column: "value"},
			},
			columns:  []string{"other"},
			expected: "",
		},
	}

	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			got := findDuplicateIndexName(tt.indexes, tt.columns)
			if got != tt.expected {
				t.Fatalf("expected %q, got %q", tt.expected, got)
			}
		})
	}
}
