# -*- coding: utf-8 -*-

import subprocess
import contextlib
import importlib
import time
import datetime
import os
import pathlib
import json
import getopt
import sys
import winsound
from random import randint
from pathlib import Path
from datetime import datetime, date, timedelta

from functions import *

if getConfig("use_colors"):
    from colors import *
else:
    RESET = ''
    BLACK = RED = GREEN = YELLOW = BLUE = MAGENTA = CYAN = WHITE = ''
    BBLACK = BRED = BGREEN = BYELLOW = BBLUE = BMAGENTA = BCYAN = BWHITE = ''
    ULINE = REVERSE = ''

if os.name == 'nt':
    clear = lambda: os.system('cls')
else:
    clear = lambda: os.system('clear')

clear()
os.system("title Загрузка daemon...")

import libinstaller

import easygui
import tkinter
import keyboard
import ast
import inputimeout
import telegram_send


menu_choose = None

try:
    from inputimeout import inputimeout, TimeoutOccurred
except:
    print(f'[{YELLOW}WARN{RESET}] Не удалось импортировать классы "inputimeout" и "TimeoutOccurred" из модуля "inputimeout"')

def nowtime(seconds=True, noice=True, color=True):
    now = datetime.now()
    if seconds == True:
        justnow = now.strftime("%H:%M:%S")
    else:
        justnow = now.strftime("%H:%M")
    
    if noice == True:
        if not color:
            beautiful = f'[{justnow}]'
        else:
            beautiful = f'[{CYAN}{justnow}{RESET}]'
    else:
        if not color:
            beautiful = f'{justnow}'
        else:
            beautiful = f'{CYAN}{justnow}{RESET}'
        
    return beautiful

def act(x):
    return x+10

def waitStart(runTime, action):
    from datetime import datetime, time
    from time import sleep

    startTime = time(*(map(int, runTime.split(':'))))
    while startTime > datetime.today().time():
        sleep(2)
    return action

def getPair(line):
    key, sep, value = line.strip().partition(" ")
    return int(key), value

def getLessons():
    if not os.path.exists(files_folder+'lessons.json'):
        with open(files_folder+'lessons.json', 'w', encoding="utf-8") as f:
            f.write("[]")
            f.close()
            lessons_list = []
    else:
        with open(files_folder+'lessons.json', encoding="utf-8") as json_file:
            lessons_list = json.load(json_file)
            json_file.close()
            
    return lessons_list

def getState():
    output = os.popen('wmic process get description, processid').read()
    if "CptHost.exe" in output:
        return True
    else:
        return False

def listLessons(from_where='remove'):
    try:
        if from_where == 'editor':
            print(f'{RESET}Полный список запланированных конференций:\n')

        print(f'{BBLACK}================================================{RESET}')
        for les in enumerate(getLessons()):
        
            if les[1]["repeat"]:
                repeat = 'Вкл.'
            else:
                repeat = 'Выкл.'
                
            if les[1]["record"]:
                record = 'Вкл.'
            else:
                record = 'Выкл.'
        
            try:
                repeat_day = getDay(les[1]["repeat_day"])
            except:
                repeat_day = 'Не повторяется'
                
            length = len(str(les[0]))
            
            spacer_all = 6 * ' '
            spacer_ind = (5 - length) * ' '
            
        
            print(f'{spacer_all}Имя:    {YELLOW}{les[1]["name"]}{RESET}')
            print(f'{spacer_all}Дата:   {YELLOW}{les[1]["date"]}{RESET}')
            print(f'{spacer_all}Время:  {YELLOW}{les[1]["time"]}{RESET}')
            print(f' {GREEN}{les[0]}{RESET}{spacer_ind}Ссылка: {YELLOW}{les[1]["link"]}{RESET}')
            print(f'{spacer_all}Повтор: {YELLOW}{repeat}{RESET}')
            print(f'{spacer_all}День:   {YELLOW}{repeat_day}{RESET}')
            print(f'{spacer_all}Запись: {YELLOW}{record}{RESET}')
            print(f'{BBLACK}================================================{RESET}')

        if from_where == 'editor':
            none = input('\n\n > ')
    except KeyboardInterrupt:
        clear()
        return

def sortLessons(dictionary):
    dictionary.sort(key = lambda x: datetime.strptime(x['time'], '%H:%M'))
    dictionary.sort(key = lambda x: datetime.strptime(x['date'], '%d.%m.%Y')) 

def getDayNum(day):
    output = datetime.strptime(day, "%d.%m.%Y").isoweekday()
    return output

def getDay(number):
    if number == 1:
        return 'Понедельник'
    if number == 2:
        return 'Вторник'
    if number == 3:
        return 'Среда'
    if number == 4:
        return 'Четверг'
    if number == 5:
        return 'Пятница'
    if number == 6:
        return 'Суббота'
    if number == 7:
        return 'Воскресенье'

