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 Detail(string nama, string rw) { if (string.IsNullOrEmpty(nama) || string.IsNullOrEmpty(rw)) return RedirectToAction("Index"); ViewBag.Nama = nama; ViewBag.RW = rw; return View(); } [HttpGet] public IActionResult TableDetail(string rw) { var data = Enumerable.Range(1, 10) .Select(i => new { id = i, tanggal = "2025-09-22", rw = rw ?? "04", kelurahan = "Tomang", mudah_terurai = "17/4", materi_daur = "17/4", b3 = "17/4", residu_jumlah = "17/4", photo = 0 }) .ToList(); return Json(new { data }); } [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; } var rw = (index % 10 + 1).ToString("D2"); var detailUrl = $"/DataPendampingRw/Detail?nama={System.Web.HttpUtility.UrlEncode(nama)}&rw={rw}"; return new { nama, checklist = BuildMetricBadge(checklistCount, 10, 15), foto = BuildFotoIndicator(fotoCount), rumah_aktif_memilah = BuildRatioBadge(rumahAktif, targetRumah), aksi = BuildDetailAction(detailUrl), }; }) .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 }); } [HttpGet] public IActionResult DetailPendamping(string nama, string rw, string tanggal) { if (string.IsNullOrEmpty(nama) || string.IsNullOrEmpty(rw)) return RedirectToAction("Index"); ViewBag.Nama = nama; ViewBag.RW = rw; ViewBag.Tanggal = tanggal ?? DateTime.Now.ToString("yyyy-MM-dd"); return View(); } [HttpGet] public IActionResult TableDetailPendamping(string rw, string tanggal) { var random = new Random(); var data = Enumerable.Range(1, 50) .Select(i => new { no = i, alamat_rumah = GenerateAlamat(i), rw = rw ?? "04", mudah_terurai = true, material_daur = true, b3 = true, residu = true, photo = random.Next(0, 5) }) .ToList(); return Json(new { data }); } private static string GenerateAlamat(int index) { var streetNames = new[] { "Kedongan", "Jambu", "Mangga", "Durian", "Sawo", "Mangga", "Rambutan", "Salak", "Nangka", "Duku" }; var randomStreet = streetNames[index % streetNames.Length]; var houseNumber = (index * 11) % 100 + 1; return $"Jalan {randomStreet} No. {houseNumber}"; } 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) => $"