from PySide6.QtCore import QPropertyAnimation, QEasingCurve
from PySide6.QtWidgets import QGraphicsDropShadowEffect

from config.constants import Glow


class GlowAnimator:
    # Gère l'effet de lueur pulsée sur un widget.

    def __init__(self, widget):
        self._widget = widget

        self._effect = QGraphicsDropShadowEffect(widget)
        self._effect.setBlurRadius(Glow.BLUR_BASE.value)
        self._effect.setOffset(0, 0)
        self._effect.setColor(Glow.COLOR.value)

        self._anim = QPropertyAnimation(self._effect, b"blurRadius")
        self._anim.setDuration(Glow.ANIM_DURATION.value)
        self._anim.setStartValue(Glow.BLUR_BASE.value)
        self._anim.setKeyValueAt(0.5, Glow.BLUR_PEAK.value)
        self._anim.setEndValue(Glow.BLUR_BASE.value)
        self._anim.setEasingCurve(QEasingCurve.InOutQuad)
        self._anim.setLoopCount(-1)

    def start(self) -> None:
        self._widget.setGraphicsEffect(self._effect)
        self._anim.start()

    def stop(self) -> None:
        self._anim.stop()
        self._widget.setGraphicsEffect(None)
