<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Services\DelhiveryService;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Log;

class ShippingController extends Controller
{
    public function __construct(
        protected DelhiveryService $delhiveryService
    ) {
    }

    public function generateDelhivery(Order $order): RedirectResponse
    {
        if ($order->delhivery_awb) {
            return redirect()->back()->with('error', 'Shipment already created for this order.');
        }

        $awb = $this->delhiveryService->createShipment($order);

        if (!$awb) {
            return redirect()->back()->with('error', 'Failed to create Delhivery shipment.');
        }

        $labelUrl = $this->delhiveryService->generateLabel($awb);

        $order->update([
            'delhivery_awb' => $awb,
            'delhivery_label_url' => $labelUrl,
            'status' => Order::STATUS_AWAITING_PICKUP,
        ]);

        return redirect()->back()->with('success', 'Delhivery shipment created successfully! AWB: ' . $awb);
    }

    public function track(Order $order): RedirectResponse
    {
        if (!$order->delhivery_awb) {
            return redirect()->back()->with('error', 'No tracking number available.');
        }

        $trackingData = $this->delhiveryService->track($order->delhivery_awb);

        if (!$trackingData) {
            return redirect()->back()->with('error', 'Failed to fetch tracking information.');
        }

        Log::info('Delhivery tracking data', ['awb' => $order->delhivery_awb, 'data' => $trackingData]);

        return redirect()->back()->with('success', 'Tracking data logged. Check application logs.');
    }
}
