package ui

import (
	"image/color"

	"opslag.de/schobers/geom"
	"opslag.de/schobers/zntg"
)

const tooltipBorderThickness = 1
const tooltipHorizontalPadding = 6
const tooltipVerticalPadding = 2
const tooltipMouseDistance = 12
const uiDefaultTooltipOverlay = "ui-default-tooltip"

type Tooltip struct {
	OverlayBase

	Text string
}

func (t *Tooltip) FontName(ctx Context) string {
	var name = t.Font.Name
	if len(name) == 0 {
		name = ctx.Style().Fonts.Tooltip
	}
	return name
}

func (t *Tooltip) Handle(Context, Event) bool { return false }

func (t *Tooltip) Render(ctx Context) {
	if len(t.Text) == 0 {
		return
	}

	fontName := t.FontName(ctx)
	size := ctx.Fonts().Font(fontName).Measure(t.Text)

	offset := t.Offset()
	mouse := ctx.MousePosition().Sub(offset)
	width := size.Dx() + 2*tooltipBorderThickness + 2*tooltipHorizontalPadding
	height := size.Dy() + 2*tooltipBorderThickness + 2*tooltipVerticalPadding

	left := mouse.X + tooltipMouseDistance
	top := mouse.Y + tooltipMouseDistance
	if left+width > t.bounds.Max.X {
		left = mouse.X - tooltipMouseDistance - width
	}
	if top+height > t.bounds.Max.Y {
		top = mouse.Y - tooltipMouseDistance - height
	}

	bounds := geom.RectRelF32(left, top, width, height)

	almostBlack := zntg.MustHexColor("#000000bf")
	almostWhite := zntg.MustHexColor("ffffffbf")

	ctx.Renderer().FillRectangle(bounds, almostBlack)
	ctx.Renderer().Rectangle(bounds, almostWhite, 1)

	bottomLeft := bounds.Min.Add2D(tooltipBorderThickness+tooltipHorizontalPadding, tooltipBorderThickness+tooltipVerticalPadding)
	ctx.Fonts().Text(fontName, bottomLeft, color.White, t.Text)
}