#!/usr/bin/env python3
#   库的引用
import PyQt5.QtWidgets as QtWidgets
import PyQt5.QtGui as QtGui
import PyQt5.QtCore as QtCore

import os
import sys
import json
import welcome
import subprocess
import WindowModule

# 读取文本文档
def readtxt(path):
    f = open(path, "r") # 设置文件对象
    str = f.read()  # 获取内容
    f.close()  # 关闭文本对象
    return str  # 返回结果

def ProgramVersion():
    information = json.loads(readtxt(f"{programPath}/information.json"))
    return information["Version"]

#   创建界面
class Window(QtWidgets.QWidget):
    moduleMapList = {}

    def __init__(self):
        super().__init__()
        self.counter_a = 1
        self.counter_b = 1
        self.counter_c = 1
        self.widgetList = list()
        self.initUI()

    def initUI(self):
        self.setMinimumSize(800, 600)
        self.setWindowTitle("Wine 运行器 {}".format(ProgramVersion()))
        self.mainLayout = QtWidgets.QHBoxLayout()
        self.setLayout(self.mainLayout)

        #   左侧区域
        self.leftWidget = LeftWidget()
        self.mainLayout.addWidget(self.leftWidget)

        time = 0
        for i in WindowModule.moduleNameList.keys():
            self.moduleMapList[self.leftWidget.actionList[i].text()] = [i, WindowModule.moduleNameList[i]["Name"]]
            self.leftWidget.actionList[i].triggered.connect(lambda: self.add(self.sender().text()))

        #self.leftWidget.btn4.clicked.connect(self.delCurrent)
        self.leftWidget.list1.itemClicked.connect(self.switchWidget)

        #   右侧区域
        self.rightWidget = RightWidget()
        self.mainLayout.addWidget(self.rightWidget)

        self.addWelcome()

        # 判断运行器是否为第一次打开,如果不是则默认切换至 Wine 运行器主窗口
        # 默认为列表里的第一个控件
        if (os.path.exists(get_home() + "/.config/deepin-wine-runner")):
            self.add(self.leftWidget.actionList[list(WindowModule.moduleNameList.keys())[0]].text())
        self.ConfigureConfigFile()


    #   新增欢迎界面
    def addWelcome(self):
        self.newTab = "欢迎页面"
        self.leftWidget.list1.addItem(self.newTab)

        self.newWidget = welcome.WinWelcome()
        self.widgetList.append(self.newWidget)
        self.rightWidget.addWidget(self.newWidget)

    #   新增界面
    def add(self, actionName: str):
        self.newInfo = "{}#{}".format(self.moduleMapList[actionName][1], self.counter_a)
        self.newTab = ItemWidget(self.newInfo)
        self.newTab.btn.clicked.connect(self.delCurrent)
        self.counter_a += 1
        self.leftWidget.list1.addItem(self.newTab)
        self.leftWidget.list1.setItemWidget(self.newTab, self.newTab.widget)

        self.newWidget = WindowModule.RunnerWindow(app, self.moduleMapList[actionName][0]).Win()
        self.widgetList.append(self.newWidget)
        self.rightWidget.addWidget(self.newWidget)

        # 自动切换新打开的页面
        self.leftWidget.list1.setCurrentRow(self.leftWidget.list1.model().rowCount() - 1)  # 设置选择最后一项
        self.switchWidget()


    #   删除_本页面
    def delCurrent(self):
        self.length = self.leftWidget.list1.count()
        print(self.length)
        self.row = self.leftWidget.list1.currentRow()
        print(self.row)
        if self.row == 0:
            return 0
        self.leftWidget.list1.takeItem(self.row)
        self.rightWidget.removeWidget(self.widgetList[self.row])
        self.widgetList.pop(self.row)

        #   将新界面的关闭按钮设为可用
        if self.row == self.length - 1:
            if self.row == 1:
                return 0
            else:
                self.leftWidget.list1.item(self.row - 1).btnEnable()
        else:
            self.leftWidget.list1.item(self.row).btnEnable()

    #   切换页面
    def switchWidget(self):
        self.row = self.leftWidget.list1.currentRow()
        self.rightWidget.setCurrentIndex(self.row)
        
        #   将当前页的关闭按钮设为可用
        for i in range(self.leftWidget.list1.count()):
            if i == 0:
                continue
            else:
                self.leftWidget.list1.item(i).btnDisable()
        if self.row != 0:
            self.leftWidget.list1.currentItem().btnEnable()
            

    def ConfigureConfigFile(self):
        if not os.path.exists(get_home() + "/.config/"):  # 如果没有配置文件夹
            os.mkdir(get_home() + "/.config/")  # 创建配置文件夹
        if not os.path.exists(get_home() + "/.config/deepin-wine-runner"):  # 如果没有配置文件夹
            os.mkdir(get_home() + "/.config/deepin-wine-runner")  # 创建配置文件夹
        
