<?php

namespace App\Http\Controllers;

use App\Models\Siswa;
use App\Models\Tagihan;
use App\Models\TahunAjaran;
use App\Services\FonnteService;
use Carbon\Carbon;
use Illuminate\Http\Request;

class TagihanController extends Controller
{
    public function __construct()
    {
        $this->middleware('auth');
    }

    /**
     * Halaman utama: form pencarian NIS
     */
    public function index()
    {
        // Hitung total siswa menunggak & total tunggakan untuk ditampilkan di halaman
        $stats = $this->hitungStatistikTunggakan();
        return view('tagihan.index', $stats);
    }

    /**
     * Hitung statistik tunggakan semua siswa aktif (dipakai index & AJAX)
     */
    private function hitungStatistikTunggakan(): array
    {
        $now = Carbon::now();
        $bulanNow = (int) $now->format('n');
        $tahunNow = (int) $now->format('Y');

        // SPP tunggakan: status belum_bayar|kurang dan sudah jatuh tempo
        $tunggakanSPP = Tagihan::whereIn('status', ['belum_bayar', 'kurang'])
            ->whereNotNull('bulan')
            ->where(function ($q) use ($now) {
                $q->where(function ($a) use ($now) {
                    $a->whereNotNull('tanggal_jatuh_tempo')
                      ->where('tanggal_jatuh_tempo', '<', $now->toDateString());
                })->orWhere(function ($b) use ($now) {
                    $b->whereNull('tanggal_jatuh_tempo')
                      ->whereRaw("LAST_DAY(CONCAT(`tahun`, '-', LPAD(`bulan`, 2, '0'), '-01')) < ?", [$now->toDateString()]);
                });
            })
            ->with(['siswa'])
            ->get();

        // DPP tunggakan: status belum_bayar|kurang dan bulan null
        $tunggakanDPP = Tagihan::whereIn('status', ['belum_bayar', 'kurang'])
            ->whereNull('bulan')
            ->with(['siswa'])
            ->get();

        // Gabungkan dan group per siswa
        $allTunggakan = $tunggakanSPP->concat($tunggakanDPP);

        // Filter: hanya siswa aktif dengan no_wa
        $perSiswa = $allTunggakan
            ->filter(fn($t) => $t->siswa && $t->siswa->status === 'aktif' && $t->siswa->no_wa)
            ->groupBy('siswa_id');

        $totalSiswaMenunggak = $perSiswa->count();
        $totalTunggakanAll   = $allTunggakan
            ->filter(fn($t) => $t->siswa && $t->siswa->status === 'aktif')
            ->sum('sisa_tagihan');

        return compact('totalSiswaMenunggak', 'totalTunggakanAll');
    }

