using Microsoft.AspNetCore.Mvc; using System.Linq; namespace BpsRwApp.Controllers { [Route("[controller]/[action]")] public class DataPendampingRwController : AppControllerBase { public IActionResult Index() { return View(); } [HttpGet] public IActionResult TableRapot() { var data = Enumerable.Range(0, 100) .Select(index => { var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length]; var checklistCount = 8 + (index % 15); var totalBeratSampah = 40 + (index * 3 % 70); var fotoCount = 5 + (index * 4 % 250); var rumahAktif = (index * 3) % 15; return new { nama, checklist = BuildMetricBadge(checklistCount, 8, 12), berat_sampah = BuildMetricBadge(totalBeratSampah, 50, 90), foto = BuildFotoIndicator(fotoCount), rumah_aktif_memilah = BuildMetricBadge(rumahAktif, 3, 9), status = BuildStatusBadge(index), }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult TableChecklist() { var data = Enumerable.Range(0, 100) .Select(index => { var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length]; var checklistCount = 9 + (index % 18); var fotoCount = 3 + (index * 2 % 180); var targetRumah = 8 + (index % 10); var rumahAktif = targetRumah - (index % 5); if (rumahAktif < 0) { rumahAktif = 0; } return new { nama, checklist = BuildMetricBadge(checklistCount, 10, 15), foto = BuildFotoIndicator(fotoCount), rumah_aktif_memilah = BuildRatioBadge(rumahAktif, targetRumah), aksi = BuildDetailAction(), }; }) .ToArray(); return Json(new { data }); } [HttpGet] public IActionResult TableBeratSampah() { var data = Enumerable.Range(0, 100) .Select(index => { var nama = ControllerSampleData.PersonNames[index % ControllerSampleData.PersonNames.Length]; var mudahTerurai = 40 + (index * 2 % 80); var materialDaurUlang = 25 + (index * 3 % 60); var b3 = 5 + index % 7; var residu = 10 + index % 9; var totalBerat = mudahTerurai + materialDaurUlang + b3 + residu; return new { nama, total_berat = totalBerat, mudah_terurai = mudahTerurai, material_daur_ulang = materialDaurUlang, b3, residu, }; }) .ToArray(); return Json(new { data }); } private static string BuildMetricBadge(int value, int warningThreshold, int successThreshold) { string tone; if (value <= 0) { tone = "error"; } else if (value < warningThreshold) { tone = "warning"; } else if (value < successThreshold) { tone = "info"; } else { tone = "success"; } return BuildBadge(value.ToString(), tone); } private static string BuildRatioBadge(int achieved, int target) { var tone = achieved <= 0 ? "error" : achieved < target ? "warning" : "success"; return BuildBadge($"{achieved}/{target}", tone); } private static string BuildBadge(string label, string tone) => $"