<?php

namespace App\Http\Controllers\Api;

use App\Developer;
use App\Helpers\CacheTimeHelper;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\ValidationTrait;
use App\Http\Requests\Api\DeveloperFilterRequest;
use App\Http\Requests\Api\DeveloperResidentialComplexFilterRequest;
use App\Http\Resources\Developer as DeveloperResource;
use App\Http\Resources\DeveloperCollection;
use App\Http\Resources\ResidentialComplexCollection;
use App\Repository\DeveloperRepository;
use App\Repository\ResidentialComplexRepository;
use Illuminate\Support\Facades\Cache;

class DeveloperController extends Controller
{
    use ValidationTrait;

    /**
     * @var DeveloperRepository
     */
    public $developerRepository;

    /**
     * @var ResidentialComplexRepository
     */
    public $residentialComplexesRepository;

    public function __construct(
        DeveloperRepository $developerRepository,
        ResidentialComplexRepository $residentialComplexRepository
    ) {
        $this->developerRepository = $developerRepository;
        $this->residentialComplexesRepository = $residentialComplexRepository;
    }

    public function index(DeveloperFilterRequest $request)
    {
        $code = $request->input('code') ? $request->input('code') : 'code';
        $page = $request->input('page');
        $parameters = [
            'page' => $page,
            'code' => $code,
        ];
        if (!$developers = $this->developerRepository->find($parameters)) {
            return $this->getErrorResponse('developers was not found');
        };

        return [
            'data' => new DeveloperCollection($developers, ['statistic' => true, 'residential_complex' => true]),
            'count' => Developer::query()->where('developers.enabled', 1)->count()
        ];
    }

    public function show($slug)
    {
        if (!$developer = $this->developerRepository->find(['developer_slug' => $slug])->first()) {
            return $this->getErrorResponse('developer was not found');
        };

        return ['data' => new DeveloperResource($developer, [
            'statistic' => true,
            'residential_complexes_location' => true
        ])];
    }

    public function developerResidentialComplexes(DeveloperResidentialComplexFilterRequest $request, $slug)
    {
        $code = $request->input('code');
        $key = Developer::class . "_" . $code;
        $parameters = [
            'developer_slug' => $slug,
            'developer_code' => $code,
            'developer_page' => $request->input('page')
        ];

        $count = $this->residentialComplexesRepository->countResultForDeveloper($parameters)->first()['rc_count'];
        $residentialComplexes = $this->residentialComplexesRepository->listResidentialComplex($parameters);

        return [
            'data' => new ResidentialComplexCollection($residentialComplexes, [
                'show_first_image' => true,
                'collection' => true,
                'location' => true
            ]),
            'count' => $count
        ];
    }
}
