#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""PyQ[u]AndA cli interface."""
import traceback
from pyquanda.cli import MainParser
from pyquanda.exceptions import PreCheckFail
from pyquanda.cli.subcommands import (
    CreateNewModule,
    RunModule,
    RunAllModules,
    AssembleQuestions,
    SaveUserData,
    Bootstrap,
    TestQuestions,
    Demo,
)

parent = MainParser(__doc__)  # type: ignore
CreateNewModule(parent)
RunModule(parent)
RunAllModules(parent)
AssembleQuestions(parent)
TestQuestions(parent)
SaveUserData(parent)
Bootstrap(parent)
Demo(parent)


def main():
    """Run main function."""
    try:
        parent.run()
    except PreCheckFail as _e:
        msg = "\n".join(
            [
                str(_e),
                str(traceback.format_exc()),
            ]
        )
        raise SystemExit(msg) from _e
    except KeyboardInterrupt:
        print("Bye!")


if __name__ == "__main__":
    main()
