#!/usr/bin/env python3
import argparse
import shlex
import subprocess


def parse_args():
    parser = argparse.ArgumentParser(add_help=False, description="Работа с глобальным каталогом ALDPro")
    parser.add_argument(
        "-v",
        "--version",
        action="version",
        version="%(prog)s 1.0",
        help="Показать версию программы",
    )
    parser.add_argument(
        "-h",
        "--help",
        action="help",
        default=argparse.SUPPRESS,
        help="Показать справку",
    )
    parser._optionals.title = "Опциональные аргументы"  # noqa

    # Форсированное применение
    parser.add_argument(
        "--action",
        help="Удалить/установить глобальный каталог",
        choices=["install", "remove"],
    )

    args = parser.parse_args()
    return args.action


def run_command(command):
    quoted_cmd = shlex.quote(command)
    ret_code = subprocess.call(shlex.split(quoted_cmd), shell=True)
    if ret_code != 0:
        raise Exception("Произошла ошибка. Пожалуйста, попробуйте выполнить команду повторно.")


def run():
    action = parse_args()

    # Форсированное применение политик

    if action == "install":
        print("Установить глобальный каталог")  # noqa: T201
        run_command("aldpro-salt-call state.apply utils.build_deploy_pillar concurrent=True")
        run_command(
            "aldpro-salt-call state.apply aldpro.dc.states.global_catalog queue=True "
            'pillar=\'{"aldpro_deploy_data":{"config":{"setup_gc":True}}, "force_gc": True}\''
        )
    elif action == "remove":
        print("Удалить глобальный каталог")  # noqa: T201
        run_command("aldpro-salt-call state.apply utils.build_deploy_pillar queue=True")
        run_command(
            "aldpro-salt-call state.apply aldpro.dc.states.global_catalog queue=True "
            'pillar=\'{"aldpro_deploy_data":{"config":{"setup_gc":False}}, "force_gc": True}\''
        )

    else:
        print("Форсированная установка/удаление глобального каталога")  # noqa: T201
        run_command("aldpro-salt-call state.apply utils.build_deploy_pillar concurrent=True")
        run_command("aldpro-salt-call state.apply aldpro.dc.states.global_catalog concurrent=True")


if __name__ == "__main__":
    run()
