| 
<?php
 require_once __DIR__ . '/../../../vendor/autoload.php';
 
 use Examples\State\Order\Order;
 
 // Create a new order
 $order = new Order('ORD-123');
 
 try {
 // Process the order with payment
 $result = $order->process([
 'payment_id' => 'PAY-456',
 'payment_status' => 'completed',
 'amount' => 99.99
 ]);
 echo "Order processed: " . $result['message'] . "\n";
 
 // Ship the order
 $result = $order->ship([
 'tracking_number' => 'TRK-789',
 'shipping_address' => '123 Main St, City, Country',
 'carrier' => 'FedEx'
 ]);
 echo "Order shipped: " . $result['message'] . "\n";
 
 // Mark as delivered
 $result = $order->deliver([
 'delivery_date' => date('Y-m-d'),
 'signature' => 'John Doe',
 'notes' => 'Left at front door'
 ]);
 echo "Order delivered: " . $result['message'] . "\n";
 
 // Get the complete state history
 $history = $order->getStateHistory();
 echo "\nOrder State History:\n";
 foreach ($history as $transition) {
 echo sprintf(
 "From %s to %s at %s\n",
 $transition['from'] ?? 'start',
 $transition['to'],
 $transition['timestamp']->format('Y-m-d H:i:s')
 );
 }
 
 } catch (\Exception $e) {
 echo "Error: " . $e->getMessage() . "\n";
 }
 
 // Example of order cancellation
 try {
 $order2 = new Order('ORD-124');
 $result = $order2->cancel('Customer requested cancellation');
 echo "\nOrder 2: " . $result['message'] . "\n";
 echo "\nOrder 2 final state: " . $order2->getCurrentState()->getName() . "\n";
 } catch (\Exception $e) {
 echo "Error: " . $e->getMessage() . "\n";
 }
 
 |