package client

import (
	"testing"

	"github.com/tidbcloud/metrics-integration/pipeline/internal/datasource"
)

func TestGetQueryURLByMetric(t *testing.T) {
	addr := datasource.MetricDataAddress{
		QueryUrl:        "http://cluster",
		ProjectQueryUrl: "",
		QueryHost:       "cluster.example.com",
	}

	if got := getQueryURLByMetric(addr, "tidb_cloud.dm_task_state"); got != addr.QueryUrl {
		t.Fatalf("expected fallback to QueryUrl when ProjectQueryUrl is empty, got %q", got)
	}

	addr.ProjectQueryUrl = "http://project"
	if got := getQueryURLByMetric(addr, "tidb_cloud.dm_task_state"); got != addr.ProjectQueryUrl {
		t.Fatalf("expected project query url for project metric, got %q", got)
	}
	if got := getQueryURLByMetric(addr, "tidbcloud_dm_syncer_replication_lag"); got != addr.ProjectQueryUrl {
		t.Fatalf("expected project query url for DM histogram metric, got %q", got)
	}

	if got := getQueryURLByMetric(addr, "tidb_cloud.node_memory_used_bytes"); got != addr.QueryUrl {
		t.Fatalf("expected cluster query url for non-project metric, got %q", got)
	}
}

func TestGetQueryHostByMetric(t *testing.T) {
	addr := datasource.MetricDataAddress{
		QueryHost:        "cluster.example.com",
		ProjectQueryHost: "",
	}

	if got := getQueryHostByMetric(addr, "tidb_cloud.dm_task_state"); got != addr.QueryHost {
		t.Fatalf("expected fallback to QueryHost when ProjectQueryHost is empty, got %q", got)
	}

	addr.ProjectQueryHost = "project.example.com"
	if got := getQueryHostByMetric(addr, "tidb_cloud.dm_task_state"); got != addr.ProjectQueryHost {
		t.Fatalf("expected ProjectQueryHost for project metric, got %q", got)
	}
	if got := getQueryHostByMetric(addr, "tidbcloud_dm_syncer_replication_lag"); got != addr.ProjectQueryHost {
		t.Fatalf("expected ProjectQueryHost for DM histogram metric, got %q", got)
	}

	if got := getQueryHostByMetric(addr, "tidb_cloud.node_memory_used_bytes"); got != addr.QueryHost {
		t.Fatalf("expected QueryHost for non-project metric, got %q", got)
	}
}
