<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Services\DummyDataService;
use Illuminate\Http\Request;
use Carbon\Carbon;

class AdminPeminjamanController extends Controller
{
    public function index(Request $request)
    {
        $peminjamanAktif = DummyDataService::getAdminPeminjamanAktif();
        $allUsers = collect(DummyDataService::getAllSiswa()); 

        // LOGIC DENDA & WA LINK (Update Request Client)
        $peminjamanAktif = $peminjamanAktif->map(function ($item) use ($allUsers) {
            $userData = $allUsers->firstWhere('id', $item['user_id']);
            $role = $userData ? strtolower($userData['role']) : 'siswa';
            $item['role'] = $role; 

            // Hitung Denda Flat 1000/hari
            $tenggat = Carbon::parse($item['tenggat_kembali']);
            $now = Carbon::now();

            $item['hari_terlambat'] = 0;
            $item['total_denda'] = 0;
            $item['denda_per_hari'] = 1000;

            if ($now->greaterThan($tenggat)) {
                $hariTelat = $tenggat->diffInDays($now);
                $item['hari_terlambat'] = $hariTelat;
                
                if ($role === 'guru') {
                    $item['total_denda'] = 0;
                    $item['denda_per_hari'] = 0;
                } else {
                    $item['total_denda'] = $hariTelat * 1000;
                }
            }

            // Generate WA Link
            $hp = $item['nomor_hp'];
            if (substr($hp, 0, 1) == '0') {
                $hp = '62' . substr($hp, 1);
            }

            // Pesan WA dibedakan antara Guru dan Siswa
            if ($role === 'guru') {
                $pesan = "Halo Bapak/Ibu {$item['peminjam']}, buku yang dipinjam sudah melewati tenggat waktu {$item['hari_terlambat']} hari. Mohon berkenan untuk segera dikembalikan ke perpustakaan ya.";
            } else {
                $pesan = "Halo kak {$item['peminjam']}, buku anda sudah terlambat {$item['hari_terlambat']} hari dengan denda Rp " . number_format($item['total_denda'], 0, ',', '.') . ". Mohon segera dikembalikan ya.";
            }
            
            $item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan);

            return $item;
        });

        $daftarPeminjam = $peminjamanAktif->pluck('peminjam')->unique();

