package templates

import (
	"bytes"
	"context"
	"strings"
	"testing"

	"backend/internal/auth"
)

// TestLayout_LogoutFormVisibleWhenAuthed verifies that the logout form is
// rendered in the header when Layout receives a non-nil user (D-22).
// The _csrf hidden field must also be present (AUTH-06).
func TestLayout_LogoutFormVisibleWhenAuthed(t *testing.T) {
	var buf bytes.Buffer
	user := &auth.User{Email: "a@b.c"}
	err := Layout("Test", user, "mytesttoken").Render(context.Background(), &buf)
	if err != nil {
		t.Fatalf("Layout.Render: %v", err)
	}
	body := buf.String()

	if !strings.Contains(body, `action="/logout"`) {
		t.Errorf("Layout body missing action=\"/logout\"; want logout form when authed\nbody: %s", body)
	}
	if !strings.Contains(body, `method="POST"`) {
		t.Errorf("Layout body missing method=\"POST\"; logout must be a POST form (D-22)")
	}
	if !strings.Contains(body, `name="_csrf"`) {
		t.Errorf("Layout body missing name=\"_csrf\"; logout form must embed CSRF field (AUTH-06)")
	}
	if !strings.Contains(body, `value="mytesttoken"`) {
		t.Errorf("Layout body missing value=\"mytesttoken\"; CSRF token not threaded into form")
	}
}

// TestLayout_LogoutFormHiddenWhenUnauthed verifies that no logout form is
// rendered when Layout receives a nil user (unauthenticated request).
func TestLayout_LogoutFormHiddenWhenUnauthed(t *testing.T) {
	var buf bytes.Buffer
	err := Layout("Test", nil, "").Render(context.Background(), &buf)
	if err != nil {
		t.Fatalf("Layout.Render: %v", err)
	}
	body := buf.String()

	if strings.Contains(body, `action="/logout"`) {
		t.Errorf("Layout body must NOT contain action=\"/logout\" when user is nil (unauthenticated)")
	}
}
