/**
 * Driver program demonstrating dynamic polymorphism using the Employee hierarchy.
 * 
 * @author Dr. Hyrum D. Carroll
 * @author Gemini 3.6 Flash
 * @version 1.0
 */
public class PayrollDriver {
    /**
     * Entry point for showing polymorphic behavior.
     * 
     * @param args Command-line arguments (unused).
     */
    public static void main(String[] args) {
        // Create an Employee with minimum wage ($7.25) and 20 hours worked
        Employee emp = new Employee("Mario Jumpman", "EMP-101", "2026-01-15", 7.25, 20.0);

        // Create a Cashier with $10.00 rate and 30 hours worked
        Cashier cash = new Cashier("Princess Peach", "CSH-202", "2026-03-01", 10.00, 30.0);
        cash.setTillStart(200.00);
        cash.setTillEnd(850.50);

        // Create a Manager working 45 hours with a $250 bonus
        Manager mgr = new Manager("Bowser Koopa", "MGR-303", "2026-05-10", 20.00, 45.0, "KEY-GOLD-99", 250.00);

        // Demonstrate polymorphism using an array of base type Employee
        Employee staff;
        staff = emp;
        System.out.printf("%-15s | Calculated Pay: $%.2f%n", staff.getName(), staff.getPay());
        // Output: Mario Jumpman   | Calculated Pay: $145.00

        staff = cash;
        System.out.printf("%-15s | Calculated Pay: $%.2f%n", staff.getName(), staff.getPay());
        // Output: Princess Peach  | Calculated Pay: $375.00

        staff = mgr;
        System.out.printf("%-15s | Calculated Pay: $%.2f%n", staff.getName(), staff.getPay());
        // Output: Bowser Koopa    | Calculated Pay: $1600.00
    }
}