#include "notifications_label_widget.h"

#include <QtWidgets>

NotificationsLabelWidget::NotificationsLabelWidget(QWidget * parent)
	:QWidget(parent)
{
    QVBoxLayout *layout = new QVBoxLayout;
    layout->setSpacing(0);
    layout->setMargin(0);

	setAttribute(Qt::WA_LayoutUsesWidgetRect,true);
	effect = new QGraphicsOpacityEffect(this);
	effect->setOpacity(1.0);

	effect2= new QGraphicsOpacityEffect(this);
	effect->setOpacity(1.0);

	anim = new QPropertyAnimation(effect,"opacity");
	anim->setDuration(500);
	anim->setStartValue(1.0);
	anim->setEndValue(0.0);
	anim->setEasingCurve(QEasingCurve::InExpo);

	anim2 = new QPropertyAnimation(effect2,"opacity");
	anim2->setDuration(500);
	anim2->setStartValue(1.0);
	anim2->setEndValue(0.0);
	anim2->setEasingCurve(QEasingCurve::InExpo);
	anim2->start();	

	connect(anim,SIGNAL(finished()),this,SLOT(hide()));

	textLabel = new QLabel(this);
	textLabel->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
	textLabel->setStyleSheet("QLabel { color : white; font-size:24px; }");
	textLabel->setAttribute(Qt::WA_LayoutUsesWidgetRect,true);

    textLabel->setFixedSize(200, 120);

    //TODO check if the effects still be broken in OSX yet
#ifndef Q_OS_MAC
    this->setGraphicsEffect(effect);
	textLabel->setGraphicsEffect(effect2);
#endif

    layout->addWidget(textLabel);
    setLayout(layout);

    setFixedSize(200, 120);
	updatePosition();
}

void NotificationsLabelWidget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    QPainterPath path;
    path.addRoundedRect(QRectF(0, 0, width(), height()), 5.0, 5.0);
    painter.setPen(Qt::NoPen);
    painter.fillPath(path, QColor("#BB000000"));
    painter.drawPath(path);
}

void NotificationsLabelWidget::flash()
{
	updatePosition();
	anim->stop();
	anim2->stop();
	anim->start();
	anim2->start();

	setVisible(true);
}

void NotificationsLabelWidget::setText(const QString & text)
{
	textLabel->setText(text);
}

void NotificationsLabelWidget::updatePosition()
{
	QWidget * parent = dynamic_cast<QWidget *>(this->parent());
	if(parent == 0)
	{
		return;
	}
	move(QPoint((parent->geometry().size().width()-this->width())/2,(parent->geometry().size().height()-this->height())/2));
}