import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.Scanner; public class ReportGenerator { private final String ordersFilePath; private final List productList; private double totalFinalCost; private int totalQuantity; private double totalDiscountValue; private int totalInvalidLines; public ReportGenerator(String ordersFilePath, List productList) { this.ordersFilePath = ordersFilePath; this.productList = productList; } public void processFile() { File file = new File(ordersFilePath); if(!file.exists()) { System.err.println("File is not found!"); return; } try(Scanner scanner = new Scanner(file)) { while (scanner.hasNextLine()) { String line = scanner.nextLine(); if(line.isBlank()) continue; try { String[] parts = line.split(","); int productId = Integer.parseInt(parts[0].trim()); int quantity = Integer.parseInt(parts[1].trim()); int discountPercent = Integer.parseInt(parts[2].trim()); if( quantity<=0 || discountPercent < 0 || discountPercent >99) { throw new Exception("invalid value!"); } Product product = null; for (Product p : productList) { if(p.getProductID() == productId) { product = p; break; } } if(product == null) { throw new Exception("Product not found"); } double subtotal = quantity * product.getPrice(); double discountValue = subtotal * discountPercent / 100; double finalCost = subtotal - discountValue; totalQuantity += quantity; totalFinalCost += finalCost; totalDiscountValue += discountValue; } catch (Exception e) { totalInvalidLines++; } } } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } } public void saveReport() throws IOException { String report = "========= SALES REPORT =========\n" + "Total Quantity: " + totalQuantity + "\n" + "Total Final Cost: " + totalFinalCost + "\n" + "Total Discount Value: " + totalDiscountValue + "\n" + "Invalid Lines: " + totalInvalidLines + "\n" + "================================"; try { FileWriter writer = new FileWriter("report.txt"); writer.write(report); writer.close(); } catch (IOException e) { System.err.println("ERROR!"); } } }