"""DuckieDai Rectangle Area for TI-84 Plus CE Python."""


def duckiedai_intro(program_name, wait=True):
    """Show the small, 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):
    """Ask until the user supplies a positive, finite number."""
    while True:
        try:
            value = float(input(prompt))
            if is_positive_finite(value):
                return value
        except ValueError:
            pass
        print("Enter a number above 0.")


def is_positive_finite(value):
    """Use a practical calculator range without math.isfinite."""
    return value > 0 and value < 1e100


def rectangle_area(width, height):
    """Return area for two positive, finite dimensions."""
    if not is_positive_finite(width) or not is_positive_finite(height):
        raise ValueError("dimensions must be positive and finite")
    area = width * height
    if area >= 1e200:
        raise ValueError("area is too large")
    return area


def main():
    duckiedai_intro("RECTANGLE AREA")
    print("RECTANGLE AREA")
    print("Formula: A = width x height")
    print()
    unit = input("Length unit (cm, m, in): ")
    if not unit:
        unit = "units"
    width = positive_number("Width in " + unit + ": ")
    height = positive_number("Height in " + unit + ": ")
    area = rectangle_area(width, height)
    print()
    print("A = " + str(width) + " x " + str(height))
    print("Area = " + str(area) + " " + unit + "^2")
    print()
    print("DuckieDai says: done!")


# TI-Python imports the selected AppVar rather than setting __name__ to main.
main()