#   左侧区域
class LeftWidget(QtWidgets.QWidget):
    actionList = {}
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setFixedWidth(120)
        self.mainLayout = QtWidgets.QVBoxLayout()
        self.mainLayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.mainLayout)

        #   左侧标题
        self.lab1 = QtWidgets.QLabel("<h2>页面导航区</h2>")
        self.mainLayout.addWidget(self.lab1)

        #   新建页面面按钮
        self.btnAdd = QtWidgets.QPushButton("新建界面")
        self.mainLayout.addWidget(self.btnAdd)
        self.menuAdd = QtWidgets.QMenu()
        self.btnAdd.setMenu(self.menuAdd)

        for i in WindowModule.moduleNameList.keys():
            action = QtWidgets.QAction("新建{}".format(WindowModule.moduleNameList[i]["Name"]))
            self.actionList[i] = action
            self.menuAdd.addAction(action)

        #   左侧页面列表
        self.list1 = QtWidgets.QListWidget()
        self.mainLayout.addWidget(self.list1)

        #   删_页面按钮
        self.archLabel = QtWidgets.QLabel("系统架构:{}".format(subprocess.getoutput("dpkg --print-architecture")))
        self.mainLayout.addWidget(self.archLabel)

#   列表项目组件
class ItemWidget(QtWidgets.QListWidgetItem):
    def __init__(self, info):
        super().__init__()
        self.info = info
        self.initUI()

    def initUI(self):
        self.widget = QtWidgets.QWidget()
        self.mainLayout = QtWidgets.QHBoxLayout()
        self.mainLayout.setContentsMargins(2, 0, 0, 0)
        self.widget.setLayout(self.mainLayout)

        #   文字标签
        self.lab = QtWidgets.QLabel(self.info)
        self.mainLayout.addWidget(self.lab)
        self.mainLayout.addStretch()

        #   关闭按钮
        self.btn = QtWidgets.QPushButton("x")
        #self.btn.setMaximumWidth(20)
        self.btn.setEnabled(False)
        self.mainLayout.addWidget(self.btn)

    #   将按钮设为可用
    def btnEnable(self):
        self.btn.setEnabled(True)

    #   将按钮设为不可用
    def btnDisable(self):
        self.btn.setEnabled(False)

#   右侧区域
class RightWidget(QtWidgets.QStackedWidget):
    def __init__(self):
        super().__init__()
        #self.initUI()

    #def initUI(self):

# 获取用户主目录
def get_home():
    return os.path.expanduser('~')

programPath = os.path.split(os.path.realpath(__file__))[0]  # 返回 string
iconPath = "{}/deepin-wine-runner.svg".format(programPath)

#   运行程序
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = Window()
    mainWindow.setWindowIcon(QtGui.QIcon(iconPath))
    mainWindow.show()
    mainWindow.resize(int(mainWindow.geometry().width() * 1.2), int(mainWindow.geometry().height() * 1.2))
    sys.exit(app.exec())