package apipinger

import (
	"context"
	"net/http"
	"net/http/httptest"
	"sync"
	"testing"
)

func TestAPIPinger_Ping(t *testing.T) {
	// Create a test server that returns a 200 OK response
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(http.StatusOK)
	}))
	defer ts.Close()

	pinger := &APIPinger{APIURL: ts.URL}
	ctx := context.Background()
	var wg sync.WaitGroup
	results := make(chan string, 1)

	wg.Add(1)
	go pinger.Ping(ctx, &wg, results, "")
	wg.Wait()
	close(results)

	result := <-results
	expected := "API ping successful: 200 OK"
	if result != expected {
		t.Fatalf("expected %q, got %q", expected, result)
	}
}

func TestAPIPinger_Ping_Failure(t *testing.T) {
	// Create a test server that returns a 500 Internal Server Error response
	ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.WriteHeader(http.StatusInternalServerError)
	}))
	defer ts.Close()

	pinger := &APIPinger{APIURL: ts.URL}
	ctx := context.Background()
	var wg sync.WaitGroup
	results := make(chan string, 1)

	wg.Add(1)
	go pinger.Ping(ctx, &wg, results, "")
	wg.Wait()
	close(results)

	result := <-results
	expected := "API ping failed: 500 Internal Server Error"
	if result != expected {
		t.Fatalf("expected %q, got %q", expected, result)
	}
}
