<?php

namespace App\Utilities;

use Illuminate\Support\Str;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\Validator;

class PolyFinder
{
    public static function pageable($id, $type)
    {
        if (Str::contains($type, 'App\\Models\\')) {
            $class_name = $type;
        } else {
            $class_name = 'App\\Models\\'.Str::studly($type);
        }

        $input = [
            'type' => $type,
            'id' => $id,
        ];

        Validator::make($input, [
            'id' => ['required', function ($attribute, $value, $fail) use ($input, $class_name) {
                $id_check = resolve($class_name)->find($value);
                if (!$id_check) {
                    $fail('No related object found when saving the content element');
                }
            }],
            'type' => ['required', function ($attribute, $value, $fail) use ($input, $class_name) {
                $class = resolve($class_name);
                if (!$class) {
                    $fail('No related class found when saving the content element');
                }
            }],
        ])->validate();

        return (new $class_name())->findOrFail($id);
    }
}
