<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\ActivityLog;
use App\Models\Order;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function index(Request $request)
    {
        $query = Order::with(['items', 'kiosk', 'cashier', 'restaurantTable', 'placedByStaff'])->orderByDesc('created_at');

        if ($request->filled('status')) {
            $query->where('status', $request->status);
        }
        if ($request->filled('date')) {
            $query->whereDate('created_at', $request->date);
        }

        $orders = $query->paginate(25)->withQueryString();

        return view('admin.orders.index', compact('orders'));
    }

    public function show(Order $order)
    {
        abort_unless($order->client_id === tenant()->clientId(), 404);

        $order->load(['items', 'kiosk', 'cashier', 'payments', 'restaurantTable', 'placedByStaff']);
        return view('admin.orders.show', compact('order'));
    }

    public function updateStatus(Request $request, Order $order)
    {
        abort_unless($order->client_id === tenant()->clientId(), 404);

        $data = $request->validate([
            'status' => 'required|in:preparing,ready,completed,cancelled',
        ]);

        $order->update([
            'status' => $data['status'],
            'completed_at' => $data['status'] === 'completed' ? now() : $order->completed_at,
        ]);

        ActivityLog::log('order.status_updated', "Order {$order->order_number} marked as {$data['status']}");

        return back()->with('success', 'Order status updated.');
    }
}
