using System; using System.Collections.Generic; using System.IO; using System.Linq; using BattSim.Models; namespace BattSim.Services { public class ReportGenerator { public static void GenerateReport(List originalData, Dictionary> scenarios) { using (var writer = new StreamWriter("../../../BatteryAnalysisReport.md")) { writer.WriteLine("# Battery Cost Analysis Report\n"); // Original data summary writer.WriteLine("## Original Data Summary"); var totalConsumption = originalData.Sum(d => d.DayConsumption + d.NightConsumption); var totalProduction = originalData.Sum(d => d.DayProduction + d.NightProduction); writer.WriteLine($"Total Consumption: {totalConsumption:F2} kWh"); writer.WriteLine($"Total Production: {totalProduction:F2} kWh\n"); // Generate graph data writer.WriteLine("### Energy Consumption and Production\n"); writer.WriteLine("```"); writer.WriteLine("Date,Total Production,Total Consumption"); foreach (var day in originalData) { var prod = day.DayProduction + day.NightProduction; var cons = day.DayConsumption + day.NightConsumption; writer.WriteLine($"{day.Date:yyyy-MM-dd},{prod:F2},{cons:F2}"); } writer.WriteLine("```\n"); writer.WriteLine("![Energy Graph](energy_graph.png)"); writer.WriteLine("(Graph showing total production in green and total consumption in red)\n"); // Scenario analysis foreach (var scenario in scenarios) { var batteryCount = scenario.Key; var results = scenario.Value; writer.WriteLine($"## Scenario with {batteryCount} Battery{(batteryCount > 1 ? "ies" : "")}"); writer.WriteLine($"Battery Capacity: {batteryCount * 2.6} kWh\n"); var totalReducedConsumption = results.Sum(r => r.ReducedConsumption); var totalReducedProduction = results.Sum(r => r.ReducedProduction); var savings = totalReducedConsumption * 0.30; // Assuming €0.30 per kWh writer.WriteLine($"Total Reduced Consumption: {totalReducedConsumption:F2} kWh"); writer.WriteLine($"Total Reduced Production: {totalReducedProduction:F2} kWh"); writer.WriteLine($"Estimated Annual Savings: €{savings:F2}\n"); // Generate scenario graph data writer.WriteLine($"### Battery Performance for {batteryCount} Battery{(batteryCount > 1 ? "ies" : "")}\n"); writer.WriteLine("```"); writer.WriteLine("Date,Charged Energy,Used Energy,Remaining Energy"); foreach (var result in results) { writer.WriteLine($"{result.Date:yyyy-MM-dd},{result.ChargedEnergy:F2},{result.UsedEnergy:F2},{result.RemainingEnergy:F2}"); } writer.WriteLine("```\n"); writer.WriteLine($"![Battery Performance Graph](battery_{batteryCount}_graph.png)"); writer.WriteLine("(Graph showing charged energy in blue, used energy in orange, and remaining energy in gray)\n"); // Detailed daily results writer.WriteLine("### Daily Results"); writer.WriteLine("| Date | Charged (kWh) | Used (kWh) | Remaining (kWh) |"); writer.WriteLine("|------|---------------|------------|-----------------|"); foreach (var result in results.Take(10)) // Show first 10 days { writer.WriteLine($"| {result.Date:yyyy-MM-dd} | {result.ChargedEnergy:F2} | {result.UsedEnergy:F2} | {result.RemainingEnergy:F2} |"); } writer.WriteLine("\n---\n"); } } Console.WriteLine("Report generated: BatteryAnalysisReport.md"); } } }