import re
import ctypes
import sys

import dearpygui.dearpygui as dpg
import numpy as np
from dotenv import load_dotenv

import config_ui
import remote_run_ui
import map_edit_ui
from style import setup_fonts, setup_themes
from handlers import setup_handlers
from paths import ICON_PATH
from remote_run_constants import LOMONOSOV


def exit_callback():
    connections = dpg.get_item_user_data('run_window').get('connections', [])
    builds = dpg.get_item_user_data('run_window').get('builds', [])

    # with open('credentials.txt', 'a+', encoding='utf-8') as log:
    #     for host in connections:
    #         conn = connections[host]
    #         if conn.host == LOMONOSOV:
    #             if conn.id_rsa_path:
    #                 desc = f'{conn.host};{conn.username};{conn.id_rsa_path}'
    #             else:
    #                 desc = f'{conn.host};{conn.username}'
    #         else:
    #             desc = f'{conn.host};{conn.username};{conn.password}'
    #         log.write(desc + '\n')

    # with open('builds.txt', 'a+', encoding='utf-8') as log:
    #     for machine, model in builds:
    #         log.write(f'{machine};{model};{builds[(machine, model)]}\n')

    # with open('sessions.txt', 'a+', encoding='utf-8') as log:
    #     for row in dpg.get_item_children('models_table', 1):
    #         running_session_id = dpg.get_item_alias(row)
    #         model = dpg.get_value(f'{running_session_id}_model')
    #         machine = dpg.get_value(f'{running_session_id}_machine')
    #         log.write(f'{running_session_id};{machine};{model}\n')

    for conn in connections:
        connections[conn].close()

def construct_ui():
    config_ui.construct_ui()
    remote_run_ui.construct_ui()
    map_edit_ui.construct_ui()

    setup_handlers()
    setup_fonts()
    setup_themes()

load_dotenv()

if sys.platform.startswith('win'):
    ctypes.windll.shcore.SetProcessDpiAwareness(1)

if __name__ == '__main__':
    dpg.create_context()
    dpg.create_viewport(
        title='config file editor',
        small_icon=ICON_PATH,
        large_icon=ICON_PATH
    )
    dpg.setup_dearpygui()
    dpg.show_viewport()

    construct_ui()
    dpg.set_exit_callback(exit_callback)
    
    dpg.set_primary_window('main', True)
    dpg.start_dearpygui()
    dpg.destroy_context()