    /**
     * AJAX: Ambil daftar seluruh siswa yang menunggak beserta info WA-nya
     */
    public function daftarTunggakanSemua(Request $request)
    {
        $now = Carbon::now();
        $bulanSekarang = $now->translatedFormat('F');
        $tahunSekarang = $now->format('Y');

        // SPP tunggakan
        $tunggakanSPP = Tagihan::whereIn('status', ['belum_bayar', 'kurang'])
            ->whereNotNull('bulan')
            ->where(function ($q) use ($now) {
                $q->where(function ($a) use ($now) {
                    $a->whereNotNull('tanggal_jatuh_tempo')
                      ->where('tanggal_jatuh_tempo', '<', $now->toDateString());
                })->orWhere(function ($b) use ($now) {
                    $b->whereNull('tanggal_jatuh_tempo')
                      ->whereRaw("LAST_DAY(CONCAT(`tahun`, '-', LPAD(`bulan`, 2, '0'), '-01')) < ?", [$now->toDateString()]);
                });
            })
            ->with(['siswa', 'tarifPembayaran', 'siswa.latestSiswaKelas.kelas'])
            ->get();

        // DPP tunggakan
        $tunggakanDPP = Tagihan::whereIn('status', ['belum_bayar', 'kurang'])
            ->whereNull('bulan')
            ->with(['siswa', 'tarifPembayaran', 'siswa.latestSiswaKelas.kelas'])
            ->get();

        $allTunggakan = $tunggakanSPP->concat($tunggakanDPP);

        // Group per siswa (hanya aktif dengan no_wa)
        $perSiswa = $allTunggakan
            ->filter(fn($t) => $t->siswa && $t->siswa->status === 'aktif' && $t->siswa->no_wa)
            ->groupBy('siswa_id');

        $result = [];
        foreach ($perSiswa as $siswaId => $tagihans) {
            $siswa = $tagihans->first()->siswa;
            $sppItems = $tagihans->filter(fn($t) => !is_null($t->bulan));
            $dppItems = $tagihans->filter(fn($t) => is_null($t->bulan));

            $totalTunggakan = $tagihans->sum('sisa_tagihan');

            // Bangun pesan WA
            $nomorUrut = 1;
            $daftarTagihan = '';

            if ($sppItems->count() > 0) {
                $daftarTagihan .= "*Tunggakan SPP:*\n";
                foreach ($sppItems->sortBy(fn($t) => $t->tahun . str_pad($t->bulan, 2, '0', STR_PAD_LEFT)) as $ts) {
                    $namaBulan = [
                        1=>'Januari',2=>'Februari',3=>'Maret',4=>'April',
                        5=>'Mei',6=>'Juni',7=>'Juli',8=>'Agustus',
                        9=>'September',10=>'Oktober',11=>'November',12=>'Desember',
                    ][$ts->bulan] ?? '';
                    $daftarTagihan .= "{$nomorUrut}. {$namaBulan} {$ts->tahun}"
                        . ' - Rp ' . number_format($ts->sisa_tagihan, 0, ',', '.') . "\n";
                    $nomorUrut++;
                }
            }

            if ($dppItems->count() > 0) {
                $daftarTagihan .= "\n*Tunggakan DPP:*\n";
                foreach ($dppItems as $td) {
                    $daftarTagihan .= "{$nomorUrut}. DPP"
                        . ' - Rp ' . number_format($td->sisa_tagihan, 0, ',', '.') . "\n";
                    $nomorUrut++;
                }
            }

            if ($daftarTagihan === '') {
                $daftarTagihan = "-\n";
            }

            $namaKelas = $siswa->kelas->nama_kelas ?? '-';

            $waPesan = "Kepada Yth.\n"
                . "Orang tua/Wali dari ananda *" . $siswa->nama_lengkap . "*\n"
                . "Kelas : {$namaKelas}\n"
                . "Di tempat\n\n"
                . "Dengan Hormat,\n\n"
                . "Dengan ini kami menginformasikan bahwa menurut catatan kami di bagian keuangan per-akhir tanggal 7 {$bulanSekarang} {$tahunSekarang}, terdapat kewajiban Bapak/Ibu yang belum terselesaikan sebagai berikut :\n\n"
                . $daftarTagihan
                . "\n*Total Tagihan : Rp " . number_format($totalTunggakan, 0, ',', '.') . "*\n\n"
                . "Pembayaran dapat dilakukan melalui :\n"
                . "- Loket YPKK\n"
                . "- Transfer ke Giro Mandiri No. Rek. 1430009494947\n\n"
                . "Apabila Bapak/Ibu sudah melakukan pembayaran, mohon untuk mengabaikan pesan ini.\n\n"
                . "Demikian, atas perhatian dan kerjasamanya kami ucapkan terimakasih.\n\n"
                . "Hormat kami,\n"
                . "Bendahara YPKK\n\n"
                . "_*Catatan:*_\n"
                . "_Apabila terdapat perbedaan data di atas, mohon konfirmasi melalui WhatsApp Call Center YPKK 085233763022 atau langsung ke loket YPKK pada hari dan jam kerja._";

            $noWa = preg_replace('/[^0-9]/', '', $siswa->no_wa);
            if (str_starts_with($noWa, '0')) {
                $noWa = '62' . substr($noWa, 1);
            }
            $waLink = 'https://wa.me/' . $noWa . '?text=' . rawurlencode($waPesan);

            $result[] = [
                'siswa_id'        => $siswa->id,
                'nis'             => $siswa->nis,
                'nama_lengkap'    => $siswa->nama_lengkap,
                'kelas'           => $namaKelas,
                'no_wa'           => FonnteService::formatNomor($siswa->no_wa),
                'no_wa_raw'       => $siswa->no_wa,
                'total_tunggakan' => $totalTunggakan,
                'pesan'           => $waPesan,
            ];
        }

        // Urutkan berdasarkan nama
        usort($result, fn($a, $b) => strcmp($a['nama_lengkap'], $b['nama_lengkap']));

        return response()->json([
            'success' => true,
            'data'    => $result,
            'total'   => count($result),
        ]);
    }

