package router_test

import (
	"encoding/json"
	"net/http"
	"net/http/httptest"
	"testing"

	"github.com/rede5/gohorsejobs/backend/internal/router"
	"github.com/stretchr/testify/assert"
)

func TestRootHandler(t *testing.T) {
	// Initialize the router
	// Note: NewRouter might try to connect to the DB.
	// For this unit test, if NewRouter is tightly coupled to DB, we might face issues.
	// However, seeing as we just need to test the / route which doesn't use the DB,
	// let's try to run it. If it fails due to DB connection,
	// we'll have to mock the dependencies or skip full router initialization for just this handler.
	//
	// Given the context of the previous file view, NewRouter initializes services that use database.DB.
	// If database.DB is nil (which it is here), it might pass fine until a handler ACTUALLY tries to use it.
	// The root handler does NOT use the DB, so this might work.

	r := router.NewRouter()

	req, _ := http.NewRequest("GET", "/", nil)
	w := httptest.NewRecorder()

	r.ServeHTTP(w, req)

	assert.Equal(t, http.StatusOK, w.Code)

	var response map[string]interface{}
	err := json.Unmarshal(w.Body.Bytes(), &response)
	assert.NoError(t, err)

	assert.Equal(t, "🐴 GoHorseJobs API is running!", response["message"])
	// assert.NotEmpty(t, response["ip"]) // RemoteAddr might be empty in httptest
	assert.Equal(t, "/docs", response["docs"])
	assert.Equal(t, "/health", response["health"])
	assert.Equal(t, "1.0.0", response["version"])
}
