from os import system, name
from time import sleep

from threading import Thread
from multiprocessing import Process

from network import *
from updater import *
from proxy import *
from status import *
from db import *

#
# Здесь общий запуск всех файлов и команд
#

def main():
	# Проверка обновлений
	from sys import argv
	if len(argv) == 1:
		print('Проверка обновлений...')
		system('git pull')
		print('Перезагрузка скрипта...')
		system('python main.py updated')
		exit()
	print('\nУспешно перезагружено!')

	# Запуск прокси для сервисов
	# проксируем http сервер
	http_port = port_gen()
	print(f'HTTP: {http_port}')
	rp_http = Thread(target = watch_http, args=(http_port,))
	rp_http.start()

	# проксируем сервер обработки запросов
	serv_port = port_gen()
	print(f'SERV: {serv_port}')
	rp_serv = Thread(target = watch_serv, args=(serv_port,))
	rp_serv.start()

	# Загружаем порт в конфиг
	conf = read()
	conf['our_port'] = serv_port
	write(conf)

	# Стартуем сервисы
	# http сервер
	http = Thread(target = server_http)
	http.start()
	# сервер обработки запросов
	srv = Thread(target = server, args=(http_port,))
	srv.start()

	# Стартуем авто-поиск портов и авто-обновление сайтов
	#updater = Thread(target = update_demon, args=(serv_port,))
	#updater.start()

	# Стартуем интерфейс
	system('python interface.py')

if __name__ == '__main__':
	# Запускаем главный процесс, чтобы потом легко убить его
	p = Process(target=main)
	p.start()

	status_set(True) # Устанавливаем статус, что программа работает

	st = status_check()
	while st:
		try:
			st = status_check()
			sleep(0.01)
		except KeyboardInterrupt:
			p.terminate()
			exit()
		except:
			pass

	# Когда послан код завершения
	p.terminate()
	exit()