// Package model provides TUI data structures and state management
package model

import (
	"github.com/charmbracelet/bubbles/list"
	"github.com/charmbracelet/lipgloss"
)

// Status colors for job list items
var (
	// StatusRunningColor is green for running jobs
	StatusRunningColor = lipgloss.Color("#2ecc71")
	// StatusPendingColor is yellow for pending jobs
	StatusPendingColor = lipgloss.Color("#f1c40f")
	// StatusFailedColor is red for failed jobs
	StatusFailedColor = lipgloss.Color("#e74c3c")
	// StatusFinishedColor is blue for completed jobs
	StatusFinishedColor = lipgloss.Color("#3498db")
	// StatusQueuedColor is gray for queued jobs
	StatusQueuedColor = lipgloss.Color("#95a5a6")
)

// StatusColor returns the color for a job status
func StatusColor(status JobStatus) lipgloss.Color {
	switch status {
	case StatusRunning:
		return StatusRunningColor
	case StatusPending:
		return StatusPendingColor
	case StatusFailed:
		return StatusFailedColor
	case StatusFinished:
		return StatusFinishedColor
	case StatusQueued:
		return StatusQueuedColor
	default:
		return lipgloss.Color("#ffffff")
	}
}

// NewJobListDelegate creates a styled delegate for the job list
func NewJobListDelegate() list.DefaultDelegate {
	delegate := list.NewDefaultDelegate()
	delegate.Styles.SelectedTitle = delegate.Styles.SelectedTitle.
		Foreground(lipgloss.Color("170")).
		Bold(true)
	delegate.Styles.SelectedDesc = delegate.Styles.SelectedDesc.
		Foreground(lipgloss.Color("246"))
	return delegate
}

// JobListTitleStyle returns the style for the job list title
func JobListTitleStyle() lipgloss.Style {
	return lipgloss.NewStyle().
		Bold(true).
		Foreground(lipgloss.AdaptiveColor{Light: "#2980b9", Dark: "#7aa2f7"}).
		Padding(0, 0, 1, 0)
}

// SpinnerStyle returns the style for the spinner
func SpinnerStyle() lipgloss.Style {
	return lipgloss.NewStyle().
		Foreground(lipgloss.AdaptiveColor{Light: "#2980b9", Dark: "#7aa2f7"})
}
