from PySide6.QtCore import Qt
from PySide6.QtGui import QColor, QFont
from PySide6.QtWidgets import QFrame, QGraphicsDropShadowEffect, QLabel, QLayout, QSizePolicy, QVBoxLayout, QWidget

from pypos.core.base_view import BaseView


class DashboardInfoView(BaseView, QWidget):
    def __init__(self):
        super().__init__()
        self.setup_ui()

    def setup_ui(self):
        self.box = QFrame()
        self.box.setStyleSheet(
            """
            QFrame {
                background-color: white;
                border-radius: 10px;
                border: 1px solid #ccc;
                border-left: 5px solid #2980b9;
                padding: 20px;
            }
            """
        )
        self.box.setFrameShape(QFrame.StyledPanel)
        self.box.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)

        shadow = QGraphicsDropShadowEffect()
        shadow.setBlurRadius(12)
        shadow.setColor(QColor(0, 0, 0, 50))
        shadow.setOffset(2, 2)
        self.box.setGraphicsEffect(shadow)

        self.label_info = QLabel()
        self.label_info.setFont(QFont("Segoe UI", 11))
        self.label_info.setStyleSheet("color: #2c3e50;")
        self.label_info.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        self.label_info.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.label_info.setText(
            "\U0001F9FE Transaksi Hari Ini\n"
            "\U0001F4B0 0 transaksi | Rp 0\n"
            "\U0001F501 0 retur | Rp 0\n"
            "\U0001F551 Terakhir diperbarui: -"
        )

        box_layout = QVBoxLayout()
        box_layout.addWidget(self.label_info)
        box_layout.setContentsMargins(10, 8, 10, 8)
        box_layout.setSpacing(4)
        box_layout.setSizeConstraint(QLayout.SetMinimumSize)
        self.box.setLayout(box_layout)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.box, alignment=Qt.AlignTop | Qt.AlignLeft)
        main_layout.addStretch()
        main_layout.setContentsMargins(0, 0, 0, 0)
        main_layout.setSpacing(0)
        self.setLayout(main_layout)
        self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)

    def update_info(self, transaksi_count, transaksi_total, retur_count, retur_total):
        from datetime import datetime

        def format_rupiah(angka):
            return f"Rp {angka:,.0f}".replace(",", ".")

        waktu = datetime.now().strftime("%H:%M:%S")
        info_text = (
            "\U0001F9FE Transaksi Hari Ini\n"
            f"\U0001F4B0 {transaksi_count} transaksi | {format_rupiah(transaksi_total)}\n"
            f"\U0001F501 {retur_count} retur | {format_rupiah(retur_total)}\n"
            f"\U0001F551 Terakhir diperbarui: {waktu}"
        )
        self.label_info.setText(info_text)
        self.label_info.adjustSize()
        self.box.adjustSize()
        self.updateGeometry()
