import re
import tkinter as tk
from tkinter import filedialog, ttk

HEX_REGEX = r"#(?:[0-9a-fA-F]{3}){1,2}"
RGB_REGEX = r"rgb\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*\)"
RGBA_REGEX = r"rgba\(\s*\d+\s*,\s*\d+\s*,\s*\d+\s*,\s*[\d\.]+\s*\)"

def extract_colors(css_text):
    colors = set()
    colors.update(re.findall(HEX_REGEX, css_text))
    colors.update(re.findall(RGB_REGEX, css_text))
    colors.update(re.findall(RGBA_REGEX, css_text))
    return sorted(colors)

def css_color_to_hex(color):
    if color.startswith("#"):
        if len(color) == 4:
            return "#" + "".join(c*2 for c in color[1:])
        return color
    if color.startswith("rgb"):
        nums = re.findall(r"\d+", color)
        r, g, b = nums[:3]
        return "#{:02x}{:02x}{:02x}".format(int(r), int(g), int(b))
    return "#000000"

def open_css():
    path = filedialog.askopenfilename(filetypes=[("CSS Files", "*.css")])
    if not path:
        return

    with open(path, "r", encoding="utf-8", errors="ignore") as f:
        css_text = f.read()

    for widget in frame.winfo_children():
        widget.destroy()

    colors = extract_colors(css_text)

    for color in colors:
        hex_color = css_color_to_hex(color)

        row = tk.Frame(frame)
        row.pack(fill="x", pady=3)

        swatch = tk.Label(row, bg=hex_color, width=10, height=2)
        swatch.pack(side="left", padx=5)

        label = tk.Label(row, text=color, font=("Arial", 11))
        label.pack(side="left", padx=10)

# UI
root = tk.Tk()
root.title("CSS Renk Görüntüleyici")
root.geometry("450x500")

btn = tk.Button(root, text="style.css Seç", command=open_css)
btn.pack(pady=10)

canvas = tk.Canvas(root)
scrollbar = ttk.Scrollbar(root, orient="vertical", command=canvas.yview)
frame = tk.Frame(canvas)

frame.bind(
    "<Configure>",
    lambda e: canvas.configure(scrollregion=canvas.bbox("all"))
)

canvas.create_window((0, 0), window=frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)

canvas.pack(side="left", fill="both", expand=True)
scrollbar.pack(side="right", fill="y")

root.mainloop()
