/home/brandsfa/www/app/Http/Controllers/Vendor/Shipping/CategoryShippingCostController.php
<?php

namespace App\Http\Controllers\Vendor\Shipping;

use App\Contracts\Repositories\CategoryShippingCostRepositoryInterface;
use App\Http\Controllers\BaseController;
use App\Services\CategoryShippingCostService;
use Brian2694\Toastr\Facades\Toastr;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;

class CategoryShippingCostController extends BaseController
{
    /**
     * @param CategoryShippingCostRepositoryInterface $categoryShippingCostRepo
     * @param CategoryShippingCostService $categoryShippingCostService
     */
    public function __construct(
        private readonly CategoryShippingCostRepositoryInterface $categoryShippingCostRepo,
        private readonly CategoryShippingCostService             $categoryShippingCostService,
    )
    {
    }

    /**
     * @param Request|null $request
     * @param string|null $type
     * @return View|Collection|LengthAwarePaginator|callable|RedirectResponse|null
     */
    public function index(?Request $request, string $type = null): View|Collection|LengthAwarePaginator|null|callable|RedirectResponse
    {
       return $this->update(request:$request);
    }

    /**
     * @param object $request
     * @return RedirectResponse
     */
    public function update(object $request): RedirectResponse
    {
        if ($request['ids']) {
            foreach ($request['ids'] as $key => $id) {
                $this->categoryShippingCostRepo->update(
                    id: $id,
                    data: $this->categoryShippingCostService->getUpdateCategoryWiseShippingData(
                        key: $key,
                        id: $id,
                        request: $request
                    )
                );
            }
        }
        Toastr::success(translate('category_cost_successfully_updated'));
        return redirect()->back();
    }


}