"""
GUISCRCPY by srevinsaju
Get it on : https://github.com/srevinsaju/guiscrcpy
Licensed under GNU Public License

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
"""

import logging
import uuid

from qtpy import QtGui, QtWidgets, QtCore
from qtpy.QtCore import Qt, QPoint
from qtpy.QtWidgets import QMainWindow

from guiscrcpy.lib.toolkit import UXMapper


class SwipeUX(QMainWindow):
    def __init__(self, ux_wrapper=None, frame=False, always_on_top=True):
        """
        Swipe UI
        :param ux_wrapper: UXMapper type object
        :param frame: bool
        :param always_on_top: bool
        """
        QMainWindow.__init__(self)
        self.oldPos = None
        self.name = "swipe"
        self.uid = uuid.uuid4()

        # =================
        if ux_wrapper:
            self.ux = ux_wrapper
        else:
            self.ux = UXMapper()
        hexdigest = self.ux.get_sha()[:6]

        self.setObjectName("SwipeUX")
        __flags = QtCore.Qt.Window
        if not frame:
            __flags |= QtCore.Qt.FramelessWindowHint
            self.setAttribute(Qt.WA_NoSystemBackground, True)
            self.setAttribute(Qt.WA_TranslucentBackground, True)
        if always_on_top:
            __flags |= QtCore.Qt.WindowStaysOnTopHint
        self.setWindowFlags(__flags)

        # self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint
        # QtCore.Qt.FramelessWindowHint)
        self.resize(70, 70)
        # -----------------------

        icon = QtGui.QIcon()
        icon.addPixmap(
            QtGui.QPixmap(":/res/ui/guiscrcpy_logo.png"),
            QtGui.QIcon.Normal,
            QtGui.QIcon.Off,
        )
        self.setWindowIcon(icon)
        self.setStyleSheet(
            "QWidget {"
            "background-color: rgba(0,0,0,0);}\nQPushButton {\n"
            "border-radius: 15px;\n"
            "background-color: qradialgradient("
            "spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.495098, fy:0.5, "
            "stop:0.887255 rgba(35, 35, 35, 255), "
            "stop:0.901961 rgba(0, 0, 0, 255));\n"
            "color: rgb(0, 0, 0);\n"
            "}\n\n"
            "QPushButton:pressed {\n"
            "border-radius: 15px;\n"
            "\n"
            "background-color: qlineargradient("
            "spread:pad, x1:0, y1:0, x2:1, y2:1, "
            "stop:0 rgba(0, 255, 255, 255), "
            "stop:1 rgba(0, 255, 152, 255));\n"
            "color: rgb(0, 0, 0);\n"
            "   }\n"
            "QMainWindow{background-color: rgba(0,0,0,30);}\n"
            "QPushButton:hover {\n"
            "border-radius: 15px;\n"
            "background-color: qlineargradient("
            "spread:pad, x1:0, y1:0, x2:1, y2:1, "
            "stop:0 rgba(0, 199, 199, 255), "
            "stop:1 rgba(0, 190, 113, 255));\n"
            "color: rgb(0, 0, 0);\n"
            "}"
        )
        self.centralwidget = QtWidgets.QWidget(self)
        self.centralwidget.setObjectName("centralwidget")

        self.lol = QtWidgets.QPushButton(self.centralwidget)
        self.lol.setGeometry(QtCore.QRect(24, 24, 25, 25))
        self.lol.setText("")
        self.lol.setObjectName("lol")
        self.lol.setStyleSheet(
            f"background-color: #{hexdigest};" f"border-radius: 12px; "
        )
        self.swirt = QtWidgets.QPushButton(self.centralwidget)
        self.swirt.setGeometry(QtCore.QRect(40, 20, 30, 30))
        self.swirt.setText("")
        icon1 = QtGui.QIcon()
        icon1.addPixmap(
            QtGui.QPixmap(":/icons/icons/chevron-sign-right.svg"),
            QtGui.QIcon.Normal,
            QtGui.QIcon.Off,
        )
        self.swirt.setIcon(icon1)
        self.swirt.setObjectName("swirt")
        self.swilf = QtWidgets.QPushButton(self.centralwidget)
        self.swilf.setGeometry(QtCore.QRect(0, 20, 30, 30))
        self.swilf.setText("")
        icon2 = QtGui.QIcon()
        icon2.addPixmap(
            QtGui.QPixmap(":/icons/icons/chevron-sign-left.svg"),
            QtGui.QIcon.Normal,
            QtGui.QIcon.Off,
        )
        self.swilf.setIcon(icon2)
        self.swilf.setObjectName("swilf")
        self.swidn = QtWidgets.QPushButton(self.centralwidget)
        self.swidn.setGeometry(QtCore.QRect(20, 40, 30, 30))
        self.swidn.setText("")
        icon3 = QtGui.QIcon()
        icon3.addPixmap(
            QtGui.QPixmap(":/icons/icons/chevron-sign-down.svg"),
            QtGui.QIcon.Normal,
            QtGui.QIcon.Off,
        )
        self.swidn.setIcon(icon3)
        self.swidn.setObjectName("swidn")
        self.swiup = QtWidgets.QPushButton(self.centralwidget)
        self.swiup.setGeometry(QtCore.QRect(20, 0, 30, 30))
        self.swiup.setText("")
        icon4 = QtGui.QIcon()
        icon4.addPixmap(
            QtGui.QPixmap(":/icons/icons/chevron-sign-up.svg"),
            QtGui.QIcon.Normal,
            QtGui.QIcon.Off,
        )
        self.swiup.setIcon(icon4)
        self.swiup.setObjectName("swiup")
        self.setCentralWidget(self.centralwidget)
        self.oldpos = self.pos()
        self.swiup.pressed.connect(self.swipup)
        self.swidn.pressed.connect(self.swipdn)
        self.swilf.pressed.connect(self.swipleft)
        self.swirt.pressed.connect(self.METHOD_NAME)

    def init(self):
        self.show()

    def paintEvent(self, event):
        qp = QtGui.QPainter()
        qp.begin(self)
        qp.setRenderHint(QtGui.QPainter.Antialiasing)
        qp.setPen(Qt.NoPen)
        qp.setBrush(QtGui.QColor(0, 0, 0, 127))
        qp.drawEllipse(0, 0, 70, 70)
        qp.end()

    def mousePressEvent(self, event):
        self.oldPos = event.globalPos()

    def mouseMoveEvent(self, event):
        try:
            delta = QPoint(event.globalPos() - self.oldPos)

            self.move(self.x() + delta.x(), self.y() + delta.y())
            self.oldPos = event.globalPos()
        except (TypeError, AttributeError):
            pass

    def swipdn(self):
        logging.debug("Passing SWIPE DOWN")
        dim_values = self.ux.android_dimensions
        pos_y = int(dim_values[1]) - 200
        pos_x = int(dim_values[0])
        new_pos_x = pos_x / 2  # find center
        self.ux.do_swipe(new_pos_x, 200, new_pos_x, pos_y)

    def swipup(self):
        logging.debug("Passing SWIPE UP")
        dim_values = self.ux.android_dimensions
        pos_y = int(dim_values[1]) - 100
        pos_x = int(dim_values[0])
        new_pos_x = int(pos_x / 2)  # find center
        self.ux.do_swipe(new_pos_x, pos_y, new_pos_x, 200)

    def swipleft(self):
        logging.debug("Passing SWIPE LEFT")
        dim_values = self.ux.android_dimensions
        pos_y = int(dim_values[1])
        pos_x = int(dim_values[0]) - 10
        new_pos_y = int(pos_y / 2)  # find center
        self.ux.do_swipe(10, new_pos_y, pos_x, new_pos_y)

    def METHOD_NAME(self):
        logging.debug("Passing SWIPE RIGHT")
        dim_values = self.ux.android_dimensions
        pos_y = int(dim_values[1])
        pos_x = int(dim_values[0]) - 10
        new_pos_y = int(pos_y / 2)  # find center
        self.ux.do_swipe(pos_x, new_pos_y, 10, new_pos_y)