# edited by glg
from PySide6.QtWidgets import QComboBox, QFormLayout, QGroupBox, QLabel, QVBoxLayout, QWidget


class HistorySettingsView(QWidget):
    def __init__(self, controller, parent=None):
        super().__init__(parent)
        self.controller = controller
        self._loading = False
        self._build_ui()
        self._load_retention()

    def _build_ui(self):
        layout = QVBoxLayout(self)
        layout.setContentsMargins(8, 8, 8, 8)
        layout.setSpacing(10)

        usage_label = QLabel(
            "Pengaturan history transaksi untuk kasir:\n"
            "1. Pilih lama penyimpanan transaksi.\n"
            "2. Perubahan tersimpan otomatis saat pilihan diganti.\n"
            "3. Data yang melewati batas hari akan dibersihkan otomatis dari history."
        )
        usage_label.setWordWrap(True)
        usage_label.setStyleSheet(
            "background-color: #f5f8fc; border: 1px solid #dbe5f0; "
            "padding: 8px; border-radius: 4px;"
        )
        layout.addWidget(usage_label)

        box = QGroupBox("Pengaturan History Transaksi")
        form = QFormLayout()
        form.setSpacing(8)

        self.retention_combo = QComboBox()
        self.retention_options = [
            ("1 minggu", 7),
            ("2 minggu", 14),
            ("3 minggu", 21),
            ("1 bulan", 30),
            ("2 bulan", 60),
            ("3 bulan", 90),
        ]
        for label, days in self.retention_options:
            self.retention_combo.addItem(label, days)

        form.addRow(QLabel("Simpan data transaksi selama:"), self.retention_combo)
        self.retention_summary_label = QLabel("-")
        self.retention_summary_label.setWordWrap(True)
        self.retention_summary_label.setStyleSheet("color: #4b5563;")
        form.addRow(QLabel("Keterangan"), self.retention_summary_label)
        box.setLayout(form)
        layout.addWidget(box)
        layout.addStretch(1)

        self.retention_combo.currentIndexChanged.connect(self._on_retention_changed)

    def _load_retention(self):
        self._loading = True
        try:
            current_days = int(self.controller.get_history_retention_days() or 30)
            selected_index = 0
            for idx in range(self.retention_combo.count()):
                if int(self.retention_combo.itemData(idx)) == current_days:
                    selected_index = idx
                    break
            self.retention_combo.setCurrentIndex(selected_index)
            self._update_retention_summary()
        finally:
            self._loading = False

    def _on_retention_changed(self, index):
        if self._loading or index < 0:
            return
        days = int(self.retention_combo.itemData(index))
        self.controller.set_history_retention_days(days)
        self._update_retention_summary()

    def _update_retention_summary(self):
        index = self.retention_combo.currentIndex()
        if index < 0:
            self.retention_summary_label.setText("-")
            return
        label = str(self.retention_combo.currentText() or "-")
        days = int(self.retention_combo.itemData(index) or 0)

        dampak = "cocok untuk transaksi padat agar aplikasi tetap ringan."
        if days >= 60:
            dampak = "cocok jika outlet sering mencari transaksi lama."
        elif days >= 30:
            dampak = "seimbang antara kebutuhan pencarian transaksi dan performa."
        elif days >= 14:
            dampak = "cocok untuk outlet dengan kebutuhan history jangka pendek."

        self.retention_summary_label.setText(
            f"Pilihan aktif: <b>{label}</b> ({days} hari). "
            f"Data yang lebih lama dari {days} hari akan dibersihkan otomatis; {dampak}"
        )