        return view('admin.peminjaman.index', [
            'pageTitle' => 'Manajemen Peminjaman', 
            'peminjamanAktif' => $peminjamanAktif,
            'daftarPeminjam' => $daftarPeminjam,
        ]);
    }

    public function create()
    {
        $allUsers = collect(DummyDataService::getAllSiswa());
        $peminjamanAktif = DummyDataService::getAdminPeminjamanAktif();

        $groupedUsers = $allUsers
            ->whereIn('role', ['siswa', 'guru'])
            ->map(function ($user) use ($peminjamanAktif) {

                // Hitung berapa buku yang sedang dipinjam
                $jumlahPinjam = $peminjamanAktif->where('peminjam', $user['nama_lengkap'])->count();

                $user['jumlah_pinjam'] = $jumlahPinjam;
                if (strtolower($user['role']) === 'siswa') {
                    $user['kena_limit'] = $jumlahPinjam >= 2;
                } else {
                    $user['kena_limit'] = false; 
                }

                // Cek apakah user di-banned (Nonaktif Manual)
                $user['is_banned'] = $user['is_banned'] ?? false;
                $user['disabled'] = $user['kena_limit'] || $user['is_banned'];

                if ($user['is_banned']) {
                    $user['status_text'] = "(Akun Dibekukan)";
                } elseif ($user['kena_limit']) {
                    $user['status_text'] = "(Limit Penuh: 2/2)";
                } else {
                    $user['status_text'] = "";
                }

                $user['jabatan'] = $user['jabatan'] ?? 'Guru Mata Pelajaran';
                
                return $user;
            })
            ->groupBy('role');

        $daftarBuku = DummyDataService::getAllBooks()
            ->where('status', 'Tersedia')
            ->filter(function ($buku) {
                if (is_array($buku['tipe_akses'])) {
                    return in_array('offline', $buku['tipe_akses']);
                }
                return $buku['tipe_akses'] === 'offline';
            });

        return view('admin.peminjaman.create', [
            'pageTitle' => 'Buat Peminjaman Manual',
            'groupedUsers' => $groupedUsers,
            'daftarBuku' => $daftarBuku,
        ]);
    }

    /**
     * Menampilkan halaman KHUSUS Manajemen Denda (Siswa & Guru Telat).
     */
    public function dendaIndex()
    {
        $allData = DummyDataService::getAdminPeminjamanAktif();
        $allSiswaRaw = collect(DummyDataService::getAllSiswa());
        $now = \Carbon\Carbon::now();

        // LOGIC AUTO-BAN
        $allSiswa = $allSiswaRaw->map(function ($siswa) use ($allData, $now) {
            $pinjamanUser = $allData->firstWhere('user_id', $siswa['id']);
            $isTelat = false;
            
            if ($pinjamanUser) {
                $isTelat = $pinjamanUser['tenggat_kembali']->startOfDay()->lt($now->startOfDay());
            }

            if ($siswa['role'] === 'siswa' && $isTelat) {
                $siswa['is_banned'] = true;
            }

            return $siswa;
        });

        $siswaTelat = $allData->filter(function ($item) use ($now, $allSiswa) {
            $userData = $allSiswa->firstWhere('id', $item['user_id']);

            if (!$userData) return false;

            $isTelat = $item['tenggat_kembali']->startOfDay()->lt($now->startOfDay());
            $isBanned = $userData['is_banned'];
            $isTargetRole = in_array($userData['role'], ['siswa', 'guru']);

            return ($isTelat || $isBanned) && $isTargetRole;
        })->map(function ($item) use ($now, $allSiswa) {

            $tenggat = $item['tenggat_kembali']->startOfDay();
            $hariTelat = ($tenggat->lt($now->startOfDay())) ? $tenggat->diffInDays($now->startOfDay()) : 0;

            $dataSiswa = $allSiswa->firstWhere('id', $item['user_id']);
            $role = $dataSiswa ? strtolower($dataSiswa['role']) : 'siswa';
            $item['role'] = $role;

            if ($role === 'guru') {
                $item['total_denda'] = 0;
            } else {
                $item['total_denda'] = $hariTelat * $item['denda_per_hari'];
            }

            $item['hari_terlambat'] = $hariTelat;
            $item['is_banned'] = $dataSiswa['is_banned'] ?? false;
            $item['kelas'] = $dataSiswa['kelas'] ?? 'Guru';

            // Link WA
            $hp = $item['nomor_hp'];
            if (substr($hp, 0, 1) == '0') $hp = '62' . substr($hp, 1);

            if ($hariTelat > 0 && $role !== 'guru') {
                $pesan = "Halo {$item['peminjam']}, anda terlambat pengembalian buku. Total Denda: Rp " . number_format($item['total_denda'], 0, ',', '.');
            } elseif ($hariTelat > 0 && $role === 'guru') {
                $pesan = "Halo Bapak/Ibu {$item['peminjam']}, mohon berkenan untuk mengembalikan buku yang telah melewati tenggat waktu.";
            } else {
                $pesan = "Halo {$item['peminjam']}, akun anda sedang dinonaktifkan sementara. Mohon hubungi petugas.";
            }
            
            $item['wa_link'] = "https://wa.me/{$hp}?text=" . urlencode($pesan);

            return $item;
        });

        $listKelas = $siswaTelat->pluck('kelas')->unique()->values();

        return view('admin.denda.index', [
            'pageTitle' => 'Manajemen Denda & Sanksi',
            'siswaTelat' => $siswaTelat,
            'listKelas' => $listKelas
        ]);
    }

    /**
     * Dummy function untuk tombol Sanksi
     */
    public function berikanSanksi(Request $request)
    {
        return response()->json(['status' => 'success']);
    }
}