<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\BorrowTransaction;
use App\Models\Anggota;
use App\Models\Koleksi;

class BorrowTransactionController extends Controller
{
    public function index()
    {
        $transactions = BorrowTransaction::with(['anggota', 'koleksi'])
            ->orderBy('tanggal_pinjam', 'desc')
            ->get();

        return view('dashboard.sirkulasi.index', compact('transactions'));
    }

    public function create()
    {
        $anggota = Anggota::all();
        $koleksi = Koleksi::available()->get(); 

        return view('dashboard.sirkulasi.create', compact('anggota', 'koleksi'));
    }

    public function store(Request $request)
    {
        $request->validate([
            'anggota_id' => 'required|exists:anggota,id',
            'koleksi_id' => 'required|exists:koleksis,biblio_id',
            'tanggal_pinjam' => 'required|date',
            'tanggal_kembali' => 'nullable|date|after_or_equal:tanggal_pinjam',
            'surat_pengantar' => 'nullable|mimes:pdf|max:2048', 
        ]);

        $alreadyBorrowed = BorrowTransaction::where('koleksi_id', $request->koleksi_id)
            ->where('status', 'dipinjam')
            ->exists();

        if ($alreadyBorrowed) {
            return redirect()->back()->withErrors(['koleksi_id' => 'Buku ini sedang dipinjam.']);
        }

        $fileName = null;
        if ($request->hasFile('surat_pengantar')) {
            $file = $request->file('surat_pengantar');
            $fileName = time() . '_' . $file->getClientOriginalName();
            $file->storeAs('public/surat_pengantar', $fileName);
        }

        BorrowTransaction::create([
            'anggota_id' => $request->anggota_id,
            'koleksi_id' => $request->koleksi_id,
            'tanggal_pinjam' => $request->tanggal_pinjam,
            'tanggal_kembali' => $request->tanggal_kembali,
            'status' => 'dipinjam',
            'surat_pengantar' => $fileName, 
        ]);

        return redirect()->route('dashboard.sirkulasi.index')
            ->with('success', 'Transaksi peminjaman berhasil disimpan!');
    }

    public function kembalikan($id)
    {
        $transaction = BorrowTransaction::findOrFail($id);

        if ($transaction->status != 'dipinjam') {
            return redirect()->route('dashboard.sirkulasi.index')
                ->with('error', 'Transaksi ini sudah dikembalikan.');
        }

        $transaction->update([
            'status' => 'dikembalikan',
            'tanggal_kembali' => now(),
        ]);

        return redirect()->route('dashboard.sirkulasi.index')
            ->with('success', 'Buku berhasil dikembalikan!');
    }
}

