<?php

namespace App\Http\Controllers;

use App\Models\Sewa;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class RiwayatController extends Controller
{
    /**
     * Menampilkan daftar riwayat pemesanan
     */
    public function index()
    {
        // Ambil data sewa yang terkait dengan user yang sedang login dan bukan draft
        $sewas = Sewa::with(['paket', 'kota'])
                ->where('user_id', Auth::id())
                ->where('status', '!=', 'draft')
                ->orderBy('created_at', 'desc')
                ->get();
        
        return view('riwayat', compact('sewas'));
    }
    
    /**
     * Menampilkan detail riwayat pemesanan
     */
    public function show($id)
    {
        $sewa = Sewa::with('paket')->findOrFail($id);
        
        // Pastikan yang melihat adalah pemilik pesanan
        if ($sewa->user_id != Auth::id() && !Auth::user()->tipe_pengguna == 'admin') {
            return redirect()->route('riwayat')
                ->with('error', 'Anda tidak memiliki akses untuk melihat pesanan ini.');
        }
        
        return view('detail-riwayat', compact('sewa'));
    }
    
    /**
     * Membatalkan pemesanan
     */
    public function cancel($id)
    {
        $sewa = Sewa::findOrFail($id);
        
        // Pastikan yang membatalkan adalah pemilik pesanan
        if ($sewa->user_id != Auth::id()) {
            return redirect()->route('riwayat')
                ->with('error', 'Anda tidak memiliki akses untuk membatalkan pesanan ini.');
        }
        
        // Izinkan pembatalan untuk status yang belum selesai atau dibatalkan
        if (in_array($sewa->status, ['completed', 'dibatalkan', 'ongoing'])) {
            return redirect()->route('riwayat')
                ->with('error', 'Pesanan ini tidak dapat dibatalkan karena status sudah ' . $sewa->status);
        }

        // Tambahkan catatan jika pembatalan setelah disetujui
        if ($sewa->status === 'confirmed') {
            $sewa->catatan = ($sewa->catatan ? $sewa->catatan . "\n" : '') . 
                            "[DIBATALKAN OLEH PENYEWA SETELAH DISETUJUI] - " . now();
        }
        
        $sewa->status = 'dibatalkan';
        $sewa->save();
        
        $message = 'Pesanan berhasil dibatalkan.';
        if ($sewa->status === 'confirmed') {
            $message .= ' Mohon hubungi admin untuk informasi biaya pembatalan.';
        }
        
        return redirect()->route('riwayat')
            ->with('success', $message);
    }
    
    /**
     * Halaman untuk admin melihat semua riwayat pesanan
     */
    public function adminIndex()
    {
        // Hanya admin yang bisa akses
        if (!Auth::user()->tipe_pengguna == 'admin') {
            return redirect()->route('dashboard');
        }
        
        $sewas = Sewa::with(['paket', 'user'])
                ->orderBy('created_at', 'desc')
                ->get();
        
        return view('admin.riwayat', compact('sewas'));
    }
    
    /**
     * Mengubah status pemesanan (khusus admin)
     */
    public function updateStatus(Request $request, $id)
    {
        // Hanya admin yang bisa akses
        if (!Auth::user()->tipe_pengguna == 'admin') {
            return redirect()->route('dashboard');
        }
        
        $request->validate([
            'status' => 'required|in:pending,confirmed,ongoing,completed,dibatalkan',
        ]);
        
        $sewa = Sewa::findOrFail($id);
        $sewa->status = $request->status;
        $sewa->save();
        
        return redirect()->route('admin.riwayat')
            ->with('success', 'Status pesanan berhasil diperbarui.');
    }
} 