<?php

declare(strict_types=1);

namespace Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Policies;

use Illuminate\Foundation\Auth\User;
use Illuminate\Auth\Access\HandlesAuthorization;
use Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Test;

/**
 * Class TestPolicy
 *
 * @package Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Policies
 */
final class TestPolicy
{
    use HandlesAuthorization;

    /**
     * @param $pouzivatel
     * @param $ability
     *
     * @return bool
     */
    public function before($pouzivatel, $ability)
    {
        // pouzivatel je spravcom
        if ($pouzivatel->can('vzdelavanie_testovanie')) {
            return true;
        }
    }

    /**
     * @param \Illuminate\Foundation\Auth\User                    $pouzivatel
     * @param \Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Test $test
     *
     * @return bool
     */
    public function spustenie(User $pouzivatel, Test $test): bool
    {
        // pouzivatel musi byt majitelom vygenerovaneho testu
        return $pouzivatel->getAuthIdentifier() === $test->pouzivatel_id;
    }

    /**
     * @param \Illuminate\Foundation\Auth\User                    $pouzivatel
     * @param \Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Test $test
     *
     * @return bool
     */
    public function vyhodnotit(User $pouzivatel, Test $test)
    {
        // pouzivatel musi byt majitelom vygenerovaneho testu
        return $pouzivatel->getAuthIdentifier() === $test->pouzivatel_id;
    }

    /**
     * @param \Illuminate\Foundation\Auth\User                    $pouzivatel
     * @param \Seka\Vzdelavanie\Models\Pouzivatel\Testovanie\Test $test
     *
     * @return bool
     */
    public function vyhodnotenie(User $pouzivatel, Test $test)
    {
        // pouzivatel musi byt majitelom vygenerovaneho testu
        return $pouzivatel->getAuthIdentifier() === $test->pouzivatel_id;
    }
}
