#include "warning.h"
#include "ui_warning.h"

#include <QPainter>
#include <QLayout>
#include <QDebug>


#include "spdlog/spdlog.h"
#include "oneshadow.h"

Warning::Warning(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Warning)
{
    ui->setupUi(this);
    /* 设置无边框和背景透明 */
    this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
    this->setAttribute(Qt::WA_TranslucentBackground);

    /* 设置文字自动换行 */
    ui->label_Warn->setWordWrap(true);
    /* 设置文本居中 */
    // ui->label_Warn->setAlignment(Qt::AlignCenter);
    ui->label_Warn->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
    /* 加载警告图标 */
    ui->label_warnIcon->setStyleSheet(R"(border-image: url(:/ESM-8C_ICON/Tip/Tips2x.png);)");

    /* 阴影宽度是16 */
    this->layout()->setMargin(SHADOW_W);
    m_shadow = new OneShadow(QSize(width() - SHADOW_W*2, height() - SHADOW_W*2),SHADOW_W);

    connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close()));
    connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close()));
    connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok()));
}

Warning::~Warning()
{
    delete ui;
}

void Warning::setText(const QString &text)
{
    /* 根据文本大小设置高度 */
    ui->label_Warn->setText(text);
    /* 重新设置位置 */
    resetLabelSize();
    moveWarnICON();
}

/* 只有一个确定按钮 */
void Warning::setTextWithOneButton(const QString &text)
{
    ui->pBtn_cancel->hide();
    // ui->pBtn_ok->move(ui->pBtn_cancel->x(),ui->pBtn_cancel->y());
    ui->label_Warn->setText(text);
    /* 重新设置位置 */
    resetLabelSize();
    moveWarnICON();
}

void Warning::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    /* 绘制阴影 */
    painter.drawImage(QPoint(0,0),m_shadow->image());
}



void Warning::do_ok()
{
    emit signal_ok();
    m_isOk = true;
    this->close();
}

/**
 * @brief 重新设置显示文字的区域大小,主要是设置宽度,为计算出左侧的图标位置
 *        字号是18,每个汉字的宽度、高度都是18,行高是27。
 *        文字显示区域最大宽度是306,显示17个汉字。
 *        阴影宽度是16,需要加上阴影宽度的坐标。
 * 
 */
void Warning::resetLabelSize()
{
    int TextCount = ui->label_Warn->text().count();
    int width = TextCount * 18;
    if(width > 306)
    {
        width = 306;
    }
    // ui->label_Warn->setFixedWidth(width);
    ui->label_Warn->resize(width, ui->label_Warn->height());
    /* ui->widget是布局确定的大小,获取它的大小不准确 */
    int widgetWidth = this->width();
    int x = (widgetWidth - width) / 2;
    // int x = (widgetWidth - width - ui->label_warnIcon->width() - 12) / 2;
    // x = x + ui->label_warnIcon->width() + 12; /* 加上图标的宽度,和图标之间的间距 */
    ui->label_Warn->move(x, ui->label_Warn->y());
}


/* 移动警告图标 */
void Warning::moveWarnICON()
{
    int x = ui->label_Warn->x() - ui->label_warnIcon->width() - 12;
    int y = ui->label_Warn->y() + ui->label_Warn->height() / 2 - ui->label_warnIcon->height() / 2;
    ui->label_warnIcon->move(x,y);
}