//go:build ignore

package main

import (
	"fmt"
	"math"
	"strings"

	"kit/ext"
)

// Init demonstrates a minimal-chrome extension.
// Hides the startup banner, status bar, separator, and input hint, replacing
// them with a compact footer showing model name and a context usage bar:
//
//	claude-sonnet-4-5-20250929  [###-------] 30%  (3.9K/200K tokens)
//
// Usage: kit -e examples/extensions/minimal.go
func Init(api ext.API) {
	// updateFooter builds the footer text from current context stats.
	updateFooter := func(ctx ext.Context) {
		stats := ctx.GetContextStats()
		pct := stats.UsagePercent * 100
		if pct > 100 {
			pct = 100
		}
		filled := int(math.Round(pct)) / 10
		bar := strings.Repeat("#", filled) + strings.Repeat("-", 10-filled)

		// Format token counts like the built-in status bar (e.g. "3.9K/200K").
		fmtTokens := func(n int) string {
			if n >= 1000 {
				return fmt.Sprintf("%.1fK", float64(n)/1000)
			}
			return fmt.Sprintf("%d", n)
		}

		text := fmt.Sprintf("%s  [%s] %d%%", ctx.Model, bar, int(math.Round(pct)))
		if stats.ContextLimit > 0 {
			text += fmt.Sprintf("  (%s/%s tokens)",
				fmtTokens(stats.EstimatedTokens), fmtTokens(stats.ContextLimit))
		}

		ctx.SetFooter(ext.HeaderFooterConfig{
			Content: ext.WidgetContent{Text: text},
			Style:   ext.WidgetStyle{BorderColor: "#585b70"},
		})
	}

	api.OnSessionStart(func(_ ext.SessionStartEvent, ctx ext.Context) {
		// Strip built-in chrome for a minimal look.
		ctx.SetUIVisibility(ext.UIVisibility{
			HideStartupMessage: true,
			HideStatusBar:      true,
			HideSeparator:      true,
			HideInputHint:      true,
		})

		updateFooter(ctx)
	})

	// Refresh after each agent turn — context usage changes here.
	api.OnAgentEnd(func(_ ext.AgentEndEvent, ctx ext.Context) {
		updateFooter(ctx)
	})

	api.OnSessionShutdown(func(_ ext.SessionShutdownEvent, ctx ext.Context) {
		ctx.RemoveFooter()
	})
}
