<?php

namespace App\Services;

use App\Models\BuildingType;
use App\Models\Cpv;
use App\Models\Department;
use App\Models\ProcedureType;

class FiltersService
{
    public function getProcedureTypes()
    {
        $procedureTypes = ProcedureType::full()->isActive()->get();

        return $procedureTypes;
    }

    public function getDepartments()
    {
        $departments = Department::full()->orderBy('position')->get();

        $structuredDepartments = $this->_buildTree($departments);

        return $structuredDepartments;
    }

    public function getCpvCodes(string $searchString, int $perPage = 20)
    {
        $cpvCodes = Cpv::full()
            ->where('code', 'like', "$searchString%")
            ->orWhereHas('languages', function ($query) use ($searchString) {
                $query->where('title', 'like', "%$searchString%");
            })
            ->paginate($perPage);

        return $cpvCodes;
    }

    public function getBuildingTypes()
    {
        $buildingTypes = BuildingType::full()->orderBy('position')->get();

        $structuredBuildingTypes = $this->_buildTree($buildingTypes);

        return $structuredBuildingTypes;
    }

    private function _buildTree($items, $parentId = null) {
        return $items->where('parent_id', $parentId)->map(function ($item) use ($items) {
            $item->children = $this->_buildTree($items, $item->website_object_id);
            return $item;
        });
    }
}
