package styles

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

func NewLightTheme() *Theme {
	t := &Theme{
		Name:   "light",
		IsDark: false,

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

		// Backgrounds (improved for accessibility)
		BgBase:        charmtone.Salt,            // #F1EFEF - very light background
		BgBaseLighter: lipgloss.Color("#FFFFFF"), // Pure white for areas needing more contrast
		BgSubtle:      charmtone.Ash,             // #DFDBDD - light gray for subtle areas
		BgOverlay:     charmtone.Oyster,          // #605F6B - darker overlay, better contrast

		// Foregrounds (darker for better accessibility on light backgrounds)
		FgBase:      charmtone.Pepper,   // #201F26 - darkest, good contrast
		FgMuted:     charmtone.Charcoal, // #3A3943 - still quite dark
		FgHalfMuted: charmtone.Iron,     // #4D4C57 - medium dark
		FgSubtle:    charmtone.Oyster,   // #605F6B - much better than Squid
		FgSelected:  charmtone.Pepper,   // #201F26 - same as base for consistency

		// Borders (improved contrast)
		Border:      charmtone.Oyster,  // #605F6B - better contrast than previous
		BorderFocus: charmtone.Charple, // #6B50FF - same purple for focus

		// Status (same as dark, these work on both)
		Success: charmtone.Turtle,
		Error:   charmtone.Cherry,
		Warning: charmtone.Zest,
		Info:    charmtone.Sapphire,

		// Colors
		White: charmtone.Salt,

		BlueLight: charmtone.Malibu,
		BlueDark:  charmtone.Sapphire,
		Blue:      charmtone.Guppy,

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

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

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

		// Markdown colors (light theme - accessible on Salt background).
		MdText:          charmtone.Pepper,          // 14.26:1 contrast
		MdHeading:       lipgloss.Color("#0066CC"), // Dark blue, 4.86:1
		MdH6:            lipgloss.Color("#006644"), // Forest green, 6.14:1
		MdHRule:         charmtone.Oyster,          // 5.48:1
		MdLink:          lipgloss.Color("#007777"), // Dark teal, 4.69:1
		MdLinkText:      lipgloss.Color("#006644"), // Forest green, 6.14:1
		MdImage:         lipgloss.Color("#CC2255"), // Dark red, 4.67:1
		MdImageText:     charmtone.Iron,            // 7.37:1
		MdCodeFg:        charmtone.Charcoal,        // 9.93:1 on Ash
		MdCodeBg:        charmtone.Ash,             // Light gray background
		MdCodeBlockFg:   charmtone.Pepper,          // Dark text
		MdCodeBlockBg:   charmtone.Ash,             // Light gray background
		MdComment:       charmtone.Oyster,          // 5.48:1
		MdKeyword:       lipgloss.Color("#0066CC"), // Dark blue, 4.86:1
		MdKeywordAlt:    lipgloss.Color("#5533CC"), // Dark purple, 6.71:1
		MdKeywordType:   charmtone.Sapphire,        // 4.98:1
		MdOperator:      lipgloss.Color("#CC2255"), // Dark red, 4.67:1
		MdPunctuation:   charmtone.Charcoal,        // 9.93:1 (can't use bright yellow)
		MdName:          charmtone.Charcoal,        // 9.93:1
		MdNameBuiltin:   lipgloss.Color("#CC2255"), // Dark red, 4.67:1
		MdNameTag:       lipgloss.Color("#8B008B"), // Dark magenta, 7.42:1
		MdNameAttr:      lipgloss.Color("#4B0082"), // Indigo, 11.31:1
		MdNameClass:     charmtone.Pepper,          // Darkest, bold
		MdNameDecorator: lipgloss.Color("#B7410E"), // Rust, 4.86:1
		MdNameFunc:      lipgloss.Color("#006644"), // Forest green, 6.14:1
		MdNumber:        lipgloss.Color("#800080"), // Purple, 8.22:1
		MdString:        lipgloss.Color("#8B4513"), // Saddle brown, 6.20:1
		MdStringEscape:  lipgloss.Color("#006644"), // Forest green, 6.14:1
		MdDeleted:       lipgloss.Color("#CC2255"), // Dark red, 4.67:1
		MdInserted:      lipgloss.Color("#006644"), // Forest green, 6.14:1
		MdSubheading:    charmtone.Iron,            // 7.37:1
		MdError:         charmtone.Pepper,          // Dark text
		MdErrorBg:       lipgloss.Color("#FFCCCC"), // Light red background

		// Diff colors (light theme - light backgrounds with dark text).
		DiffInsertFg:     lipgloss.Color("#006644"), // Dark green text
		DiffInsertBg:     lipgloss.Color("#D4EDDA"), // Light green bg
		DiffInsertSymBg:  lipgloss.Color("#C3E6CB"), // Slightly darker green
		DiffInsertCodeBg: lipgloss.Color("#D4EDDA"), // Light green bg
		DiffDeleteFg:     lipgloss.Color("#CC2255"), // Dark red text
		DiffDeleteBg:     lipgloss.Color("#F8D7DA"), // Light red bg
		DiffDeleteSymBg:  lipgloss.Color("#F5C6CB"), // Slightly darker red
		DiffDeleteCodeBg: lipgloss.Color("#F8D7DA"), // Light red bg
	}

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

	// LSP and MCP status (improved accessibility).
	t.ItemOfflineIcon = lipgloss.NewStyle().Foreground(charmtone.Oyster).SetString("●")
	t.ItemBusyIcon = t.ItemOfflineIcon.Foreground(charmtone.Citron)
	t.ItemErrorIcon = t.ItemOfflineIcon.Foreground(charmtone.Cherry)
	t.ItemOnlineIcon = t.ItemOfflineIcon.Foreground(charmtone.Turtle)

	t.YoloIconFocused = lipgloss.NewStyle().Foreground(charmtone.Pepper).Background(charmtone.Citron).Bold(true).SetString(" ! ")
	t.YoloIconBlurred = t.YoloIconFocused.Foreground(charmtone.Salt).Background(charmtone.Iron)
	t.YoloDotsFocused = lipgloss.NewStyle().Foreground(charmtone.Zest).SetString(":::")
	t.YoloDotsBlurred = t.YoloDotsFocused.Foreground(charmtone.Oyster)

	return t
}
