package db

import (
	"testing"
	"time"
)

func TestSearchClusterComponentsShowDeleted(t *testing.T) {
	deletedAt := time.Now()
	db := &mockDB{
		clusterComponents: []ClusterComponentRow{
			{
				ClusterType:   "DEDICATED_TIDB",
				ClusterID:     "cluster-a",
				ComponentName: "tidb",
				Version:       "v4.0.0",
				ImageTag:      "v4.0.0-123",
			},
			{
				ClusterType:   "DEDICATED_TIDB",
				ClusterID:     "cluster-b",
				ComponentName: "tidb",
				Version:       "v4.0.0",
				ImageTag:      "v4.0.0-456",
				DeleteTime:    &deletedAt,
			},
		},
	}

	rows, err := db.SearchClusterComponents("DEDICATED_TIDB", "tidb", nil, "", "", false, 100, 1)
	if err != nil {
		t.Fatal(err)
	}
	if len(rows) != 1 {
		t.Fatalf("expected 1 row when showDeleted is false, got %d", len(rows))
	}
	if rows[0].ClusterID != "cluster-a" {
		t.Fatalf("expected active row, got cluster_id %q", rows[0].ClusterID)
	}

	total, err := db.CountClusterComponents("DEDICATED_TIDB", "tidb", nil, "", "", false)
	if err != nil {
		t.Fatal(err)
	}
	if total != 1 {
		t.Fatalf("expected total 1 when showDeleted is false, got %d", total)
	}

	rows, err = db.SearchClusterComponents("DEDICATED_TIDB", "tidb", nil, "", "", true, 100, 1)
	if err != nil {
		t.Fatal(err)
	}
	if len(rows) != 2 {
		t.Fatalf("expected 2 rows when showDeleted is true, got %d", len(rows))
	}

	total, err = db.CountClusterComponents("DEDICATED_TIDB", "tidb", nil, "", "", true)
	if err != nil {
		t.Fatal(err)
	}
	if total != 2 {
		t.Fatalf("expected total 2 when showDeleted is true, got %d", total)
	}
}