    /**
     * AJAX POST: Kirim WA Tunggakan per-siswa via Fonnte
     */
    public function kirimWa(Request $request)
    {
        $request->validate([
            'nis' => 'required|string',
        ]);

        $siswa = Siswa::where('nis', $request->nis)->first();
        if (!$siswa) {
            return response()->json(['success' => false, 'message' => 'Siswa tidak ditemukan.'], 404);
        }
        if (!$siswa->no_wa) {
            return response()->json(['success' => false, 'message' => 'Nomor WA siswa tidak tersedia.'], 422);
        }

        // Pastikan pesan sudah dibuild di controller cari()
        // Gunakan pesan yang dikirim dari client (dibangun di view hasil.blade.php)
        $request->validate(['pesan' => 'required|string']);
        $pesan = $request->pesan;

        $noWa   = FonnteService::formatNomor($siswa->no_wa);
        $result = app(FonnteService::class)->send($noWa, $pesan);

        \App\Models\RiwayatPengirimanWa::create([
            'siswa_id' => $siswa->id,
            'nama_siswa' => $siswa->nama_lengkap,
            'no_wa' => $noWa,
            'jenis_pesan' => 'Tagihan Tunggakan',
            'status' => $result['success'] ? 'berhasil' : 'gagal',
            'keterangan' => $result['success'] ? null : ($result['message'] ?? 'Gagal mengirim pesan'),
            'dikirim_oleh' => auth()->id(),
        ]);

        return response()->json($result);
    }

    /**
     * AJAX POST: Kirim WA Tunggakan bulk (semua / terpilih) via Fonnte
     */
    public function kirimWaBulk(Request $request)
    {
        $request->validate([
            'siswa'            => 'required|array|min:1',
            'siswa.*.no_wa'    => 'required|string',
            'siswa.*.pesan'    => 'required|string',
            'siswa.*.nis'      => 'required|string',
        ]);

        $fonnte   = app(FonnteService::class);
        $berhasil = [];
        $gagal    = [];

        foreach ($request->siswa as $item) {
            $noWa   = FonnteService::formatNomor($item['no_wa']);
            $result = $fonnte->send($noWa, $item['pesan']);

            $siswa = Siswa::where('nis', $item['nis'])->first();

            \App\Models\RiwayatPengirimanWa::create([
                'siswa_id' => $siswa ? $siswa->id : null,
                'nama_siswa' => $siswa ? $siswa->nama_lengkap : null,
                'no_wa' => $noWa,
                'jenis_pesan' => 'Tagihan Tunggakan massal',
                'status' => $result['success'] ? 'berhasil' : 'gagal',
                'keterangan' => $result['success'] ? null : ($result['message'] ?? 'Gagal mengirim pesan'),
                'dikirim_oleh' => auth()->id(),
            ]);

            if ($result['success']) {
                $berhasil[] = $item['nis'];
            } else {
                $gagal[] = [
                    'nis'     => $item['nis'],
                    'reason'  => $result['message'],
                ];
            }

            // Jeda kecil agar tidak rate-limit Fonnte
            usleep(300_000); // 0.3 detik
        }

        return response()->json([
            'success'         => true,
            'berhasil_count'  => count($berhasil),
            'gagal_count'     => count($gagal),
            'gagal'           => $gagal,
        ]);
    }

