#include "messageDialog.h"
#include "ui_messageDialog.h"
#include <QtMath>

int getStringLength(const QString& str)
{
    int chineseCharCount = 0;
    int englishCharCount = 0;
    for(QChar ch : str)
    {
        ushort unicode = ch.unicode();
        if(unicode >= 0x4E00 && unicode <= 0x9FFF)
            chineseCharCount++;
        else if (ch.isLetter())
            englishCharCount++;
    }

    return chineseCharCount + englishCharCount * 0.6; //一个英文字符大概是0.6个中文字符长度
}
int getIndexForLength(const QString& str, int maxLength)
{
    float length = 0.0;
    int index = 0;
    for(QChar ch : str)
    {
        ushort unicode = ch.unicode();
        if(unicode >= 0x4E00 && unicode <= 0x9FFF)
            length = length + 1.0;
        else if (ch.isLetter())
            length = length + 0.6;

        if(qCeil(length) >= maxLength)
            break;
        else
            index++;
    }

    return index;
}

MessageDialog::MessageDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::messageDialog)
{
    ui->setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
    setAttribute(Qt::WA_TranslucentBackground);
    ui->btnClose->setVisible(false);

    connect(ui->btnConfrim, SIGNAL(clicked()), this, SLOT(onBtnClicked_confirm()));
    connect(ui->btnYes, SIGNAL(clicked()), this, SLOT(onBtnClicked_yes()));
    connect(ui->btnNo, SIGNAL(clicked()), this, SLOT(onBtnClicked_no()));
}

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

void MessageDialog::setType(MessageDialogType type)
{
    if(type == type_information)
    {
        ui->typeLabel->setStyleSheet("border-image: url(:/images/icon_information.png);");
        ui->typeColor->setStyleSheet("background-color:rgb(64,182,113);");
        ui->stackedWidget->setCurrentIndex(0);
    }
    else if(type == type_question)
    {
        ui->typeLabel->setStyleSheet("border-image: url(:/images/icon_exclamation.png);");
        ui->typeColor->setStyleSheet("background-color:rgb(245,166,88);");
        ui->stackedWidget->setCurrentIndex(1);
    }
    else if(type == type_warning)
    {
        ui->typeLabel->setStyleSheet("border-image: url(:/images/icon_no.png);");
        ui->typeColor->setStyleSheet("background-color:rgb(200,68,56);");
        ui->stackedWidget->setCurrentIndex(0);
    }
}

void MessageDialog::setMessage(MessageDialogType type,const QString& strTitle,const QString& strContent)
{
    setType(type);
    int maxLength = 25;
    ui->labelTitle->setText(strTitle);
    //qInfo() << getStringLength(strContent);
    if(getStringLength(strContent) > maxLength)
    {
        QString strText(strContent);
        int index = getIndexForLength(strContent, maxLength);
        //qInfo() << index;
        strText.insert(index, "\n"); //实现简单自动换行
        ui->labelContent->setText(strText);
    }
    else
        ui->labelContent->setText(strContent);
}

void MessageDialog::onBtnClicked_confirm()
{
    hide();
    emit sgl_hide();
}

void MessageDialog::onBtnClicked_yes()
{
    g_msgDlgBtn = btn_Yes;
    hide();
    emit sgl_hide();
}

void MessageDialog::onBtnClicked_no()
{
    g_msgDlgBtn = btn_No;
    hide();
    emit sgl_hide();
}

