<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ValidationTrait;
use App\Http\Requests\Api\PlanningFilterRequest;
use App\Http\Resources\Planning\PlanningCollection;
use App\Http\Resources\Planning\PlanningFilterParameters;
use App\Planning;
use App\Http\Resources\Planning\Planning as PlanningResource;
use App\Repository\PlanningRepository;
use App\Repository\SectionRepository;
use App\ResidentialComplex;
use App\Services\PlanningService;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

class PlanningsController extends Controller
{
    use ValidationTrait;

    /**
     * @var PlanningRepository
     */
    public $planningRepository;

    /**
     * @var SectionRepository
     */
    public $sectionRepository;

    /**
     * @var PlanningService
     */
    public $planningService;

    public function __construct(
        PlanningRepository $planningRepository,
        SectionRepository $sectionRepository,
        PlanningService $planningService
    ) {
        $this->planningRepository = $planningRepository;
        $this->sectionRepository = $sectionRepository;
        $this->planningService = $planningService;
    }

    public function filter(Request $request, $slug)
    {
        if (!$rc = ResidentialComplex::query()->where('code', $slug)->first()) {
            return $this->getErrorResponse('residential complex was not found');
        };

        $parameters = [
            'rc_slug' => $slug
        ];

        $sections = $this->sectionRepository->showFilterParams($parameters);
        $planning = $this->planningRepository->showFilterParams($parameters);

        return ['data' => new PlanningFilterParameters($sections, ['filter' => $planning]), 'count' => 0];
    }

    public function index(PlanningFilterRequest $request, $slug)
    {
       //$roomTypes = $request->input('room_types');

//        if (isset($roomTypes)) {
//            $room = $this->planningService->room($roomTypes);
//            $roomType = $this->planningService->roomType($roomTypes);
//        }

        $parameters['room'] = $request->input('room_counts');
        $parameters['room_types'] = $request->input('room_types');
        $parameters['section_ids'] = $request->input('section_ids');
        $parameters['rc_slug'] = $slug;
        $parameters['planning_page'] = $request->input('page');
        $parameters['floors'] = $request->input('floors');
        $parameters['space'] = [
            'min' =>  $request->input('min_space'),
            'max' => $request->input('max_space')
        ];

        $planning = $this->planningRepository->filter($parameters);

        return new PlanningCollection($planning);
    }

    public function show($id)
    {
        $planning = Planning::findOrFail($id);
        $residentialComplex = $planning->section && $planning->section->residental_complex ?
            $planning->section->residental_complex : null;

        return new PlanningResource($planning, ['residential_complex' => $residentialComplex]);
    }
}