    /**
     * Cari siswa + tampilkan tagihan dengan filter riwayat tahun ajaran
     */
    public function cari(Request $request)
    {
        $request->validate([
            'nis' => 'required|string',
        ]);

                $siswa = Siswa::where('nis', $request->nis)->first();

        if (!$siswa) {
            return redirect()->route('tagihan.index')
                ->with('error', 'Siswa dengan NIS "' . $request->nis . '" tidak ditemukan.');
        }

        // Restrict Wali Kelas to only view students in their assigned class
        if (auth()->user()->hasRole('wali_kelas')) {
            $myKelasId = auth()->user()->kelas_id;
            $isMyStudent = $siswa->siswaKelas()->where('kelas_id', $myKelasId)->exists();
            
            if (!$isMyStudent) {
                return redirect()->route('tagihan.index')
                    ->with('error', 'Akses Ditolak: Anda hanya dapat melihat data siswa di kelas yang Anda ampu.');
            }
        }

        // Panggil auto generate active month agar tagihan berjalan terbentuk otomatis
        app(\App\Services\TagihanService::class)->autoGenerateActiveMonth();

        // Dapatkan semua tahun ajaran di mana siswa ini memiliki tagihan
        $tahunAjarans = TahunAjaran::whereHas('tagihan', function($q) use ($siswa) {
            $q->where('siswa_id', $siswa->id);
        })->orderBy('tahun', 'desc')->get();

        // Tentukan tahun ajaran yang akan ditampilkan
        $selectedTahunAjaranId = $request->query('tahun_ajaran_id');
        
        $tagihans = Tagihan::where('siswa_id', $siswa->id)->get();
        // Determine default selected tahun ajaran based on existing tagihan data for the student
        if (!$selectedTahunAjaranId) {
            $activeTA = TahunAjaran::aktif()->first();
            if ($activeTA && $siswa->siswaKelasHistory()->where('tahun_ajaran_id', $activeTA->id)->exists()) {
                $selectedTahunAjaranId = $activeTA->id;
            } else {
                $latestSK = $siswa->siswaKelasHistory()->orderByDesc('id')->first();
                if ($latestSK) {
                    $selectedTahunAjaranId = $latestSK->tahun_ajaran_id;
                } else {
                    $latestTagihan = $tagihans->sortByDesc('created_at')->first();
                    if ($latestTagihan) {
                        $selectedTahunAjaranId = $latestTagihan->tahun_ajaran_id;
                    } elseif ($tahunAjarans->isNotEmpty()) {
                        $selectedTahunAjaranId = $tahunAjarans->first()->id;
                    }
                }
            }
        }

        $siswaKelasInSelectedYear = $siswa->siswaKelasHistory()->where('tahun_ajaran_id', $selectedTahunAjaranId)->first();
        $jenjangInSelectedYear = $siswaKelasInSelectedYear?->kelas?->jenjang;

        $tagihansQuery = Tagihan::with(['tarifPembayaran', 'kelas', 'tahunAjaran'])
            ->join('tahun_ajaran', 'tagihan.tahun_ajaran_id', '=', 'tahun_ajaran.id')
            ->where('siswa_id', $siswa->id)
            ->orderBy('tahun_ajaran.tahun', 'asc')
            ->orderBy('bulan', 'asc')
            ->select('tagihan.*');
        $semuaTagihan = $tagihansQuery->get();

        // Ensure DPP tagihan have the correct tarif based on student's jenjang and tahun ajaran
        $semuaTagihan->each(function ($tagihan) use ($siswa) {
            // Skip if already has a tarifPembayaran (SPP or correctly set DPP)
            if ($tagihan->tarifPembayaran) {
                return;
            }
            
            $skForTagihan = $siswa->siswaKelasHistory()->where('tahun_ajaran_id', $tagihan->tahun_ajaran_id)->first();
            $jenjang = $skForTagihan?->kelas?->jenjang;

            // Attempt to find DPP tariff matching jenjang and tahun ajaran
            $tarif = \App\Models\TarifPembayaran::where('jenis', 'DPP')
                ->where('jenjang', $jenjang)
                ->where('tahun_ajaran_id', $tagihan->tahun_ajaran_id)
                ->first();
            if ($tarif) {
                $tagihan->jumlah_tagihan = $tarif->nominal;
            }
        });

        // Remove any tagihan that still lack a tarifPembayaran (no matching tariff for this student)
        $semuaTagihan = $semuaTagihan->filter(fn($t) => $t->tarifPembayaran !== null);

        $tagihanSPP = $semuaTagihan->filter(function($t) use ($selectedTahunAjaranId) {
            if ($t->tarifPembayaran && $t->tarifPembayaran->jenis === 'SPP') {
                return !$selectedTahunAjaranId || $t->tahun_ajaran_id == $selectedTahunAjaranId;
            }
            return false;
        });

        $tagihanDPP = $semuaTagihan->filter(function($t) use ($selectedTahunAjaranId, $jenjangInSelectedYear) {
            if (!$t->tarifPembayaran || $t->tarifPembayaran->jenis !== 'DPP') {
                return false;
            }

            // 1. If the DPP belongs to the selected school year
            if ($t->tahun_ajaran_id == $selectedTahunAjaranId) {
                return true;
            }

            // 2. If it belongs to a different school year, but is from the SAME jenjang AND is NOT lunas
            $jenjangTagihan = $t->tarifPembayaran->jenjang;
            if ($jenjangTagihan && $jenjangInSelectedYear && $jenjangTagihan === $jenjangInSelectedYear) {
                return $t->status !== 'lunas';
            }

            return false;
        });

                $tagihans = $tagihanSPP->concat($tagihanDPP);
        $adaTagihan = $tagihans->isNotEmpty();
        $tarifTidakTersedia = $tagihans->isEmpty();

        // Gunakan tarif_lama sebagai nominal efektif untuk DPP jika tersedia
        $totalTagihan = $tagihans->sum(function ($t) {
            return ($t->tarif_lama > 0) ? $t->tarif_lama : $t->jumlah_tagihan;
        });
        $totalTerbayar = $tagihans->sum('jumlah_terbayar');
        // sisa_tagihan accessor sudah memperhitungkan tarif_lama
        $totalSisa = $tagihans->sum(fn($t) => $t->sisa_tagihan);

        // Hitung khusus tunggakan (jatuh tempo)
        $tunggakanSPP = $tagihanSPP->filter(fn($t) => $t->is_tunggakan);
        $tunggakanDPP = $tagihanDPP->filter(fn($t) => $t->sisa_tagihan > 0);
        
        $totalTunggakanSisa = $tunggakanSPP->sum('sisa_tagihan') + $tunggakanDPP->sum('sisa_tagihan');
        


        $waPesan = "";
        $waLink = "";

        if ($totalTunggakanSisa > 0 && $siswa->no_wa) {
            $bulanSekarang = \Carbon\Carbon::now()->translatedFormat('F');
            $tahunSekarang = \Carbon\Carbon::now()->format('Y');

            // Bangun daftar tagihan SPP dengan penomoran
            $nomorUrut = 1;
            $daftarTagihan = "";

            if ($tunggakanSPP->count() > 0) {
                $daftarTagihan .= "*Tunggakan SPP:*\n";
                foreach ($tunggakanSPP as $ts) {
                    $daftarTagihan .= "{$nomorUrut}. " . $ts->nama_bulan . ' ' . $ts->tahun
                        . ' - Rp ' . number_format($ts->sisa_tagihan, 0, ',', '.') . "\n";
                    $nomorUrut++;
                }
            }

            if ($tunggakanDPP->count() > 0) {
                $daftarTagihan .= "\n*Tunggakan DPP:*\n";
                foreach ($tunggakanDPP as $td) {
                    $daftarTagihan .= "{$nomorUrut}. DPP"
                        . ' - Rp ' . number_format($td->sisa_tagihan, 0, ',', '.') . "\n";
                    $nomorUrut++;
                }
            }

            if ($daftarTagihan === "") {
                $daftarTagihan = "-\n";
            }

            $waPesan = "Kepada Yth.\n"
                . "Orang tua/Wali dari ananda *" . $siswa->nama_lengkap . "*\n"
                . "Kelas : " . ($siswaKelasInSelectedYear?->kelas?->nama_kelas ?? '-') . "\n"
                . "Di tempat\n\n"
                . "Dengan Hormat,\n\n"
                . "Dengan ini kami menginformasikan bahwa menurut catatan kami di bagian keuangan per-akhir tanggal 7 {$bulanSekarang} {$tahunSekarang}, terdapat kewajiban Bapak/Ibu yang belum terselesaikan sebagai berikut :\n\n"
                . $daftarTagihan
                . "\n*Total Tagihan : Rp " . number_format($totalTunggakanSisa, 0, ',', '.') . "*\n\n"
                . "Pembayaran dapat dilakukan melalui :\n"
                . "- Loket YPKK\n"
                . "- Transfer ke Giro Mandiri No. Rek. 1430009494947\n\n"
                . "Apabila Bapak/Ibu sudah melakukan pembayaran, mohon untuk mengabaikan pesan ini.\n\n"
                . "Demikian, atas perhatian dan kerjasamanya kami ucapkan terimakasih.\n\n"
                . "Hormat kami,\n"
                . "Bendahara YPKK\n\n"
                . "_*Catatan:*_\n"
                . "_Apabila terdapat perbedaan data di atas, mohon konfirmasi melalui WhatsApp Call Center YPKK 085233763022 atau langsung ke loket YPKK pada hari dan jam kerja._";

            // Format no_wa, misalnya dari 08xx jadi 628xx
            $noWa = preg_replace('/[^0-9]/', '', $siswa->no_wa);
            if (str_starts_with($noWa, '0')) {
                $noWa = '62' . substr($noWa, 1);
            }

            $waLink = "https://wa.me/" . $noWa . "?text=" . rawurlencode($waPesan);
        }

        return view('tagihan.hasil', compact(
            'siswa',
            'tagihanSPP',
            'tagihanDPP',
            'tagihans',
            'totalTagihan',
            'totalTerbayar',
            'totalSisa',
            'tahunAjarans',
            'selectedTahunAjaranId',
            'totalTunggakanSisa',
            'waPesan',
            'tarifTidakTersedia'
        ));
    }

