"""
Модуль является результатом выполнения практической
домашней работы по теме 
"Знакомство с переменными и базовые функции"

:copyright: Сергей Ванюшкин <pi3c@yandex.ru>
:git: https://git.pi3c.ru/pi3c/StudyRepo_Synergy.git
:license: MIT
2023г.
"""

from decimal import Decimal, DecimalException, DivisionByZero

MATH_SYMBOLS = ("+", "-", "*", "/")


def get_num_from_str(string: str) -> int | Decimal | None:
    """Функция валидации и преобразования строки в число.
    Проверяет коректность строки и определяет тип
    для преобразования строки в числовой тип.

    Параметры:
        <string> - Число в строковом представлении

    Возвращаемые значения:
    - num: int Вернет число типа int, если строка может быть
    преобразована в целое число
    - num: Decimal Если в строке есть точка или запятая
    - None Если строку нельзя преобразовать в число
    """

    string = string.replace(",", ".")
    try:
        num = int(string)
        return num
    except ValueError:
        pass

    try:
        num = Decimal(string)
        return num
    except DecimalException:
        pass

    return


print("Привет, Пользователь. Это простой калькулятор")
print("Вам доступны операции: ", *MATH_SYMBOLS)

symbol = input("Введите операцию: ")

while symbol not in MATH_SYMBOLS:
    symbol = input("Ошибка, введите коректную операцию: ")

while True:
    num1 = get_num_from_str(input("Введите первое число:\n"))
    if num1 is not None:
        break
    print("Ошибка ввода!\n")

while True:
    num2 = get_num_from_str(input("Введите второе число:\n"))
    if num2 is not None:
        break
    print("Ошибка ввода!\n")

match symbol:
    case "+":
        print("Сумма равна:", num1 + num2)
    case "-":
        print("Разница равна:", num1 - num2)
    case "*":
        print("Произведение равно:", num1 * num2)
    case "/":
        try:
            print("Частное равно", num1 / num2)
        except (DivisionByZero, ZeroDivisionError):
            print("Are you crazy, dumbass?\nDivision by Zero, E_P_T")