"""Renkli log mesajlarını gösteren panel."""
from __future__ import annotations
from datetime import datetime

from PySide6.QtCore import Qt
from PySide6.QtGui import QTextCursor, QTextCharFormat, QColor
from PySide6.QtWidgets import QTextEdit, QWidget, QVBoxLayout, QLabel, QPushButton, QHBoxLayout


RENKLER = {
    "bilgi": "#cbd5e1",
    "uyari": "#f59e0b",
    "hata": "#ef4444",
    "basari": "#22c55e",
}


class LogPaneli(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        l = QVBoxLayout(self)
        l.setContentsMargins(10, 6, 10, 10)
        l.setSpacing(6)

        ust = QHBoxLayout()
        basl = QLabel("📋 Log")
        basl.setObjectName("altbaslik")
        ust.addWidget(basl)
        ust.addStretch(1)
        self.temizle = QPushButton("Temizle")
        self.temizle.setFixedWidth(90)
        self.temizle.clicked.connect(lambda: self.metin.clear())
        ust.addWidget(self.temizle)
        l.addLayout(ust)

        self.metin = QTextEdit()
        self.metin.setReadOnly(True)
        self.metin.setStyleSheet("""
            QTextEdit {
                background-color: #0a0c10;
                border: 1px solid #262c38;
                border-radius: 8px;
                font-family: "Cascadia Mono", "Consolas", monospace;
                font-size: 12px;
                padding: 6px;
            }
        """)
        l.addWidget(self.metin, 1)

    def log_ekle(self, seviye: str, mesaj: str) -> None:
        renk = RENKLER.get(seviye, "#cbd5e1")
        etiket = {
            "bilgi": "BİLGİ ",
            "uyari": "UYARI ",
            "hata":  "HATA  ",
            "basari": "OK    ",
        }.get(seviye, "INFO  ")
        zaman = datetime.now().strftime("%H:%M:%S")

        cur = self.metin.textCursor()
        cur.movePosition(QTextCursor.MoveOperation.End)
        fmt = QTextCharFormat()
        fmt.setForeground(QColor("#6b7280"))
        cur.setCharFormat(fmt)
        cur.insertText(f"[{zaman}] ")

        fmt.setForeground(QColor(renk))
        cur.setCharFormat(fmt)
        cur.insertText(f"{etiket} ")

        fmt.setForeground(QColor("#e5e7eb"))
        cur.setCharFormat(fmt)
        cur.insertText(mesaj + "\n")

        self.metin.setTextCursor(cur)
        self.metin.ensureCursorVisible()