    /**
     * AJAX: Search NIS autocomplete
     */
    public function searchNis(Request $request)
    {
        $q       = $request->q;
        
        $query = Siswa::where(function($query) use ($q) {
            $query->where('nis', 'like', "%{$q}%")
                  ->orWhere('nama_lengkap', 'like', "%{$q}%");
        });

        if (auth()->user()->hasRole('wali_kelas')) {
            $myKelasId = auth()->user()->kelas_id;
            $query->whereHas('siswaKelas', fn($q) => $q->where('kelas_id', $myKelasId));
        }

        $results = $query->limit(10)->get(['id', 'nis', 'nama_lengkap']);

        $formatted = $results->map(fn($s) => [
            'id'   => $s->nis,
            'text' => $s->nis . ' - ' . $s->nama_lengkap,
        ]);

        return response()->json(['results' => $formatted]);
    }

    /**
     * Update Tarif Lama untuk DPP
     */
    public function updateTarifLama(Request $request, Tagihan $tagihan)
    {
        $request->validate([
            'tarif_lama' => 'required|numeric|min:0',
            'potongan_dpp' => 'nullable|numeric|min:0|max:100',
        ]);

        // Pastikan hanya DPP (atau bisa untuk SPP jika mau, tapi requestnya bilangnya DPP)
        if ($tagihan->tarifPembayaran && $tagihan->tarifPembayaran->jenis !== 'DPP') {
            return back()->with('error', 'Tarif lama/potongan hanya bisa diset untuk tagihan DPP.');
        }

        // Jika ada input potongan_dpp dan valid (opsional backend logic)
        if ($request->filled('potongan_dpp') && $request->potongan_dpp > 0) {
            $tarifAwal = $tagihan->jumlah_tagihan;
            $potongan = $request->potongan_dpp;
            $tagihan->tarif_lama = $tarifAwal - ($tarifAwal * $potongan / 100);
        } else {
            $tagihan->tarif_lama = $request->tarif_lama;
        }
        
        // Panggil updateStatus agar lunas otomatis jika terbayar + tarif lama >= tagihan
        $tagihan->updateStatus();

        return back()->with('success', 'Tarif/Potongan DPP berhasil diperbarui.');
    }

