package suggest

import (
	"context"
	"os"
	"testing"
	"time"

	"pinscrape-allgo/internal/config"
	"pinscrape-allgo/internal/metrics"
	"pinscrape-allgo/internal/proxypool"
	"pinscrape-allgo/internal/ratelimit"
	"pinscrape-allgo/internal/tlspool"
)

func liveClient() *Client {
	cfg := &config.Config{}
	cfg.SuggestHl = "en"
	cfg.SuggestGl = "US"
	return New(cfg, proxypool.New(nil), tlspool.New(4, 20), ratelimit.New(0, 0), metrics.New())
}

func requireLive(t *testing.T) {
	t.Helper()
	if os.Getenv("SUGGEST_LIVE") == "" {
		t.Skip("set SUGGEST_LIVE=1 to run live network tests")
	}
}

func TestSuggestLiveLatency(t *testing.T) {
	requireLive(t)
	c := liveClient()
	ctx := context.Background()
	keywords := []string{"iphone case", "crochet hat", "cat coloring", "wall decor", "gift ideas"}

	start := time.Now()
	for _, kw := range keywords {
		kws, err := c.FetchRelatedKeywords(ctx, kw, 10)
		if err != nil {
			t.Logf("%s -> error: %v", kw, err)
			continue
		}
		t.Logf("%s -> %d suggestions", kw, len(kws))
	}
	elapsed := time.Since(start)
	t.Logf("POOLED: %d keywords in %s (%.0f ms/keyword)", len(keywords), elapsed, float64(elapsed.Milliseconds())/float64(len(keywords)))
}

func TestSuggestLiveParallel(t *testing.T) {
	requireLive(t)
	c := liveClient()
	ctx := context.Background()
	keywords := make([]string, 20)
	terms := []string{"iphone case", "crochet hat", "cat coloring", "wall decor", "gift ideas",
		"dog toys", "car parts", "home office", "yoga mat", "coffee maker"}
	for i := range keywords {
		keywords[i] = terms[i%len(terms)]
	}

	start := time.Now()
	out := c.FetchParallel(ctx, keywords, 10)
	elapsed := time.Since(start)
	t.Logf("PARALLEL: %d keywords in %s (%.0f ms/keyword wall), got %d results",
		len(keywords), elapsed, float64(elapsed.Milliseconds())/float64(len(keywords)), len(out))
}
