#pragma once

#include <QtWidgets>
#include "../QtStylesheet.h"

namespace jlib
{
namespace qt
{

class RndButton : public QWidget
{
	Q_OBJECT

public:
	RndButton(QWidget *parent)
		: QWidget(parent)
	{
		txt_ = new QLabel(this);
		txt_->setAlignment(Qt::AlignCenter);
		txt_->hide();
	}

	~RndButton() {}

	void set_attr(QString txt, QSize btn_sz = { 60, 30 }, int font_size = 14) {
		font_sz_ = font_size;
		txt_->setStyleSheet(build_style(Qt::white, font_size));
		txt_->setText(txt);
		setFixedSize(btn_sz);

		/*QPixmap pixmap;
		LOAD_PIXMAP_EX(QString::fromLocal8Bit("Skin/Ӧ�ÿ�1.png"));
		QSize pixSize = pixmap.size();
		pixSize.scale(sz, Qt::KeepAspectRatio);
		pixmap_ = pixmap.scaled(pixSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);*/

		txt_->resize(size());
		txt_->move(0, 0);
		txt_->show();

		bk_color_ = def_colors::control_bk;

		update();
	}

	void set_highlight(bool on = true) {
		is_highlighted_ = on;
		bk_color_ = is_highlighted_ ? Qt::lightGray : def_colors::control_bk;
		update();
	}

protected:
	virtual void paintEvent(QPaintEvent* e) override {
		QPainter painter(this);
		painter.setRenderHint(QPainter::Antialiasing, true);
		QPainterPath path;
		//int radius = std::min(rect().width() / 20, rect().height() / 20);
		path.addRoundedRect(QRectF(0, 0, width(), height()), 10, 10);
		QPen pen(Qt::black, 1);
		painter.setPen(pen);
		painter.fillPath(path, bk_color_);
		painter.drawPath(path);
	}
	virtual void enterEvent(QEvent* e) override {
		setCursor(QCursor(Qt::PointingHandCursor));
		bk_color_ = Qt::darkGray;
		update();
	}

	virtual void leaveEvent(QEvent* e) override {
		setCursor(QCursor(Qt::ArrowCursor));

		bk_color_ = is_highlighted_ ? Qt::lightGray : def_colors::control_bk;
		update();

		is_pressed_ = false;
	}

	virtual void mousePressEvent(QMouseEvent* e) override {
		bk_color_ = def_colors::control_bk;
		update();

		is_pressed_ = true;
	}

	virtual void mouseReleaseEvent(QMouseEvent* e) override {
		bk_color_ = Qt::darkGray;
		update();

		if (is_pressed_) {
			emit clicked();
			is_pressed_ = false;
		}
	}

signals:
	void clicked();

private:
	QLabel* txt_ = {};
	QPixmap pixmap_ = {};
	int font_sz_ = {};
	QColor bk_color_ = {};
	QColor txt_color_ = {};
	bool is_pressed_ = false;
	bool is_highlighted_ = false;
};

}
}