    public function updatePotonganSppBulk(Request $request)
    {
        $request->validate([
            'siswa_id' => 'required|exists:siswa,id',
            'tahun_ajaran_id' => 'required|exists:tahun_ajaran,id',
            'potongan_spp' => 'required|numeric|min:0|max:100',
        ]);

        if (!auth()->user()->hasRole('admin') && !auth()->user()->hasRole('bendahara')) {
            return back()->with('error', 'Akses ditolak.');
        }

        $tagihanSPP = Tagihan::where('siswa_id', $request->siswa_id)
            ->where('tahun_ajaran_id', $request->tahun_ajaran_id)
            ->whereHas('tarifPembayaran', function($q) {
                $q->where('jenis', 'SPP');
            })
            ->whereIn('status', ['belum_bayar', 'kurang'])
            ->get();

        if ($tagihanSPP->isEmpty()) {
            return back()->with('info', 'Tidak ada tagihan SPP yang belum lunas pada tahun ajaran ini.');
        }

        $potongan = $request->potongan_spp;
        
        foreach ($tagihanSPP as $tagihan) {
            $tarifAwal = $tagihan->jumlah_tagihan;
            $nominalBaru = $tarifAwal - ($tarifAwal * $potongan / 100);
            $tagihan->tarif_lama = $nominalBaru;
            $tagihan->updateStatus();
        }

        return back()->with('success', 'Potongan SPP berhasil diterapkan ke semua tagihan bulan yang belum lunas.');
    }
}
