"""DuckieDai Euler Polyhedron for TI-84 Plus CE Python."""


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 optional_count(prompt):
    """Return a nonnegative integer or None if blank."""
    while True:
        raw = input(prompt)

        if raw == "":
            return None

        try:
            value = int(raw)

            if value >= 0:
                return value

        except ValueError:
            pass

        print("Enter a whole number")
        print("or leave blank.")


def main():
    duckiedai_intro("EULER FORMULA")

    print("EULER POLYHEDRAL")
    print("FORMULA")
    print()
    print("V - E + F = 2")
    print()
    print("V = vertices")
    print("E = edges")
    print("F = faces")
    print()
    print("Enter known values.")
    print("Leave ONE blank")
    print("to solve for it.")
    print()

    V = optional_count("Vertices V: ")
    E = optional_count("Edges E: ")
    F = optional_count("Faces F: ")

    known = 0

    if V is not None:
        known += 1

    if E is not None:
        known += 1

    if F is not None:
        known += 1

    print()

    # ==========================================
    # SOLVE VERTICES
    #
    # V - E + F = 2
    # V = 2 + E - F
    # ==========================================

    if known == 2 and V is None:

        V = 2 + E - F

        print("Using:")
        print("V - E + F = 2")
        print()
        print("Rearranged:")
        print("V = 2 + E - F")
        print()
        print("ANSWER")
        print("Vertices = " + str(V))

    # ==========================================
    # SOLVE EDGES
    #
    # E = V + F - 2
    # ==========================================

    elif known == 2 and E is None:

        E = V + F - 2

        print("Using:")
        print("V - E + F = 2")
        print()
        print("Rearranged:")
        print("E = V + F - 2")
        print()
        print("ANSWER")
        print("Edges = " + str(E))

    # ==========================================
    # SOLVE FACES
    #
    # F = 2 - V + E
    # ==========================================

    elif known == 2 and F is None:

        F = 2 - V + E

        print("Using:")
        print("V - E + F = 2")
        print()
        print("Rearranged:")
        print("F = 2 - V + E")
        print()
        print("ANSWER")
        print("Faces = " + str(F))

    # ==========================================
    # VERIFY ALL THREE VALUES
    # ==========================================

    elif known == 3:

        result = V - E + F

        print("Checking:")
        print()
        print(str(V) + " - " +
              str(E) + " + " +
              str(F))
        print()
        print("Result = " + str(result))
        print()

        if result == 2:

            print("VALID")
            print()
            print("Euler formula")
            print("is satisfied.")

        else:

            print("NOT VALID")
            print()
            print("Expected result:")
            print("2")

    else:

        print("Need at least")
        print("two known values.")

    print()
    print("DuckieDai says: done!")


# TI-Python imports the selected AppVar rather than
# setting __name__ to main.
main()