def addLesson():
    try:
        local_lessons = {}
        lessons_got = getLessons()

        lessname = input(f'{RESET}Введите (своё) имя конференции:\n\n > {CYAN}')
        local_lessons.update({"name": lessname})
        
        while True:
            clear()
            today = date.today()
            today_1 = date.today() + timedelta(days=1)
            today_2 = date.today() + timedelta(days=2)
            today_3 = date.today() + timedelta(days=3)
            today_4 = date.today() + timedelta(days=4)
            today_5 = date.today() + timedelta(days=5)
            today_6 = date.today() + timedelta(days=6)
            
            print(f'{RESET}Введите дату урока или номер дня ({BRED}ДД.ММ.ГГГГ{RESET}):\n')
            print(f' {BRED}1.{RESET} {today.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}2.{RESET} {today_1.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_1.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}3.{RESET} {today_2.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_2.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}4.{RESET} {today_3.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_3.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}5.{RESET} {today_4.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_4.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}6.{RESET} {today_5.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_5.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}7.{RESET} {today_6.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_6.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            
            try:
                lessdate = input(f'\n > {BRED}')
                if lessdate == '':
                    finallessdate = lessons_got[edi]["date"]
                elif lessdate == '1':
                    finallessdate = today.strftime("%d.%m.%Y")
                elif lessdate == '2':
                    finallessdate = today_1.strftime("%d.%m.%Y")
                elif lessdate == '3':
                    finallessdate = today_2.strftime("%d.%m.%Y")
                elif lessdate == '4':
                    finallessdate = today_3.strftime("%d.%m.%Y")
                elif lessdate == '5':
                    finallessdate = today_4.strftime("%d.%m.%Y")
                elif lessdate == '6':
                    finallessdate = today_5.strftime("%d.%m.%Y")
                elif lessdate == '7':
                    finallessdate = today_6.strftime("%d.%m.%Y")
                else:
                    try:
                        test = (datetime.strptime(lessdate, "%d.%m.%Y"))
                        finallessdate = lessdate
                    except:
                        continue
                    
                local_lessons.update({"date": finallessdate})
                    
                break
            except:
                continue
         
        while True:
            clear()
            try:
                lesstime = input(f'{RESET}Введите время конференции ({BRED}ЧЧ:ММ{RESET}):\n\n > {BRED}')
                finallesstime = (datetime.strptime(lesstime, "%H:%M"))
                local_lessons.update({"time": lesstime})
                break
            except:
                continue
        
        clear()
        lesslink = input(f'{RESET}Введите ссылку на конференцию:\n\n > {BRED}')
        local_lessons.update({"link": lesslink})
        
        while True:
            clear()
            repeat = input(f'{RESET}Повторять эту конференцию ({getDay(getDayNum(finallessdate))})? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})\n\n > ')
            
            if repeat.lower() in ['y', 'yes', 'д', 'да']:
                finalrepeat = True
                finalrepeatday = getDayNum(finallessdate)
                local_lessons.update({"repeat": finalrepeat})
                local_lessons.update({"repeat_day": finalrepeatday})
                break
            elif repeat.lower() in ['n', 'no', 'н', 'нет']:
                finalrepeat = False
                finalrepeatday = None
                local_lessons.update({"repeat": finalrepeat})
                local_lessons.update({"repeat_day": finalrepeatday})
                break
            else:
                continue
        
        while True:
            clear()
            lessrecord = input(f'Записать эту конференцию? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})\n\n > ')
            
            if lessrecord.lower() in ['y', 'yes', 'д', 'да']:
                finallessrecord = True
                local_lessons.update({"record": finallessrecord})
                break
            elif lessrecord.lower() in ['n', 'no', 'н', 'нет']:
                finallessrecord = False
                local_lessons.update({"record": finallessrecord})
                break
            else:
                continue
                
        
        lessons_got.append(dict(local_lessons))
        sortLessons(lessons_got)
        saveJson(files_folder+'lessons.json', lessons_got)
        
        clear()
        print(f'Добавлен урок {CYAN}{local_lessons["name"]}{RESET} за {BRED}{local_lessons["date"]}{RESET} на время {BRED}{local_lessons["time"]}{RESET}.')
        none = input('\n > ')
    except KeyboardInterrupt:
        clear()
        return
    

def editLesson():
    try:
        local_lessons = {}
        lessons_got = getLessons()
        
        while True:
            print(f'{RESET}Выберите номер (индекс) для изменения:\n')
            listLessons()
            lessons_got = getLessons()
            
            print(f'\nДля отмены операции введите {BRED}c{RESET} или {BRED}cancel{RESET}')
            
            edi = input(f'\n > {BGREEN}')
            
            if not isinstance(edi, int):
                if edi.lower() == 'c' or edi.lower() == 'cancel':
                    clear()
                    return
                try:
                    edi = int(edi)
                except:
                    clear()
                    continue
                
            try:
                probe = lessons_got[edi]["name"]
                break
            except:
                clear()
                print(f'{RESET}Выберите {ULINE}правильный{RESET} индекс (номер) для изменения.')
                time.sleep(3)
                clear()
                continue
                
            break

        clear()
        lessname = input(f'{RESET}Введите (своё) имя конференции:\n\nОригинальное имя: {CYAN}{lessons_got[edi]["name"]}{RESET}\n\n > {CYAN}')
        if lessname == '':
            lessname = lessons_got[edi]["name"]
        local_lessons.update({"name": lessname})
        
        while True:
            clear()
            today = date.today()
            today_1 = date.today() + timedelta(days=1)
            today_2 = date.today() + timedelta(days=2)
            today_3 = date.today() + timedelta(days=3)
            today_4 = date.today() + timedelta(days=4)
            today_5 = date.today() + timedelta(days=5)
            today_6 = date.today() + timedelta(days=6)
            
            print(f'{RESET}Введите дату урока или номер дня ({BRED}ДД.ММ.ГГГГ{RESET}):\n')
            print(f' {BRED}1.{RESET} {today.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}2.{RESET} {today_1.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_1.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}3.{RESET} {today_2.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_2.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}4.{RESET} {today_3.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_3.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}5.{RESET} {today_4.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_4.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}6.{RESET} {today_5.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_5.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f' {BRED}7.{RESET} {today_6.strftime("%d.%m.%Y")} ({BGREEN}{getDay(datetime.strptime(today_6.strftime("%d.%m.%Y"), "%d.%m.%Y").isoweekday())}{RESET})')
            print(f'\nОригинальная дата: {BRED}{lessons_got[edi]["date"]}{RESET}')
            
            try:
                lessdate = input(f'\n > {BRED}')
                if lessdate == '':
                    finallessdate = lessons_got[edi]["date"]
                elif lessdate == '1':
                    finallessdate = today.strftime("%d.%m.%Y")
                elif lessdate == '2':
                    finallessdate = today_1.strftime("%d.%m.%Y")
                elif lessdate == '3':
                    finallessdate = today_2.strftime("%d.%m.%Y")
                elif lessdate == '4':
                    finallessdate = today_3.strftime("%d.%m.%Y")
                elif lessdate == '5':
                    finallessdate = today_4.strftime("%d.%m.%Y")
                elif lessdate == '6':
                    finallessdate = today_5.strftime("%d.%m.%Y")
                elif lessdate == '7':
                    finallessdate = today_6.strftime("%d.%m.%Y")
                else:
                    try:
                        test = (datetime.strptime(lessdate, "%d.%m.%Y"))
                        finallessdate = lessdate
                    except:
                        continue
                    
                local_lessons.update({"date": finallessdate})
                    
                break
            except:
                continue
         
        while True:
            clear()
            try:
                lesstime = input(f'{RESET}Введите время конференции ({BRED}ЧЧ:ММ{RESET}):\n\nОригинальное время: {BRED}{lessons_got[edi]["time"]}{RESET}\n\n > {BRED}')
                
                if lesstime == '':
                    finallesstime = lessons_got[edi]["time"]
                    lesstime = lessons_got[edi]["time"]
                else:
                    try:
                        finallesstime = (datetime.strptime(lesstime, "%H:%M"))
                        finallesstime = lesstime
                    except:
                        continue
                
                local_lessons.update({"time": lesstime})
                break
            except:
                continue
        
        clear()
        lesslink = input(f'{RESET}Введите ссылку на конференцию\n\nОригинальная ссылка: {BRED}{lessons_got[edi]["link"]}{RESET}\n\n > {BRED}')
        
        if lesslink == '':
            lesslink = lessons_got[edi]["link"]
        local_lessons.update({"link": lesslink})
        
        while True:
            clear()
            try:
                lessrepeatday = getDay(lessons_got[edi]["repeat_day"])
            except:
                lessrepeatday = 'Не повторяется'
            
            print(f'{RESET}Повторять эту конференцию ({YELLOW}{getDay(getDayNum(finallessdate))}{RESET})? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})')
            print(f'\nОригинальное значение: {BRED}{lessrepeatday}{RESET}')
            repeat = input('\n > ')
            
            if repeat.lower() in ['y', 'yes', 'д', 'да']:
                finalrepeat = True
                finalrepeatday = getDayNum(finallessdate)
                local_lessons.update({"repeat": finalrepeat})
                local_lessons.update({"repeat_day": finalrepeatday})
                break
            elif repeat.lower() in ['n', 'no', 'н', 'нет']:
                finalrepeat = False
                local_lessons.update({"repeat": finalrepeat})
                break
            elif repeat == '':
                finalrepeat = lessons_got[edi]["repeat"]
                local_lessons.update({"repeat": finalrepeat})
                try:
                    finalrepeatday = lessons_got[edi]["repeat_day"]
                    local_lessons.update({"repeat_day": finalrepeatday})
                except:
                    pass
                break
            else:
                continue
        
        while True:
            clear()
            print(f'Записать эту конференцию? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})')
            print(f'\nОригинальное значение: {BRED}{lessons_got[edi]["record"]}{RESET}')
            lessrecord = input('\n > ')
            
            if lessrecord.lower() in ['y', 'yes', 'д', 'да']:
                finallessrecord = True
                local_lessons.update({"record": finallessrecord})
                break
            elif lessrecord.lower() in ['n', 'no', 'н', 'нет']:
                finallessrecord = False
                local_lessons.update({"record": finallessrecord})
                break
            elif lessrecord == '':
                finallessrecord = lessons_got[edi]["record"]
                local_lessons.update({"record": finallessrecord})
                break
            else:
                continue
                
        del lessons_got[edi]
        lessons_got.append(dict(local_lessons))
        sortLessons(lessons_got)
        saveJson(files_folder+'lessons.json', lessons_got)
        clear()
        print(f'Изменён урок {CYAN}{lessname}{RESET} за {BRED}{finallessdate}{RESET} на время {BRED}{finallesstime}{RESET}.')
        none = input('\n > ')
    except KeyboardInterrupt:
        clear()
        return
    

def removeLesson():
    try:
        while True:
            print(f'{RESET}Выберите номер (индекс) для удаления:\n')
            listLessons()
            lessons_local = getLessons()
            print(f'\n{BBLACK}Для отмены операции введите {BRED}c{BBLACK} или {BRED}cancel{RESET}')
            
            rem = input(f'\n > {BRED}')
            
            if rem.lower() == 'c' or rem.lower() == 'cancel':
                clear()
                break
            else:
                try:
                    rem = int(rem)
                except:
                    clear()
                    continue
                
            try:
                del_name = lessons_local[rem]["name"]
                del_date = lessons_local[rem]["date"]
                del_time = lessons_local[rem]["time"]
                del lessons_local[rem]
            except:
                clear()
                print(f'{RESET}Выберите {ULINE}правильный{RESET} индекс (номер) для удаления.')
                time.sleep(3)
                clear()
                continue
                
            sortLessons(lessons_local)
            saveJson(files_folder+'lessons.json', lessons_local)
            clear()
            print(f'{RESET}Удалён урок {CYAN}{del_name}{RESET} за {BRED}{del_date}{RESET} на время {BRED}{del_time}{RESET}.')
            none = input('\n > ')
            break
    except KeyboardInterrupt:
        clear()
        return

def removeAllLessons():
    try:
        while True:
            clear()
            removeall = input(f'{RESET}Вы уверены что хотите удалить все конференции? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})\n{BRED}Внимание!{RESET} Это действие нельзя обратить!\nВаши настройки затронуты НЕ будут.\n\n > ')
            
            if removeall.lower() in ['y', 'yes', 'д', 'да']:
                with open(files_folder+'lessons.json', 'w', encoding="utf-8") as f:
                    f.write("[]")
                    f.close()
                clear()
                none = input('Все уроки были удалены.\n\n > ')
                clear()
                break
            elif removeall.lower() in ['n', 'no', 'н', 'нет']:
                clear()
                break
            else:
                continue
    except KeyboardInterrupt:
        clear()
        return

import rpc

def editor():
    try:
        os.system("title AutoZoom (Редактор)")
        from main import mainMenu
        while True:
            clear()
            
            print(f'{BBLACK}»{RESET} Меню редактора\n')
            print(f' {BRED}1.{RESET} Добавить урок')
            print(f' {BRED}2.{RESET} Изменить урок')
            print(f' {BRED}3.{RESET} Удалить урок')
            print(f' {BRED}4.{RESET} Посмотреть уроки')
            print(f' {BRED}5.{RESET} Удалить все уроки')
            print(f' {BRED}6.{RESET} В главное меню')
            editor_choose = input(f'\n > {BRED}')
            
            if editor_choose == '1':
                clear()
                addLesson()
            elif editor_choose == '2':
                clear()
                editLesson()
            elif editor_choose == '3':
                clear()
                removeLesson()
            elif editor_choose == '4':
                clear()
                listLessons(from_where = 'editor')
            elif editor_choose == '5':
                clear()
                removeAllLessons()
            elif editor_choose == '6':
                rpc.inMenu()
                clear()
                os.system("title AutoZoom (Главная)")
                mainMenu()
            else:
                continue
    except KeyboardInterrupt:
        rpc.inMenu()
        clear()
        return

def tgsend(enabled, message):
    if enabled:
        if os.path.exists(files_folder+'telegram.conf'):
            tg_file = open(files_folder+'telegram.conf', 'r', encoding="utf-8")
            tg_text = tg_file.read()
            if tg_text != 'Not Configured':
                telegram_send.send(messages=[f"{message}"], parse_mode="markdown", conf=files_folder+"telegram.conf")

def playSound(soundname):
    if getConfig("sounds"):
        winsound.PlaySound(sounds_folder+soundname+".wav", winsound.SND_FILENAME)

def settings():
    try:
        while True:
            
            os.system("title AutoZoom (Настройки)")
            clear()
            
            if getConfig("debug"):
                debug_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("debug"):
                debug_val = f'{BRED}Выкл.{RESET}'
            else:
                debug_val = f'{BRED}ERROR{RESET}'

            if getConfig("run_fullscreen"):
                fullscreen_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("run_fullscreen"):
                fullscreen_val = f'{BRED}Выкл.{RESET}'
            else:
                fullscreen_val = f'{BRED}ERROR{RESET}'

            if getConfig("sounds"):
                sounds_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("sounds"):
                sounds_val = f'{BRED}Выкл.{RESET}'
            else:
                sounds_val = f'{BRED}ERROR{RESET}'

            if getConfig("obs_exe") and getConfig("obs_core") not in [None, 'Disabled']:
                obs_val = f'{BGREEN}Вкл.{RESET}'
            else:
                obs_val = f'{BRED}Выкл.{RESET}'

            # Пока слишком много ошибок
            # if getConfig("use_rpc"):
                # rpc_val = f'{BGREEN}Вкл.{RESET}'
            # elif not getConfig("use_rpc"):
                # rpc_val = f'{BRED}Выкл.{RESET}'
            # else:
                # rpc_val = f'{BRED}ERROR{RESET}'
                
            if getConfig("use_colors"):
                color_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("use_colors"):
                color_val = f'{BRED}Выкл.{RESET}'
            else:
                color_val = f'{BRED}ERROR{RESET}'
                
            if getConfig("shutdown_enabled"):
                shutdown_en_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("shutdown_enabled"):
                shutdown_en_val = f'{BRED}Выкл.{RESET}'
            else:
                shutdown_en_val = f'{BRED}ERROR{RESET}'
            
            if os.path.exists(files_folder+'telegram.conf'):
                tg_file = open(files_folder+'telegram.conf', 'r', encoding="utf-8")
                tg_text = tg_file.read()
                if tg_text != 'Not Configured':
                    tg_var = f'{BGREEN}Настроен{RESET}'
                else:
                    tg_var = f'{BRED}Не настроен{RESET}'
            else:
                tg_var = f'{BRED}Не настроен{RESET}'
                
            if getConfig("telegram_enabled"):
                telegram_en_val = f'{BGREEN}Вкл.{RESET}'
            elif not getConfig("debug"):
                telegram_en_val = f'{BRED}Выкл.{RESET}'
            else:
                telegram_en_val = f'{BRED}ERROR{RESET}'
             
            shutdown_time_val = getConfig("shutdown_timeout")
            start_val = getConfig("start")
            stop_val = getConfig("stop")
            
            print(f'{RESET}{BBLACK}»{RESET} Настройки\n')

            print(f'  {BRED}1.{RESET} Режим отладки ({debug_val})')
            print(f'     {BBLACK}Не рекомендуем включать его без необходимости\n')

            print(f'  {BRED}2.{RESET} Цветной вывод ({color_val})')
            print(f'     {BBLACK}Отображение цветных текстов в меню и выводе (нужен перезапуск)\n')

            print(f'  {BRED}3.{RESET} Полный экран ({fullscreen_val})')
            print(f'     {BBLACK}Эмулировать вызов полного экрана при запуске (окно должно быть в фокусе)\n')

            print(f'  {BRED}4.{RESET} Звуковые сигналы ({sounds_val})')
            print(f'     {BBLACK}Воспроизводить звуки при начале/конце уроков и записи видео\n')
            
            
            print(f'  {BRED}5.{RESET} Запись через OBS ({obs_val})')
            print(f'     {BBLACK}Возможность записи уроков через OBS\n')

            # Пока слишком много ошибок
            # print(f'  {BRED}3.{RESET} Discord RPC ({rpc_val})')
            # print(f'     {BBLACK}Показывать какой идёт урок и какое меню открыто (нужен перезапуск)\n')

            print(f'  {BRED}6.{RESET} Автовыключение ({shutdown_en_val})')
            print(f'     {BBLACK}Когда уроки закончатся компьютер выключится\n')

            print(f'  {BRED}7.{RESET} Таймаут выключения ({YELLOW}{shutdown_time_val} мин.{RESET})')
            print(f'     {BBLACK}Время в минутах после которого ПК будет выключен\n')

            print(f'  {BRED}8.{RESET} Начать запись ({YELLOW}{start_val}{RESET})')
            print(f'     {BBLACK}Комбинация клавиш для начала записи через OBS (см. документацию)\n')

            print(f'  {BRED}9.{RESET} Остановить запись ({YELLOW}{stop_val}{RESET})')
            print(f'     {BBLACK}Комбинация клавиш для остановки записи через OBS (см. документацию)\n')

            print(f' {BRED}10.{RESET} Отправлять уведомления ({telegram_en_val})')
            print(f'     {BBLACK}Ваш бот отправит сообщениия о начале/конце урока и выключении ПК\n')

            print(f' {BRED}11.{RESET} Настроить Telegram бота ({tg_var})')
            print(f'     {BBLACK}Настроить на вашем ПК бота для ЛС (см. документацию)\n')

            print(f' {BRED}12.{RESET} Сбросить все настройки')
            print(f'     {BBLACK}Восстановить настройки по умолчанию\n')

            print(f' {BRED}13.{RESET} В главное меню')
            print(f'     {BBLACK}Выйти без внесения изменений{RESET}\n')

            print(f' {BBLACK}Для переключения параметров Вкл/Выкл просто введите номер\n Если окно приложения слишком мелкое - увеличьте его или листайте это меню{RESET}')
            settings_choose = input(f'\n > {BRED}')

            if settings_choose == '1':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                    
                config_list["debug"] = not getConfig("debug")
                saveJson(files_folder+'config.json', config_list)
                clear()
                continue

            elif settings_choose == '2':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                    
                config_list["use_colors"] = not getConfig("use_colors")
                saveJson(files_folder+'config.json', config_list)
                clear()
                continue

            elif settings_choose == '3':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                config_list["run_fullscreen"] = not getConfig("run_fullscreen")
                saveJson(files_folder+'config.json', config_list)
                
                clear()
                continue

            elif settings_choose == '4':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                config_list["sounds"] = not getConfig("sounds")
                saveJson(files_folder+'config.json', config_list)
                
                clear()
                continue
                
            elif settings_choose == '5':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                if getConfig("obs_core") and getConfig("obs_exe") not in [None, 'Disabled']:
                    config_list["obs_core"] = 'Disabled'
                    config_list["obs_exe"] = 'Disabled'
                else:
                    clear()
                    obs_choice = input(f'{RESET}Хотите использовать запись через OBS? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET}): ')
                    if obs_choice.lower() in ['y', 'yes', 'д', 'да']:
                        while True:
                            try:
                                filename = easygui.fileopenbox('Выберите путь до obs32.exe или obs64.exe')
                                if filename.find("obs64.exe") != -1:
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-9]
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-9]}{RESET}')
                                    time.sleep(3)
                                    break
                                elif filename.find("obs32.exe") != -1:
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-9]
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-9]}{RESET}')
                                    time.sleep(3)
                                    break
                                elif filename.find("obs.exe") != -1:
                                    f.write(filename)
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-7]
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-7]}{RESET}')
                                    time.sleep(3)
                                    break
                                else:
                                    easygui.msgbox("Неверный путь")
                                break
                            except:
                                none = input('Вы не выбрали верный путь для OBS.\n\n > ')
                                clear()
                                break
                saveJson(files_folder+'config.json', config_list)
                clear()
                continue

            # Пока слишком много ошибок
            # elif settings_choose == '3':
                # with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    # config_list = json.load(json_file)
                
                # config_list["use_rpc"] = not getConfig("use_rpc")
                # saveJson(files_folder+'config.json', config_list)
                
                # clear()
                # continue

            elif settings_choose == '6':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                    
                config_list["shutdown_enabled"] = not getConfig("shutdown_enabled")
                saveJson(files_folder+'config.json', config_list)
                clear()
                continue

            elif settings_choose == '7':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                try:
                    clear()
                    config_list["shutdown_timeout"] = int(input(f'{RESET}Введите через сколько минут после конференции выключать ПК:\n\n > {BRED}'))
                    saveJson(files_folder+'config.json', config_list)
                    continue
                except:
                    clear()
                    print(f'{RESET}Нужно использовать целое число.')
                    time.sleep(2)
                    continue
                continue

            elif settings_choose == '8':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                try:
                    clear()
                    config_list["start"] = input(f'{RESET}Введите комбинацию клавиш для начала записи OBS:\nЭта комбинация должна быть идентична оной в самом OBS!\n\n > {YELLOW}')
                    saveJson(files_folder+'config.json', config_list)
                    continue
                except:
                    clear()
                    print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
                    time.sleep(2)
                    continue
                continue

            elif settings_choose == '9':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                
                try:
                    clear()
                    config_list["stop"] = input(f'{RESET}Введите комбинацию клавиш для остановки записи OBS:\nЭта комбинация должна быть идентична оной в самом OBS!\n\n > {YELLOW}')
                    saveJson(files_folder+'config.json', config_list)
                    continue
                except:
                    clear()
                    print(f'{RESET}Нужно использовать комбинацию клавиш в виде текста.')
                    time.sleep(2)
                    continue
                continue

            elif settings_choose == '10':
                with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                    config_list = json.load(json_file)
                    json_file.close()
                    
                config_list["telegram_enabled"] = not getConfig("telegram_enabled")
                saveJson(files_folder+'config.json', config_list)
                clear()
                continue

            elif settings_choose == '11':
                clear()
                print(f'{RESET}Пожалуйста, прочтите инструкцию по установке Telegram бота в {BRED}README.txt{RESET}')
                print(f'или в документации/инструкции что в разделе {CYAN}Помощь{RESET} главного меню')
                print(f'чтобы хорошо понимать что сейчас от вас нужно.')
                none = input('\n > ')
                
                while True:
                    clear()
                    try:
                        telegram_send.configure(files_folder+'telegram.conf', channel=False, group=False, fm_integration=False)
                        break
                    except:
                        clear()
                        continue
                    telegram_send.send(messages=[f"🎊 Конфигурация правильна, всё работает!"], parse_mode="markdown", conf=f"{files_folder}telegram.conf")
                    clear()
                continue

            elif settings_choose == '12':
                while True:
                    clear()
                    reset_decision = input(f'{RESET}Вы уверены что хотите сбросить настройки? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET})\n\n{BRED}Внимание!{RESET} Это действие нельзя обратить!\nВаш список конференций затронут НЕ будет.\n\n > ')
                    if reset_decision.lower() in ['y', 'yes', 'д', 'да']:
                        temp_config_list = {}
                        temp_config_list["debug"] = False
                        temp_config_list["shutdown_timeout"] = 30
                        temp_config_list["shutdown_enabled"] = True
                        temp_config_list["start"] = "shift+f7"
                        temp_config_list["stop"] = "shift+f8"
                        temp_config_list["telegram_enabled"] = False
                        temp_config_list["use_colors"] = True
                        temp_config_list["run_fullscreen"] = False
                        temp_config_list["use_rpc"] = True
                        temp_config_list["sounds"] = True
                        temp_config_list["end_mode"] = "shutdown"
                        temp_config_list["obs_exe"] = None
                        temp_config_list["obs_core"] = None
                        saveJson(files_folder+'config.json', temp_config_list)
                        clear()
                        none = input(f'{RESET}Все настройки были сброшены до стандартных.\n\n > ')
                        clear()
                        break
                    elif reset_decision.lower() in ['n', 'no', 'н', 'нет']:
                        clear()
                        break
                    else:
                        clear()
                        continue
                    continue
                clear()
                continue

            elif settings_choose == '13':
                rpc.inMenu()
                clear()
                os.system("title AutoZoom (Главная)")
                return
    except KeyboardInterrupt:
        rpc.inMenu()
        clear()
        return

