import tkinter as tk

from ui import styles

_MAX_FILE_LEN = 80


class StatusBar(tk.Frame):
    """Barra de estado con tres filas: sistema, fase y archivo actual."""

    def __init__(self, parent, **kwargs):
        super().__init__(parent, bg=styles.STATUS_BG, relief="groove", bd=1, **kwargs)

        self.columnconfigure(1, weight=1)

        labels = ["Sistema:", "Fase:", "Archivo:"]
        self._values = []

        for row, name in enumerate(labels):
            tk.Label(
                self,
                text=name,
                font=styles.FONT_LABEL + ("bold",),
                bg=styles.STATUS_BG,
                fg=styles.STATUS_LABEL_FG,
                anchor="w",
                width=9,
            ).grid(row=row, column=0, sticky="w", padx=(10, 4), pady=3)

            val = tk.Label(
                self,
                text="-",
                font=styles.FONT_SMALL,
                bg=styles.STATUS_BG,
                fg=styles.STATUS_VALUE_FG,
                anchor="w",
            )
            val.grid(row=row, column=1, sticky="ew", padx=(0, 10), pady=3)
            self._values.append(val)

    def set_system(self, text: str) -> None:
        # Eliminar el prefijo "Sistema: " si viene incluido (compatibilidad con app.py)
        if text.startswith("Sistema: "):
            text = text[len("Sistema: "):]
        self._values[0].config(text=text)
        self._values[0].update_idletasks()

    def set_phase(self, text: str) -> None:
        if text.startswith("Fase: "):
            text = text[len("Fase: "):]
        self._values[1].config(text=text)
        self._values[1].update_idletasks()

    def set_file(self, text: str) -> None:
        if len(text) > _MAX_FILE_LEN:
            text = "..." + text[-(_MAX_FILE_LEN - 3):]
        self._values[2].config(text=text)
        self._values[2].update_idletasks()

    def reset(self) -> None:
        self._values[0].config(text="✅ COMPLETADO")
        self._values[1].config(text="-")
        self._values[2].config(text="-")
