<?php

namespace App\Http\Controllers\Api\V1;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreCitiesRequest;
use App\Http\Requests\Admin\UpdateCitiesRequest;
use App\City;
use App\Http\Resources\City as CityResource;

class CitiesController extends Controller
{
    public function index()
    {
        return CityResource::collection(City::query()->whereEnabled(true)->get());
    }

    public function show($id)
    {
        return City::findOrFail($id);
    }

    public function update(UpdateCitiesRequest $request, $id)
    {
        $city = City::findOrFail($id);
        $city->update($request->all());
        
        $discricts           = $city->districts;
        $currentDiscrictData = [];
        foreach ($request->input('discricts', []) as $index => $data) {
            if (is_integer($index)) {
                $city->districts()->create($data);
            } else {
                $id                          = explode('-', $index)[1];
                $currentDiscrictData[$id] = $data;
            }
        }
        foreach ($discricts as $item) {
            if (isset($currentDiscrictData[$item->id])) {
                $item->update($currentDiscrictData[$item->id]);
            } else {
                $item->delete();
            }
        }

        return $city;
    }

    public function store(StoreCitiesRequest $request)
    {
        $city = City::create($request->all());
        
        foreach ($request->input('discricts', []) as $data) {
            $city->districts()->create($data);
        }

        return $city;
    }

    public function destroy($id)
    {
        $city = City::findOrFail($id);
        $city->delete();
        return '';
    }
}
