/home/brandsfa/public_html/app/Http/Controllers/Admin/CityUpZilaController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use App\Traits\PushNotificationTrait;
use Illuminate\Contracts\View\View;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use App\Models\City;
use App\Models\UpZila;
use App\Models\Translation;
use Illuminate\Support\Str;
use Brian2694\Toastr\Facades\Toastr;
use Artisan;

class CityUpZilaController extends Controller
{
    public function __construct(
        private readonly City $city,
        private readonly UpZila $upzila,
        private readonly Translation $translation 
        ){
       
    }
    public function city_index(Request $request){
        
        $sort_search =null;
        $cities = City::orderBy('id', 'desc');
        if ($request->has('searchValue')){
            $sort_search = $request->searchValue;
            $cities = $cities->where('name', 'like', '%'.$sort_search.'%');
        }
        $cities = $cities->paginate(15);
        $languages = getWebConfig('pnc_language') ?? null;
        $defaultLanguage = $languages[0];
        return view('admin-views.cityupzila.city-index',[
            'cities' => $cities,
            'languages' => $languages,
            'defaultLanguage' => $defaultLanguage,
        ]);
    }
    
    public function city_store(Request $request){
        // dd($request->all());
        
        $dataArray = $this->citygetAddData($request);
        $savedCategory =$this->city->create($dataArray);
        $this->add($request,'App\Models\City',$savedCategory->id);
        Toastr::success(translate('city_added_successfully'));
        return back();
    }
    
    public function city_edit(Request $request,$id){
        
        $sort_search =null;
        $city = City::where('id',$id)->with('translations')->withoutGlobalScopes()->first();
        $languages = getWebConfig('pnc_language') ?? null;
        $defaultLanguage = $languages[0];
        return view('admin-views.cityupzila.city-edit',[
            'city' => $city,
            'languages' => $languages,
            'defaultLanguage' => $defaultLanguage,
        ]);
    }
    
    public function city_update(Request $request,$id){
        
        $dataArray = $this->citygetAddData($request);
        $savedCategory =$this->city->where('id',$id)->update($dataArray);
        $this->add($request,'App\Models\City',$id);
        Toastr::success(translate('city_updated_successfully'));
        return back();
    }
    
    public function upzilas_index(Request $request){
        
        $sort_search =null;
        $upzilas = UpZila::orderBy('id', 'desc');
        if ($request->has('searchValue')){
            $sort_search = $request->searchValue;
            $upzilas = $upzilas->where('name', 'like', '%'.$sort_search.'%');
        }
        $upzilas = $upzilas->paginate(15);
        $cities = City::orderBy('id', 'desc')->get();
        $languages = getWebConfig('pnc_language') ?? null;
        $defaultLanguage = $languages[0];
        
        return view('admin-views.cityupzila.upzila-index',[
            'cities' => $cities,
            'upzilas' => $upzilas,
            'languages' => $languages,
            'defaultLanguage' => $defaultLanguage,
        ]);
    }
    
    public function upzila_store(Request $request){
        
        $dataArray = $this->upzilagetAddData($request);
        $savedCategory =$this->upzila->create($dataArray);
        $this->add($request,'App\Models\UpZila',$savedCategory->id);
        Toastr::success(translate('upzila_added_successfully'));
        return back();
    }
    
    public function upzilas_edit(Request $request,$id){
        
        $upzila = UpZila::where('id',$id)->with('translations')->withoutGlobalScopes()->first();
        $cities = City::orderBy('id', 'desc')->get();
        $languages = getWebConfig('pnc_language') ?? null;
        $defaultLanguage = $languages[0];

        return view('admin-views.cityupzila.upzila-edit',[
            'cities' => $cities,
            'upzila' => $upzila,
            'languages' => $languages,
            'defaultLanguage' => $defaultLanguage,
        ]);

    }
    
    public function upzila_update(Request $request,$id){
        
        $dataArray = $this->upzilagetAddData($request);
        $savedCategory =$this->upzila->where('id',$id)->update($dataArray);
        $this->add($request,'App\Models\UpZila',$id);
        Toastr::success(translate('upzila_updated_successfully'));
        return back();
    }
    
    
    public function citygetAddData($request)
    {
        return [
            'name' => $request['name'][array_search('en', $request['lang'])],
            'slug' => Str::slug($request['name'][array_search('en', $request['lang'])]),
        ];
    }
    
    public function upzilagetAddData($request)
    {
        return [
            'name' => $request['name'][array_search('en', $request['lang'])],
            'slug' => Str::slug($request['name'][array_search('en', $request['lang'])]),
            'city_id' => $request['city_id'],
        ];
    }

    
    public function add( $request, $model, $id)
    {
        foreach ($request->lang as $index => $key) {
            foreach (['name','description','title'] as $type){
                if (isset($request[$type][$index]) && $key != 'en') {
                    $this->translation->insert(
                        [
                            'translationable_type' => $model,
                            'translationable_id' => $id,
                            'locale' => $key,
                            'key' => $type,
                            'value' => $request[$type][$index]
                        ]
                    );
                }
            }
        }
        return true;
    }
    
    
    
}