from argparse import ArgumentParser
import sys
import os
import shutil
import glob

class CustomArgumentParser(ArgumentParser):
    def error(self, message):
        self.print_usage(sys.stderr)
        print(f"Ошибка: {message}", file=sys.stderr)
        sys.exit(1)

def icreateExe():
    # Получаем аргументы из командной строки
    parser = CustomArgumentParser(description="Код для создания exe файла из .py")
    parser.add_argument('-i', help='Путь до иконки')
    parser.add_argument('name_file', help='Путь до файла')
    args = parser.parse_args()

    # Выполняем комманду pyinstaller
    path_to_icon = args.i
    path_to_file = args.name_file
    if path_to_icon is None:
        command = f'pyinstaller --noconfirm --onefile --windowed {path_to_file}'
    else:
        command = f'pyinstaller --noconfirm --onefile --windowed --icon {path_to_icon} {path_to_file}'
    os.system(command)

    exe_file = os.listdir('./dist/')[0]
    # Удаляем файлы 
    if os.name == 'nt':  # Windows
        os.system('move .\\dist\\* .\\')
        os.system('rmdir /s /q build dist')
        os.system('del *.spec')
    else:  # Unix-системы (Linux, macOS)
        os.system('mv ./dist/* ./')
        shutil.rmtree('build', ignore_errors=True)
        shutil.rmtree('dist', ignore_errors=True)
        for spec_file in glob.glob('*.spec'):
            os.remove(spec_file)
    print(f'\nФайл {exe_file} был создан')

if __name__ == "__main__":
    icreateExe()