def main(source='deamon'):

    ##########################################

    # Возможность профилей сделана для себя
    # и не планируется как фича, однако
    # вы можете присобачить сюда что хотите.
    
    try:
        from profile import profilename
    except:
        profilename = ''
        pass
        
    ##########################################

    try:
        import time
        from main import mainMenu
        clear()
        
        os.system("title AutoZoom (Демон)")

        import webbrowser
        
        if (getConfig("obs_core") or getConfig("obs_exe")) == None:
            clear()
            while True:
                obs_choice = input(f'{RESET}Хотите использовать запись через OBS? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET}): ')
                if obs_choice.lower() in ['y', 'yes', 'д', 'да']:
                    with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                        config_list = json.load(json_file)
                        json_file.close()
                        while True:
                            try:
                                filename = easygui.fileopenbox('Выберите путь до obs32.exe или obs64.exe')
                                if filename.find("obs64.exe") != -1:
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-9]
                                    saveJson(files_folder+'config.json', config_list)
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-9]}{RESET}')
                                    time.sleep(3)
                                    break
                                elif filename.find("obs32.exe") != -1:
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-9]
                                    saveJson(files_folder+'config.json', config_list)
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-9]}{RESET}')
                                    time.sleep(3)
                                    break
                                elif filename.find("obs.exe") != -1:
                                    config_list["obs_exe"] = filename
                                    config_list["obs_core"] = filename[:-7]
                                    saveJson(files_folder+'config.json', config_list)
                                    print(f'Сохранены пути для OBS:\nПриложение: {BRED}{filename}{RESET}\nКорневая папка: {BRED}{filename[:-7]}{RESET}')
                                    time.sleep(3)
                                    break
                                else:
                                    easygui.msgbox("Неверный путь")
                                    continue
                                break
                            except:
                                none = input('Вы не выбрали верный путь для OBS.\n\n > ')
                                config_list["obs_exe"] = 'Disabled'
                                config_list["obs_core"] = 'Disabled'
                                saveJson(files_folder+'config.json', config_list)
                                clear()
                                break
                    break
                elif obs_choice.lower() in ['n', 'no', 'н', 'нет']:
                    with open(f"{files_folder}config.json", encoding="utf-8") as json_file:
                        config_list = json.load(json_file)
                        config_list["obs_exe"] = 'Disabled'
                        config_list["obs_core"] = 'Disabled'
                        saveJson(files_folder+'config.json', config_list)
                        json_file.close()
                        
                    clear()
                    break
                else:
                    clear()
                    continue
                                
        if not os.path.exists(files_folder+'telegram.conf'):
            clear()
            tg_choice = input(f'{RESET}Хотите использовать Telegram бота? {RESET}({BGREEN}Да{RESET}/{BRED}Нет{RESET}): ')
            if tg_choice.lower() in ['y', 'yes', 'д', 'да']:
                clear()
                print(f'Пожалуйста, прочтите инструкцию по установке Telegram бота в {BRED}README.txt{RESET}')
                print(f'или в документации/инструкции что в разделе {CYAN}Помощь{RESET} главного меню')
                print(f'чтобы хорошо понимать что сейчас от вас нужно.')
                none = input('\n > ')
                clear()
                            
                while True:
                    clear()
                    try:
                        telegram_send.configure(files_folder+'telegram.conf', channel=False, group=False, fm_integration=False)
                        break
                    except:
                        clear()
                        continue
                    telegram_send.send(messages=[f"🎊 Конфигурация правильна, всё работает!"], parse_mode="markdown", conf=f"{files_folder}telegram.conf")
                    clear()
            elif tg_choice.lower() in ['n', 'no', 'н', 'нет']:
                with open(files_folder+'telegram.conf', 'w', encoding="utf-8") as f:
                    f.write('Not Configured')
                    f.close()
        lessons_count = 0
        
        try:
            if getConfig("debug"):
                print(f'{nowtime()} Конфигурация импортирована\n')
        except:
            print(f'{nowtime()} Конфигурация {BRED}отсутсвует{RESET}, выключаем отладку\n')

        
        for les in getLessons():
            try:
                lessons_list = getLessons()
            
                lesson_name = les["name"]
                lesson_date = les["date"]
                lesson_time = les["time"]
                lesson_url = les["link"]
                lesson_obs = les["record"]
                lesson_repeat = les["repeat"]
                try:
                    lesson_repeat_day = les["repeat_day"]
                except:
                    lesson_repeat_day = 'Не повторяется'
                
                today = date.today().strftime("%d.%m.%Y")
                
                if (today == lesson_date) or (getDayNum(today) == lesson_repeat_day):
                    print(f'{BBLACK}================================================{RESET}\n')
                
                    print(f'{nowtime()} Найден урок {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET}. Ждём начала...')
                    
                    waiting_time_unix = int(time.time())
                    rpc.waitLesson(lesson_name, waiting_time_unix)
                    
                    waitStart(lesson_time, lambda: act(100))
                    webbrowser.open(lesson_url)
                    easteregg_number = randint(1, 100000)
                    if easteregg_number == 69420:
                        webbrowser.open('https://www.pornhub.com/view_video.php?viewkey=ph5f3eb1e206aa8')
                    print(f'{nowtime()} Ждём {BRED}10 секунд{RESET} до отслеживания Zoom...')
                    time.sleep(10)
                    
                    while not getState():
                        if getConfig("debug"):
                            print(f'{nowtime()} Урок задерживается, ждём...')
                        time.sleep(5)
                        continue
                    
                    record_now = False 
                    lesson_duration = 0
                    firstshow = True
                    
                    if lesson_obs:
                        try:
                            if getConfig("debug"):
                                print(f'{nowtime()} Импортированы клавиши старта и остановки записи ({YELLOW}{getConfig("start")}{RESET} и {YELLOW}{getConfig("stop")}{RESET}).')
                                
                            start = getConfig("start")
                            stop = getConfig("stop")
                        except:
                            start = 'shift+f7'
                            stop = 'shift+f8'
                            if getConfig("debug"):
                                print(f'{nowtime()} Используем стандартные клавиши старта и остановки записи ({YELLOW}{start}{RESET} и {YELLOW}{stop}{RESET}).')
                        
                    i = 0
                    
                    while True:
                        while i < 3:
                            if getState():
                                    if firstshow:
                                        start_time_unix = int(time.time())
                                        
                                        print(f'{nowtime()} Захвачен текущий урок в Zoom.')
                                        
                                        playSound("started")
                                        tgsend(getConfig("telegram_enabled"), f"▶ Зашёл на урок *{lesson_name}* в *{nowtime(False, False, False)}* {profilename}")
                                        
                                        rpc.onLesson(lesson_name, start_time_unix)
                                        
                                        if lesson_obs:
                                            try:
                                                obs_process = subprocess.Popen(getConfig("obs_exe"), cwd=getConfig("obs_core"))
                                                time.sleep(5)
                                            except:
                                                print(f'{nowtime()} Не удалось открыть OBS для записи.')
                                        else:
                                            if getConfig("debug"):
                                                print(f'{nowtime()} Не включаем OBS для записи.')
                                        firstshow = False
                                    
                                    if lesson_obs:
                                        if not record_now:
                                            keyboard.press(start)
                                            time.sleep(.25)
                                            keyboard.release(start)
                                            record_now = True
                                            print(f'{nowtime()} Сигнал записи OBS отправлен.')
                                            playSound("recordstart")
                                            
                                    lesson_duration = lesson_duration + 5
                                        
                                    if getConfig("debug"):
                                        print(f'{nowtime()} Zoom подключён. Урок идёт уже {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)')
                                        
                                    time.sleep(5)
                                    continue
                            else:
                                i += 1
                                if getConfig("debug"):
                                    print(f'{nowtime()} {BRED}Урок не обнаружен! {RESET}Повторная проверка через {BRED}10 {RESET}секунд...')
                                time.sleep(10)
                                continue
                                
                        if getConfig("debug"):
                            print(f'{nowtime()} Zoom отключился. Процесс {BRED}CptHost.exe{RESET} более не существует.')
                            
                        if getConfig("debug"):
                            tgsend(getConfig("telegram_enabled"), f"◀ Урок *{lesson_name}* длился *{str(round(lesson_duration/60, 2))}* мин.")
                            print(f'{nowtime()} Урок длился {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(round(lesson_duration/60, 2))} мин{RESET}.)')
                        else:
                            tgsend(getConfig("telegram_enabled"), f"◀ Урок *{lesson_name}* длился *{str(int(lesson_duration/60))}* мин.")
                            print(f'{nowtime()} Урок длился {BGREEN}{str(lesson_duration)} сек{RESET}. ({BGREEN}{str(int(lesson_duration/60))} мин{RESET}.)')
                            
                        playSound("ended")
                        
                        if lesson_obs:
                            keyboard.press(stop)
                            time.sleep(.25)
                            keyboard.release(stop)
                            print(f'{nowtime()} Сигнал остановки записи через OBS отправлен.') 
                            playSound("recordstop")
                            record_now = False
                            time.sleep(3)
                            try:
                                obs_process.terminate()
                            except:
                                if getConfig("debug"):
                                    print(f'{nowtime()} Не удалось остановить процесс OBS.')
                            
                        if not lesson_repeat:
                            del lessons_list[lessons_list.index(les)]
                                
                            saveJson(files_folder+'lessons.json', lessons_list)
                                
                            if getConfig("debug"):
                                print(f'{nowtime()} Урок {CYAN}{lesson_name}{RESET} в {BRED}{lesson_time}{RESET} удалён.')
                        
                        print(f'\n{BBLACK}================================================{RESET}\n\n')
                            
                        firstshow = True
                        
                        lessons_count = lessons_count+1
                        break
                record_now = False
                lessons_list = getLessons()
            except KeyboardInterrupt:
                if getConfig("debug"):
                    print(f'{nowtime()} Ожидание урока сброшено.')
                else:
                    print('')
                time.sleep(1)
                pass

        time.sleep(3)
        print(f'{nowtime()} Уроков нет или же все в списке закончились.')
        
        if lessons_count > 0:
            if getConfig("shutdown_enabled"):
                if getConfig("end_mode") == 'shutdown':
                    try:
                        tgsend(getConfig("telegram_enabled"), f"⚠ Уроки кончились, автовыключение {profilename}через {nowtime(False, False, False)} мин...")
                        print(f'{nowtime()} Ваш ПК автоматически выключится через {BRED}{str(getConfig("shutdown_timeout"))} мин{RESET}.')
                        playSound("shutdown")
                        end_unix = int(time.time())+getConfig("shutdown_timeout")*60
                        rpc.shutdown(end_unix)
                        shutdown = inputimeout(prompt=f'{nowtime()} Нажмите {CYAN}Enter{RESET} чтобы предотвратить выключение ПК...', timeout=getConfig("shutdown_timeout")*60)
                        clear()
                    except TimeoutOccurred:
                        clear()
                        print(f'{nowtime()} Время вышло, выключаем ваш ПК...')
                        time.sleep(3)
                        tgsend(getConfig("telegram_enabled"), f"⚠ Время таймаута исткело, выключаем ваш ПК...")
                        time.sleep(5)
                        os.system("shutdown /s /t 1")
                # elif getConfig("end_mode") == 'restart':
                    # from datetime import datetime, time
                    # from time import sleep

                    # runTime = "00:00"
                    # startTime = time(*(map(int, runTime.split(':'))))
                    # tomorrow = date.today()+timedelta(days=1)
                    # timestamp = (tomorrow - date(1970, 1, 1)).total_seconds()
                    # while startTime.total_seconds() > timestamp: #(date.today() + timedelta(days=1)).time():
                        # sleep(2)
        
        if source == 'deamon':
            exit = input(f'{nowtime()} Программа завершена! Нажмите {CYAN}Enter{RESET} чтобы выйти...')
            rpc.disconnect()
            clear()
            sys.exit()
        elif source == 'menu':
            exit = input(f'{nowtime()} Программа завершена! Нажмите {CYAN}Enter{RESET} чтобы вернуться в меню...')
            rpc.inMenu()
            clear()
            os.system("title AutoZoom (Главная)")
            return
    except KeyboardInterrupt:
        if source == 'deamon':
            exit = input(f'{nowtime()} Программа остановлена! Нажмите {CYAN}Enter{RESET} чтобы выйти...')
            rpc.disconnect()
            clear()
            sys.exit()
        elif source == 'menu':
            exit = input(f'{nowtime()} Программа остановлена! Нажмите {CYAN}Enter{RESET} чтобы вернуться в меню...')
            rpc.inMenu()
            clear()
            return

if __name__ == '__main__':
    os.system("title AutoZoom (Демон)")
    import sys
    clear()
    
    main()