"""DuckieDai Ellipse Area for TI-84 Plus CE Python."""

from math import pi


def duckiedai_intro(program_name, wait=True):
    """Show the reusable DuckieDai program opening."""
    title = program_name[:16]
    empty = 16 - len(title)
    left = empty // 2
    right = empty - left

    print("+----------------------+")
    print("|   " + " " * left + title + " " * right + "   |")
    print("|                      |")
    print("|       __             |")
    print("|   ___(o )>  quack!   |")
    print("|   \\ <_. )           |")
    print("|    `---'             |")
    print("|     by DuckieDai     |")
    print("+----------------------+")
    print("Loading...")

    if wait:
        input("Press enter to start ")
        print("\n" * 6)


def positive_number(prompt):
    """Require a positive finite number."""
    while True:
        try:
            value = float(input(prompt))

            if value > 0 and value < 1e100:
                return value

        except ValueError:
            pass

        print("Enter a number above 0.")


def show_answer(name, value, unit):
    print()
    print("ANSWER")
    print(name + " = " + str(value))
    print(unit)


def main():
    duckiedai_intro("ELLIPSE AREA")

    print("AREA OF ELLIPSE")
    print()
    print("Formula:")
    print("A = pi*a*b")
    print()
    print("a = semi-major axis")
    print("b = semi-minor axis")
    print()
    print("What do you need?")
    print()
    print("1. Area")
    print("2. Semi-major axis")
    print("3. Semi-minor axis")
    print()

    choice = input("Choose 1-3: ")

    print()

    # ==========================================
    # 1. SOLVE AREA
    #
    # A = pi*a*b
    # ==========================================

    if choice == "1":

        a = positive_number(
            "Semi-major a: "
        )

        b = positive_number(
            "Semi-minor b: "
        )

        area = pi * a * b

        print()
        print("Using:")
        print("A = pi*a*b")
        print()
        print("A = pi x")
        print(str(a) + " x " + str(b))

        show_answer(
            "Area",
            area,
            "square units"
        )

    # ==========================================
    # 2. SOLVE SEMI-MAJOR AXIS
    #
    # a = A / (pi*b)
    # ==========================================

    elif choice == "2":

        area = positive_number(
            "Area: "
        )

        b = positive_number(
            "Semi-minor b: "
        )

        a = area / (pi * b)

        print()
        print("Using:")
        print("A = pi*a*b")
        print()
        print("Rearranged:")
        print("a = A/(pi*b)")

        show_answer(
            "a",
            a,
            "units"
        )

    # ==========================================
    # 3. SOLVE SEMI-MINOR AXIS
    #
    # b = A / (pi*a)
    # ==========================================

    elif choice == "3":

        area = positive_number(
            "Area: "
        )

        a = positive_number(
            "Semi-major a: "
        )

        b = area / (pi * a)

        print()
        print("Using:")
        print("A = pi*a*b")
        print()
        print("Rearranged:")
        print("b = A/(pi*a)")

        show_answer(
            "b",
            b,
            "units"
        )

    else:
        print("Invalid choice.")

    print()
    print("DuckieDai says: done!")


# TI-Python imports the selected AppVar rather than
# setting __name__ to main.
main()
