<?php declare(strict_types=1);

namespace App\View\Components\Private\Forms;

use App\Enums\Permission;
use App\Models\Role;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use Illuminate\View\View;

final class PermissionsForRole extends Form
{
    public function __construct(
        private readonly string $title,
        private readonly string $name,
        private readonly Role $role,
        private readonly array $value
    ) { }

    protected function getName(): string
    {
        return $this->name;
    }

    /**
     * @return string
     */
    private function getTitle(): string
    {
        return Str::ucfirst($this->title);
    }

    /**
     * @return array
     */
    private function getValue(): Collection
    {
        $value = old($this->getRequestName(), $this->value);
        return collect($value);
    }

    /**
     * @return Role
     */
    private function getRole(): Role
    {
        return $this->role;
    }

    public function render(): View
    {
        return view('private.components.forms.permissions_for_role', [
            'title' => $this->getTitle(),
            'name' => $this->getName(),
            'requestName' => $this->getRequestName(),
            'permissions' => Permission::cases(),
            'role' => $this->getRole(),
            'value' => $this->getValue(),
        ]);
    }

}
