"""DuckieDai Pick's Theorem 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 whole_number(prompt):
    """Require a nonnegative whole number."""
    while True:
        try:
            value = int(input(prompt))

            if value >= 0:
                return value

        except ValueError:
            pass

        print("Enter a whole number")
        print("0 or greater.")


def positive_whole(prompt):
    """Require a positive whole number."""
    while True:
        try:
            value = int(input(prompt))

            if value > 0:
                return value

        except ValueError:
            pass

        print("Enter a whole number")
        print("above 0.")


def positive_number(prompt):
    """Require a positive 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 main():
    duckiedai_intro("PICKS THEOREM")

    print("PICK'S THEOREM")
    print()
    print("A = i + b/2 - 1")
    print()
    print("i = interior points")
    print("b = boundary points")
    print()
    print("What do you need?")
    print()
    print("1. Area")
    print("2. Interior points")
    print("3. Boundary points")
    print()

    choice = input("Choose 1-3: ")

    print()

    # ==========================================
    # 1. SOLVE AREA
    #
    # A = i + b/2 - 1
    # ==========================================

    if choice == "1":

        i = whole_number(
            "Interior points: "
        )

        b = positive_whole(
            "Boundary points: "
        )

        area = (
            i +
            b / 2 -
            1
        )

        print()
        print("Using:")
        print("A = i + b/2 - 1")
        print()
        print("A = " + str(i))
        print("+ " + str(b) + "/2")
        print("- 1")
        print()

        print("ANSWER")
        print("Area = " + str(area))
        print("square units")


    # ==========================================
    # 2. SOLVE INTERIOR POINTS
    #
    # i = A - b/2 + 1
    # ==========================================

    elif choice == "2":

        area = positive_number(
            "Area: "
        )

        b = positive_whole(
            "Boundary points: "
        )

        i = (
            area -
            b / 2 +
            1
        )

        print()
        print("Using:")
        print("A = i + b/2 - 1")
        print()
        print("Rearranged:")
        print("i = A - b/2 + 1")
        print()

        if i < 0 or i != int(i):

            print("INVALID RESULT")
            print()
            print("Interior points")
            print("must be a whole")
            print("number.")
            print()
            print("Check your values.")

        else:

            i = int(i)

            print("ANSWER")
            print("Interior points =")
            print(str(i))


    # ==========================================
    # 3. SOLVE BOUNDARY POINTS
    #
    # b = 2(A - i + 1)
    # ==========================================

    elif choice == "3":

        area = positive_number(
            "Area: "
        )

        i = whole_number(
            "Interior points: "
        )

        b = (
            2 *
            (area - i + 1)
        )

        print()
        print("Using:")
        print("A = i + b/2 - 1")
        print()
        print("Rearranged:")
        print("b = 2(A-i+1)")
        print()

        if b <= 0 or b != int(b):

            print("INVALID RESULT")
            print()
            print("Boundary points")
            print("must be a positive")
            print("whole number.")
            print()
            print("Check your values.")

        else:

            b = int(b)

            print("ANSWER")
            print("Boundary points =")
            print(str(b))

    else:
        print("Invalid choice.")

    print()
    print("DuckieDai says: done!")


# TI-Python imports the selected AppVar rather than
# setting __name__ to main.
main()
