from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

from app.DataBase.output_pc import Output
from app.ui_pc.Icon import Icon
from .contactInfoUi import Ui_Form
from .userinfo import userinfo


class ContactInfo(QWidget, Ui_Form):
    exitSignal = pyqtSignal()
    urlSignal = pyqtSignal(QUrl)

    # username = ''
    def __init__(self, contact, parent=None):
        super(ContactInfo, self).__init__(parent)
        self.setupUi(self)
        self.contact = contact
        self.view_userinfo = userinfo.UserinfoController(self.contact)
        self.btn_back.clicked.connect(self.back)
        self.init_ui()

    def init_ui(self):
        self.btn_back.setIcon(Icon.Back)
        self.btn_report.setIcon(Icon.Annual_Report_Icon)
        self.btn_analysis.setIcon(Icon.Analysis_Icon)
        self.btn_emotion.setIcon(Icon.Emotion_Icon)
        self.label_remark.setText(self.contact.remark)
        self.stackedWidget.addWidget(self.view_userinfo)
        self.stackedWidget.setCurrentWidget(self.view_userinfo)
        menu = QMenu(self)
        self.toDocxAct = QAction(Icon.ToDocx, '导出Docx', self)
        self.toCSVAct = QAction(Icon.ToCSV, '导出CSV', self)
        self.toHtmlAct = QAction(Icon.ToHTML, '导出HTML', self)
        self.toolButton_output.setPopupMode(QToolButton.MenuButtonPopup)
        self.toolButton_output.clicked.connect(self.toolButton_show)
        menu.addAction(self.toDocxAct)
        menu.addAction(self.toCSVAct)
        menu.addAction(self.toHtmlAct)
        self.toolButton_output.setMenu(menu)
        self.toolButton_output.setIcon(Icon.Output)
        # self.toolButton_output.addSeparator()
        self.toHtmlAct.triggered.connect(self.output)
        self.toDocxAct.triggered.connect(self.output)
        self.toCSVAct.triggered.connect(self.output)

    def toolButton_show(self):
        self.toolButton_output.showMenu()

    def analysis(self):
        self.stackedWidget.setCurrentWidget(self.view_analysis)
        if 'room' in self.contact.wxid:
            QMessageBox.warning(
                self, '警告',
                '暂不支持群组'
            )
            return
        self.view_analysis.start()

    def annual_report(self):
        QMessageBox.warning(
            self,
            "提示",
            "敬请期待"
        )
        return
        # self.report = report.ReportController(self.contact)
        # self.report.show()

    def emotionale_Analysis(self):
        self.stackedWidget.setCurrentWidget(self.view_emotion)
        if 'room' in self.contact.wxid:
            QMessageBox.warning(
                self, '警告',
                '暂不支持群组'
            )
            return
        self.view_emotion.start()

    def back(self):
        """
        将userinfo界面设置为可见，其他界面设置为不可见
        """
        self.stackedWidget.setCurrentWidget(self.view_userinfo)

    def output(self):
        """
        导出聊天记录
        :return:
        """
        self.stackedWidget.setCurrentWidget(self.view_userinfo)
        if self.sender() == self.toDocxAct:
            print('功能暂未实现')
            QMessageBox.warning(self,
                                "别急别急",
                                "马上就实现该功能"
                                )
            return
            self.outputThread = Output(self.Me, self.contact.wxid)
        elif self.sender() == self.toCSVAct:
            self.outputThread = Output(self.contact, type_=Output.CSV)
        elif self.sender() == self.toHtmlAct:
            self.outputThread = Output(self.contact, type_=Output.HTML)

        self.outputThread.progressSignal.connect(self.output_progress)
        self.outputThread.rangeSignal.connect(self.set_progressBar_range)
        self.outputThread.okSignal.connect(self.hide_progress_bar)
        self.outputThread.start()

    def hide_progress_bar(self, int):
        reply = QMessageBox(self)
        reply.setIcon(QMessageBox.Information)
        reply.setWindowTitle('OK')
        reply.setText(f"导出聊天记录成功\n在.\\data\\目录下")
        reply.addButton("确认", QMessageBox.AcceptRole)
        reply.addButton("取消", QMessageBox.RejectRole)
        api = reply.exec_()
        self.view_userinfo.progressBar.setVisible(False)

    def output_progress(self, value):
        self.view_userinfo.progressBar.setProperty('value', value)

    def set_progressBar_range(self, value):
        print('进度条范围', value)
        self.view_userinfo.progressBar.setVisible(True)
        self.view_userinfo.progressBar.setRange(0, value)
