from PySide2.QtCore import Qt, Signal
from PySide2.QtWidgets import QWidget, QHBoxLayout, QVBoxLayout, QGridLayout, QLineEdit, QTextEdit, QPushButton, QLabel, QFrame

from maya.app.general.mayaMixin import MayaQWidgetDockableMixin

import logging_util


class ReporterUI(MayaQWidgetDockableMixin, QWidget):
    submit_report = Signal()
    cancel_report = Signal()
    disable_report = Signal()
    automatic_report = Signal()

    def __init__(self, parent=None):
        super(ReporterUI, self).__init__(parent=parent)

        self.build_ui()
        self.connect_signals()

    def build_ui(self):
        self.setGeometry(50, 50, 450, 300)
        self.setMinimumSize(400, 300)
        self.setWindowTitle('Spore Reporter')

        layout = QVBoxLayout()

        #  self.err_wdg = QWidget()
        #  err_layout = QHBoxLayout(self.err_wdg)
        #  layout.addWidget(err_wdg)
        #
        #  err_lbl = 'Ops..\nSpore seems to have caused an error.\n'

        info_msg = 'Help to improve Spore by anonymously submitting your logs'
        self.info_lbl = QLabel(info_msg)
        layout.addWidget(self.info_lbl)

        self.address_edt = QLineEdit()
        self.address_edt.setPlaceholderText('E-Mail Address (optional)')
        layout.addWidget(self.address_edt)

        self.subject_edt = QLineEdit()
        self.subject_edt.setPlaceholderText('Subject (optional)')
        layout.addWidget(self.subject_edt)

        self.msg_edt = QTextEdit()
        self.msg_edt.setPlaceholderText('Message (optional)')
        self.msg_edt.setFixedHeight(60)
        layout.addWidget(self.msg_edt)

        self.log_edt = QTextEdit()
        self.log_edt.setReadOnly(True)
        self.log_edt.setLineWrapMode(QTextEdit.NoWrap)
        layout.addWidget(self.log_edt)

        ctrl_layout = QGridLayout()
        layout.addLayout(ctrl_layout)

        self.submit_btn = QPushButton('Submit')
        ctrl_layout.addWidget(self.submit_btn, 0, 0, 1, 1)

        self.cancel_btn = QPushButton('Cancel')
        ctrl_layout.addWidget(self.cancel_btn, 0, 1, 1, 1)

        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        ctrl_layout.addWidget(line, 1, 0, 1, 2)

        self.disable_btn = QPushButton('Disable Reporter')
        ctrl_layout.addWidget(self.disable_btn, 2, 0, 1, 1)

        self.auto_btn = QPushButton('Send Reports Automatically')
        ctrl_layout.addWidget(self.auto_btn, 2, 1, 1, 1)

        self.setLayout(layout)

    def connect_signals(self):
        self.submit_btn.clicked.connect(self.submit_report.emit)
        self.cancel_btn.clicked.connect(self.cancel_report.emit)
        self.disable_btn.clicked.connect(self.disable_report.emit)
        self.auto_btn.clicked.connect(self.automatic_report.emit)

    def set_log_text(self, text):
        self.log_edt.setText(text)

    def get_user_input(self):
        address = self.address_edt.text()
        subject = self.subject_edt.text()
        msg = self.msg_edt.toPlainText()
        return address, subject, msg

    def show(self, dockable=True):
        super(ReporterUI, self).show(dockable=dockable)