package styles

import (
	"charm.land/lipgloss/v2"
	"github.com/charmbracelet/x/exp/charmtone"
)

func NewCharmtoneTheme() *Theme {
	t := &Theme{
		Name:   "charmtone",
		IsDark: true,

		Primary:   charmtone.Charple,
		Secondary: charmtone.Dolly,
		Tertiary:  charmtone.Bok,
		Accent:    charmtone.Zest,

		// Backgrounds
		BgBase:        charmtone.Pepper,
		BgBaseLighter: charmtone.BBQ,
		BgSubtle:      charmtone.Charcoal,
		BgOverlay:     charmtone.Iron,

		// Foregrounds
		FgBase:      charmtone.Ash,
		FgMuted:     charmtone.Squid,
		FgHalfMuted: charmtone.Smoke,
		FgSubtle:    charmtone.Oyster,
		FgSelected:  charmtone.Salt,

		// Borders
		Border:      charmtone.Charcoal,
		BorderFocus: charmtone.Charple,

		// Status
		Success: charmtone.Guac,
		Error:   charmtone.Sriracha,
		Warning: charmtone.Zest,
		Info:    charmtone.Malibu,

		// Colors
		White: charmtone.Butter,

		BlueLight: charmtone.Sardine,
		BlueDark:  charmtone.Damson,
		Blue:      charmtone.Malibu,

		Yellow: charmtone.Mustard,
		Citron: charmtone.Citron,

		Green:      charmtone.Julep,
		GreenDark:  charmtone.Guac,
		GreenLight: charmtone.Bok,

		Red:      charmtone.Coral,
		RedDark:  charmtone.Sriracha,
		RedLight: charmtone.Salmon,
		Cherry:   charmtone.Cherry,

		// Markdown colors (dark theme).
		MdText:          charmtone.Smoke,
		MdHeading:       charmtone.Malibu,
		MdH6:            charmtone.Guac,
		MdHRule:         charmtone.Charcoal,
		MdLink:          charmtone.Zinc,
		MdLinkText:      charmtone.Guac,
		MdImage:         charmtone.Cheeky,
		MdImageText:     charmtone.Squid,
		MdCodeFg:        charmtone.Coral,
		MdCodeBg:        charmtone.Charcoal,
		MdCodeBlockFg:   charmtone.Charcoal,
		MdCodeBlockBg:   charmtone.Charcoal,
		MdComment:       charmtone.Oyster,
		MdKeyword:       charmtone.Malibu,
		MdKeywordAlt:    charmtone.Pony,
		MdKeywordType:   charmtone.Guppy,
		MdOperator:      charmtone.Salmon,
		MdPunctuation:   charmtone.Zest,
		MdName:          charmtone.Smoke,
		MdNameBuiltin:   charmtone.Cheeky,
		MdNameTag:       charmtone.Mauve,
		MdNameAttr:      charmtone.Hazy,
		MdNameClass:     charmtone.Salt,
		MdNameDecorator: charmtone.Citron,
		MdNameFunc:      charmtone.Guac,
		MdNumber:        charmtone.Julep,
		MdString:        charmtone.Cumin,
		MdStringEscape:  charmtone.Bok,
		MdDeleted:       charmtone.Coral,
		MdInserted:      charmtone.Guac,
		MdSubheading:    charmtone.Squid,
		MdError:         charmtone.Butter,
		MdErrorBg:       charmtone.Sriracha,

		// Diff colors (dark theme).
		DiffInsertFg:     lipgloss.Color("#629657"),
		DiffInsertBg:     lipgloss.Color("#2b322a"),
		DiffInsertSymBg:  lipgloss.Color("#323931"),
		DiffInsertCodeBg: lipgloss.Color("#323931"),
		DiffDeleteFg:     lipgloss.Color("#a45c59"),
		DiffDeleteBg:     lipgloss.Color("#312929"),
		DiffDeleteSymBg:  lipgloss.Color("#383030"),
		DiffDeleteCodeBg: lipgloss.Color("#383030"),
	}

	// Text selection.
	t.TextSelection = lipgloss.NewStyle().Foreground(charmtone.Salt).Background(charmtone.Charple)

	// LSP and MCP status.
	t.ItemOfflineIcon = lipgloss.NewStyle().Foreground(charmtone.Squid).SetString("●")
	t.ItemBusyIcon = t.ItemOfflineIcon.Foreground(charmtone.Citron)
	t.ItemErrorIcon = t.ItemOfflineIcon.Foreground(charmtone.Coral)
	t.ItemOnlineIcon = t.ItemOfflineIcon.Foreground(charmtone.Guac)

	// Editor: Yolo Mode.
	t.YoloIconFocused = lipgloss.NewStyle().Foreground(charmtone.Oyster).Background(charmtone.Citron).Bold(true).SetString(" ! ")
	t.YoloIconBlurred = t.YoloIconFocused.Foreground(charmtone.Pepper).Background(charmtone.Squid)
	t.YoloDotsFocused = lipgloss.NewStyle().Foreground(charmtone.Zest).SetString(":::")
	t.YoloDotsBlurred = t.YoloDotsFocused.Foreground(charmtone.Squid)

	// oAuth Chooser.
	t.AuthBorderSelected = lipgloss.NewStyle().BorderForeground(charmtone.Guac)
	t.AuthTextSelected = lipgloss.NewStyle().Foreground(charmtone.Julep)
	t.AuthBorderUnselected = lipgloss.NewStyle().BorderForeground(charmtone.Iron)
	t.AuthTextUnselected = lipgloss.NewStyle().Foreground(charmtone.Squid)

	return t
}
