package web

import (
	"net/http"
	"net/http/httptest"
	"strings"
	"testing"
	"time"
)

// v0.170.0 landing change (operator ruling, reversing v0.163.0): "/" is the Indítópult — it 302s to
// /launcher (ONE canonical URL per page), and the Vezérlőpult keeps its own URL /dashboard.

// Root 302s to the launcher — the launcher body is NEVER served at "/".
// Red-proof: revert the server.go case split (fold "/" back into the dashboard case) → "/" renders a
// 200 dashboard and this fails on both the status and the Location.
func TestRoot_RedirectsToLauncher(t *testing.T) {
	s := newDashboardServer(t, time.Time{})
	rec := httptest.NewRecorder()
	s.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/", nil))

	if rec.Code != http.StatusFound {
		t.Fatalf("GET / status = %d, want 302", rec.Code)
	}
	if loc := rec.Header().Get("Location"); loc != "/launcher" {
		t.Errorf("GET / Location = %q, want /launcher", loc)
	}
	// The launcher body must not be served at "/" (no two canonical URLs for one page).
	if strings.Contains(rec.Body.String(), "launch-tile") {
		t.Error("GET / served launcher body instead of redirecting")
	}
}

// The Vezérlőpult is still served, now at /dashboard, with a 200 and its real content.
func TestDashboard_ServedAtDashboardURL(t *testing.T) {
	s := newDashboardServer(t, time.Time{})
	rec := httptest.NewRecorder()
	s.ServeHTTP(rec, httptest.NewRequest(http.MethodGet, "/dashboard", nil))

	if rec.Code != http.StatusOK {
		t.Fatalf("GET /dashboard status = %d, want 200", rec.Code)
	}
	if !strings.Contains(rec.Body.String(), "Vezérlőpult") {
		t.Error("/dashboard did not render the Vezérlőpult page")
	}
}

// Nav hrefs + active states: Indítópult → /launcher (active on the launcher), Vezérlőpult →
// /dashboard (active on the dashboard), and no item highlights on both.
func TestNav_LauncherAndDashboardHrefsAndActive(t *testing.T) {
	onDashboard := renderNavFor(t, "dashboard")
	if !strings.Contains(onDashboard, `href="/dashboard" class="active"`) {
		t.Error("dashboard page: Vezérlőpult nav link is not href=/dashboard + active")
	}
	if !strings.Contains(onDashboard, `href="/launcher" class=""`) {
		t.Error("dashboard page: Indítópult nav link should NOT be active")
	}

	onLauncher := renderNavFor(t, "launcher")
	if !strings.Contains(onLauncher, `href="/launcher" class="active"`) {
		t.Error("launcher page: Indítópult nav link is not href=/launcher + active")
	}
	if !strings.Contains(onLauncher, `href="/dashboard" class=""`) {
		t.Error("launcher page: Vezérlőpult nav link should NOT be active")
	}
}
