<?php

namespace App\Repositories;

use App\Models\Hodnotenie\HodnotenieEnum;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User;
use Prettus\Repository\Contracts\RepositoryInterface;

/**
 * Class HodnotenieRepositoryContract
 *
 * @package App\Repositories
 */
interface HodnotenieRepositoryContract extends RepositoryInterface
{
    /**
     * @param \Illuminate\Database\Eloquent\Model $hodnotenyZaznam
     *
     * @return self
     */
    public function filterHodnoteniHodnotenehoZaznamu(Model $hodnotenyZaznam): self;

    /**
     * @param User           $pouzivatel
     * @param Model          $hodnotenyZaznam
     * @param HodnotenieEnum $hodnotenie
     *
     * @return void
     */
    public function ohodnot(User $pouzivatel, Model $hodnotenyZaznam, HodnotenieEnum $hodnotenie): void;

    /**
     * @param Model          $hodnotenyZaznam
     * @param HodnotenieEnum $hodnotenie
     *
     * @return int
     */
    public function pocetHodnoteniPodlaDruhu(Model $hodnotenyZaznam, HodnotenieEnum $hodnotenie): int;

    /**
     * @param Model $hodnotenyZaznam
     *
     * @return int
     */
    public function pocetVsetkychHodnoteni(Model $hodnotenyZaznam): int;

    /**
     * @param User  $pouzivatel
     * @param Model $hodnotenyZaznam
     *
     * @return HodnotenieEnum|null
     */
    public function hodnoteniePouzivatela(User $pouzivatel, Model $hodnotenyZaznam): ?HodnotenieEnum;
}
