<?php

namespace App\Http\Controllers\Api\V1;

use App\ResidentialComplex;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreResidentialComplexesRequest;
use App\Http\Requests\Admin\UpdateResidentialComplexesRequest;
use App\Http\Controllers\Traits\FileUploadTrait;

class ResidentialComplexesController extends Controller
{
    use FileUploadTrait;

    public function index()
    {
        return ResidentialComplex::all();
    }

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

    public function update(UpdateResidentialComplexesRequest $request, $id)
    {
        $request = $this->saveFiles($request);
        $residential_complex = ResidentialComplex::findOrFail($id);
        $residential_complex->update($request->all());
        
        $residentialComplexCharacters           = $residential_complex->residential_complex_characters;
        $currentResidentialComplexCharacterData = [];
        foreach ($request->input('residential_complex_characters', []) as $index => $data) {
            if (is_integer($index)) {
                $residential_complex->residential_complex_characters()->create($data);
            } else {
                $id                          = explode('-', $index)[1];
                $currentResidentialComplexCharacterData[$id] = $data;
            }
        }
        foreach ($residentialComplexCharacters as $item) {
            if (isset($currentResidentialComplexCharacterData[$item->id])) {
                $item->update($currentResidentialComplexCharacterData[$item->id]);
            } else {
                $item->delete();
            }
        }

        return $residential_complex;
    }

    public function store(StoreResidentialComplexesRequest $request)
    {
        $request = $this->saveFiles($request);
        $residential_complex = ResidentialComplex::create($request->all());
        
        foreach ($request->input('residential_complex_characters', []) as $data) {
            $residential_complex->residential_complex_characters()->create($data);
        }

        return $residential_complex;
    }

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