######################################################
# Author: Andrea Fioraldi <andreafioraldi@gmail.com> #
# License: BSD 2-Clause                              #
######################################################

from idaapi import PluginForm
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt

from ui import *
from appdirs import user_data_dir
from distutils.dir_util import mkpath

import manage
import os
import json

config_file = os.path.join(user_data_dir("IDAngr", "IDA Pro"), "gui_init.json")

class IDAngrConnectDialog(QtWidgets.QDialog):
    
    def __init__(self):
        QtWidgets.QDialog.__init__(self)
        
        self.ui = Ui_IDAngrConnectDialog()
        self.ui.setupUi(self)
        
        host = "localhost"
        port = manage.DEFAULT_SERVER_PORT
        
        try:
            if os.path.exists(config_file):
                with open(config_file) as f:
                    config = json.load(f)
                host = config["host"]
                port = config["port"]
                self.ui.saveBox.setChecked(config["save"])
                self.ui.localBox.setChecked(config["local"])
        except: pass
        
        self.ui.hostTxt.setText(host)
        self.ui.portTxt.setText(str(port))
        
    
    @staticmethod
    def go():
        dialog = IDAngrConnectDialog()
        r = dialog.exec_()
        if r == QtWidgets.QDialog.Accepted:
            if dialog.ui.saveBox.isChecked():
                config = {
                    "host": dialog.ui.hostTxt.displayText(),
                    "port": int(dialog.ui.portTxt.displayText()),
                    "save": True,
                    "local": dialog.ui.localBox.isChecked()
                }
                mkpath(user_data_dir("IDAngr", "IDA Pro"))
                with open(config_file, "w") as f:
                    json.dump(config, f, indent=4)
            
            try:
                if dialog.ui.localBox.isChecked():
                    manage.init(use_pin=dialog.ui.pinBox.isChecked())
                else:
                    manage.init(True, dialog.ui.hostTxt.displayText(), int(dialog.ui.portTxt.displayText()), use_pin=dialog.ui.pinBox.isChecked())
            except Exception as ee:
                QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical, 'IDAngr init error', str(ee)).exec_()
                return False
            
            return True
        return False