package views;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import models.DeliveryRunner;
import models.Order;
import services.OrderService;
import services.UserService;
import java.util.List;
public class DeliveryRunnerView extends JFrame {
private DeliveryRunner deliveryRunner;
private OrderService orderService;
private JTextArea orderArea;
private JButton acceptOrderButton;
private JButton rejectOrderButton;
private JButton historyButton;
private JButton backButton;
private UserService userService;
private JFrame previousWindow;
public DeliveryRunnerView(JFrame previousWindow, DeliveryRunner deliveryRunner,
UserService userService) {
this.previousWindow = previousWindow;
this.deliveryRunner = deliveryRunner;
this.userService = userService;
this.orderService = new OrderService(userService); // Initialize OrderService with
UserService
setTitle("Delivery Runner Dashboard");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JPanel topPanel = new JPanel(new BorderLayout());
JLabel titleLabel = new JLabel("Delivery Runner Dashboard", SwingConstants.CENTER);
titleLabel.setFont(new Font("Arial", Font.BOLD, 24));
topPanel.add(titleLabel, BorderLayout.CENTER);
backButton = new JButton("Back");
backButton.setFont(new Font("Arial", Font.BOLD, 14));
backButton.setForeground(Color.WHITE);
backButton.setBackground(new Color(0xDC3545)); // Red
backButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
previousWindow.setVisible(true); // Show the previous window
}
});
topPanel.add(backButton, BorderLayout.WEST);
add(topPanel, BorderLayout.NORTH);
orderArea = new JTextArea();
orderArea.setEditable(false);
add(new JScrollPane(orderArea), BorderLayout.CENTER);
JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 10));
buttonPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
acceptOrderButton = new JButton("Accept Order");
rejectOrderButton = new JButton("Reject Order");
historyButton = new JButton("Order History");
buttonPanel.add(acceptOrderButton);
buttonPanel.add(rejectOrderButton);
buttonPanel.add(historyButton);
add(buttonPanel, BorderLayout.SOUTH);
acceptOrderButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
acceptOrder();
}
});
rejectOrderButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
rejectOrder();
}
});
historyButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
viewOrderHistory();
}
});
setPreferredSize(new Dimension(600, 400)); // Set initial preferred size
pack(); // Adjust the frame to fit the preferred size of its components
setLocationRelativeTo(null); // Center the frame on the screen
setResizable(true); // Allow the frame to be resizable
loadOrders();
}
private void loadOrders() {
orderArea.setText(""); // Clear existing orders
List<Order> pendingOrders = orderService.getPendingOrders();
for (Order order : pendingOrders) {
orderArea.append("Order ID: " + order.getId() + "\nCustomer: " +
order.getCustomer().getUsername() + "\nMenuItem: " + order.getMenuItem().getName() + "\n\
n");
}
}
private void acceptOrder() {
try {
String orderId = JOptionPane.showInputDialog(this, "Enter Order ID to accept:");
if (orderId != null && !orderId.trim().isEmpty()) {
boolean success = orderService.acceptOrder(Integer.parseInt(orderId),
deliveryRunner);
if (success) {
JOptionPane.showMessageDialog(this, "Order accepted!");
loadOrders();
} else {
JOptionPane.showMessageDialog(this, "Error accepting order.");
}
} else {
JOptionPane.showMessageDialog(this, "Invalid Order ID.");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error accepting order: " + e.getMessage());
}
}
private void rejectOrder() {
try {
String orderId = JOptionPane.showInputDialog(this, "Enter Order ID to reject:");
if (orderId != null && !orderId.trim().isEmpty()) {
boolean success = orderService.rejectOrder(Integer.parseInt(orderId), deliveryRunner);
if (success) {
JOptionPane.showMessageDialog(this, "Order rejected.");
loadOrders();
} else {
JOptionPane.showMessageDialog(this, "Error rejecting order.");
}
} else {
JOptionPane.showMessageDialog(this, "Invalid Order ID.");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error rejecting order: " + e.getMessage());
}
}
private void viewOrderHistory() {
try {
List<Order> orderHistory = orderService.getOrderHistory(deliveryRunner);
orderArea.setText(""); // Clear existing orders
for (Order order : orderHistory) {
orderArea.append("Order ID: " + order.getId() + "\nCustomer: " +
order.getCustomer().getUsername() + "\nMenuItem: " + order.getMenuItem().getName() + "\n\
n");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error viewing order history: " +
e.getMessage());
}
}
public static void main(String[] args) {
DeliveryRunner deliveryRunner = new DeliveryRunner("runner_username",
"runner_password", "RunnerFirstName", "RunnerLastName", "RunnerContact",
"RunnerEmail");
UserService userService = new UserService();
SwingUtilities.invokeLater(() -> new DeliveryRunnerView(null, deliveryRunner,
userService).setVisible(true));
}
}