# colors.py - Color library for LED matrix

# Basic Colors
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

# Primary Colors
YELLOW = (255, 255, 0)
MAGENTA = (255, 0, 255)
CYAN = (0, 255, 255)

# White and Black
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)

# Grayscale
GRAY = (128, 128, 128)
LIGHT_GRAY = (192, 192, 192)
DARK_GRAY = (64, 64, 64)

# Warm Colors
ORANGE = (255, 165, 0)
PINK = (255, 192, 203)
HOT_PINK = (255, 105, 180)
CORAL = (255, 127, 80)
TOMATO = (255, 99, 71)

# Cool Colors
PURPLE = (128, 0, 128)
INDIGO = (75, 0, 130)
VIOLET = (238, 130, 238)
LAVENDER = (230, 230, 250)

# Earth Tones
BROWN = (165, 42, 42)
CHOCOLATE = (210, 105, 30)
SANDY_BROWN = (244, 164, 96)
GOLD = (255, 215, 0)

# Bright Colors
LIME = (0, 255, 0)
AQUA = (0, 255, 255)
TURQUOISE = (64, 224, 208)
SPRING_GREEN = (0, 255, 127)

# Pastel Colors
PASTEL_RED = (255, 128, 128)
PASTEL_GREEN = (128, 255, 128)
PASTEL_BLUE = (128, 128, 255)
PASTEL_YELLOW = (255, 255, 128)
PASTEL_PURPLE = (255, 128, 255)
PASTEL_CYAN = (128, 255, 255)

# Neon Colors
NEON_RED = (255, 0, 0)
NEON_GREEN = (57, 255, 20)
NEON_BLUE = (0, 0, 255)
NEON_YELLOW = (255, 255, 0)
NEON_PINK = (255, 0, 128)
NEON_ORANGE = (255, 128, 0)

# Rainbow Colors (for rainbow effects)
RAINBOW = [
	(255, 0, 0),  # Red
	(255, 127, 0),  # Orange
	(255, 255, 0),  # Yellow
	(0, 255, 0),  # Green
	(0, 0, 255),  # Blue
	(75, 0, 130),  # Indigo
	(148, 0, 211),  # Violet
]

# Holiday Colors
CHRISTMAS_RED = (255, 0, 0)
CHRISTMAS_GREEN = (0, 255, 0)
HALLOWEEN_ORANGE = (255, 140, 0)
HALLOWEEN_PURPLE = (128, 0, 128)


# Utility function to create custom colors
def rgb(r, g, b):
	"""Create a color from RGB values (0-255)"""
	return (r, g, b)


def hex_to_rgb(hex_color):
	"""Convert hex color (#RRGGBB) to RGB tuple"""
	hex_color = hex_color.lstrip('#')
	return tuple(int(hex_color[i : i + 2], 16) for i in (0, 2, 4))


def fade_color(color1, color2, factor):
	"""Fade between two colors (factor 0.0 to 1.0)"""
	r = int(color1[0] + (color2[0] - color1[0]) * factor)
	g = int(color1[1] + (color2[1] - color1[1]) * factor)
	b = int(color1[2] + (color2[2] - color1[2]) * factor)
	return (r, g, b)
