package web

import (
	"html/template"
	"net/http"

	"charm.land/log/v2"
	"github.com/charmbracelet/soft-serve/pkg/backend"
	"github.com/charmbracelet/soft-serve/pkg/config"
	"github.com/charmbracelet/soft-serve/pkg/proto"
)

type AboutData struct {
	BaseData
	Repo       proto.Repository
	ReadmeHTML template.HTML
}

func about(w http.ResponseWriter, r *http.Request) {
	ctx := r.Context()
	logger := log.FromContext(ctx)
	cfg := config.FromContext(ctx)
	be := backend.FromContext(ctx)

	if be == nil {
		logger.Debug("backend not found in context")
		renderInternalServerError(w, r)
		return
	}

	readmeRaw, readmeHTML, err := getServerReadme(ctx, be)
	if err != nil {
		logger.Debug("failed to get server README", "err", err)
		renderInternalServerError(w, r)
		return
	}

	// Generate description from README or fallback
	description := extractPlainTextFromMarkdown(readmeRaw, 200)
	if description == "" {
		description = "About " + cfg.Name
	}

	data := AboutData{
		BaseData: BaseData{
			ServerName:  cfg.Name,
			ActiveTab:   "about",
			Title:       "About | " + cfg.Name,
			Description: description,
		},
		ReadmeHTML: readmeHTML,
	}

	renderHTML(w, "about.html", data)
}
