"""DuckieDai Heron's Formula for TI-84 Plus CE Python."""

from math import sqrt


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 number greater than zero."""
    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 valid_triangle(a, b, c):
    """Check the triangle inequality."""
    return (
        a + b > c and
        a + c > b and
        b + c > a
    )


def heron_area(a, b, c):
    """Calculate triangle area using Heron's Formula."""
    s = (a + b + c) / 2

    area = sqrt(
        s *
        (s - a) *
        (s - b) *
        (s - c)
    )

    return s, area


def main():
    duckiedai_intro("HERONS FORMULA")

    print("HERON'S FORMULA")
    print("TRIANGLE AREA")
    print()
    print("A = sqrt(")
    print("s(s-a)(s-b)(s-c))")
    print()
    print("s = (a+b+c)/2")
    print()

    a = positive_number("Side a: ")
    b = positive_number("Side b: ")
    c = positive_number("Side c: ")

    print()

    if not valid_triangle(a, b, c):

        print("INVALID TRIANGLE")
        print()
        print("These side lengths")
        print("cannot form a")
        print("triangle.")

    else:

        s, area = heron_area(a, b, c)

        perimeter = a + b + c

        print("Using:")
        print("s = (a+b+c)/2")
        print()
        print("s = " + str(s))
        print()
        print("A = sqrt(")
        print("s(s-a)(s-b)(s-c))")
        print()

        print("RESULTS")
        print()
        print("Perimeter =")
        print(str(perimeter))
        print()
        print("Semiperimeter =")
        print(str(s))
        print()
        print("Area =")
        print(str(area))
        print("square units")

    print()
    print("DuckieDai says: done!")


# TI-Python imports the selected AppVar rather than
# setting __name__ to main.
main()
