from __future__ import annotations

from PySide6.QtWidgets import (
    QDialog, QVBoxLayout, QHBoxLayout, QLabel, QTextEdit, QPushButton,
    QTabWidget, QWidget
)

from mi100.repository import Repo

BTN_GREEN = (
    "QPushButton{background:#4FAF7A;color:#FFFFFF;border:1px solid #459E6E;"
    "border-radius:4px;padding:4px 10px;font-weight:600;}"
    "QPushButton:hover{background:#459E6E;}"
)


class EmailTemplatesDialog(QDialog):
    TEMPLATE_KEYS = [
        ("client_invoice", "Рахунок для замовника"),
        ("client_act", "Акт для замовника"),
        ("client_report", "Звіт для замовника"),
        ("actor_report", "Звіт для підрядника"),
    ]

    def __init__(self, repo: Repo, parent=None):
        super().__init__(parent)
        self.repo = repo
        self.setWindowTitle("Шаблони тексту листів")
        self.resize(820, 520)
        self._edits: dict[str, QTextEdit] = {}

        root = QVBoxLayout(self)
        title = QLabel("Шаблони тексту листів")
        title.setStyleSheet("font-size:12pt; font-weight:700;")
        root.addWidget(title)
        hint = QLabel(
            "Доступні шорткоди для текстів листів: {doc_number}, {recipient_name}."
        )
        hint.setWordWrap(True)
        root.addWidget(hint)

        tabs = QTabWidget()
        for key, label in self.TEMPLATE_KEYS:
            page = QWidget()
            lay = QVBoxLayout(page)
            edit = QTextEdit()
            edit.setPlainText(self.repo.get_email_template(key))
            lay.addWidget(edit)
            self._edits[key] = edit
            tabs.addTab(page, label)
        root.addWidget(tabs, 1)

        actions = QHBoxLayout()
        actions.addStretch(1)
        btn_cancel = QPushButton("Скасувати")
        btn_cancel.clicked.connect(self.reject)
        actions.addWidget(btn_cancel)
        btn_save = QPushButton("Зберегти")
        btn_save.setStyleSheet(BTN_GREEN)
        btn_save.clicked.connect(self._save)
        actions.addWidget(btn_save)
        root.addLayout(actions)

    def _save(self) -> None:
        for key, edit in self._edits.items():
            self.repo.set_email_template(key, edit.toPlainText().rstrip())
        self.accept()
