package logger

import (
	"fmt"
	"os"

	"github.com/fatih/color"
)

// CLI output helpers using fatih/color for cross-platform support

// Success prints a success message with green checkmark
func Success(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	SuccessColor.Fprint(os.Stdout, "✓ ")
	fmt.Println(msg)
}

// Error prints an error message with red X
func Error(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	ErrorColor.Fprint(os.Stderr, "✗ ")
	fmt.Fprintln(os.Stderr, msg)
}

// Warning prints a warning message with yellow exclamation
func Warning(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	WarnColor.Fprint(os.Stdout, "⚠ ")
	fmt.Println(msg)
}

// Info prints an info message with blue arrow
func Info(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	InfoColor.Fprint(os.Stdout, "→ ")
	fmt.Println(msg)
}

// Header prints a bold header
func Header(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	HighlightColor.Println(msg)
}

// Dim prints dimmed/secondary text
func Dim(format string, args ...interface{}) {
	msg := fmt.Sprintf(format, args...)
	DimColor.Println(msg)
}

// Bold returns bold text
func Bold(text string) string {
	return color.New(color.Bold).Sprint(text)
}

// Green returns green text
func Green(text string) string {
	return SuccessColor.Sprint(text)
}

// Red returns red text
func Red(text string) string {
	return ErrorColor.Sprint(text)
}

// Yellow returns yellow text
func Yellow(text string) string {
	return WarnColor.Sprint(text)
}

// Cyan returns cyan text
func Cyan(text string) string {
	return InfoColor.Sprint(text)
}

// StatusLine prints a key-value status line
func StatusLine(key, value string) {
	DimColor.Printf("  %s: ", key)
	fmt.Println(value)
}

// ProgressStatus prints operation status with timing
func ProgressStatus(operation string, status string, isSuccess bool) {
	if isSuccess {
		SuccessColor.Print("[OK] ")
	} else {
		ErrorColor.Print("[FAIL] ")
	}
	fmt.Printf("%s: %s\n", operation, status)
}

// Table prints a simple formatted table row
func TableRow(cols ...string) {
	for i, col := range cols {
		if i == 0 {
			InfoColor.Printf("%-20s", col)
		} else {
			fmt.Printf("%-15s", col)
		}
	}
	fmt.Println()
}

// DisableColors disables all color output (for non-TTY or --no-color flag)
func DisableColors() {
	color.NoColor = true
}

// EnableColors enables color output
func EnableColors() {
	color.NoColor = false
}

// IsColorEnabled returns whether colors are enabled
func IsColorEnabled() bool {
	return !color.NoColor
}
