<?php

namespace App\Models\Hodnotenie;

use Illuminate\Database\Eloquent\Relations\MorphMany;
use Illuminate\Foundation\Auth\User;

/**
 * Trait HodnotenieTrait
 */
trait HodnotenieTrait
{
    /**
     * @return int
     */
    public function getPocetVsetkychHodnoteniAttribute(): int
    {
        return $this->pocetHodnoteni();
    }

    /**
     * @return int
     */
    public function pocetHodnoteni(): int
    {
        return $this->hodnotenia()->count();
    }

    /**
     * @return MorphMany
     */
    public function hodnotenia(): MorphMany
    {
        return $this->morphMany(HodnotenieModel::class, 'hodnotitelne');
    }

    /**
     * @return int
     */
    public function getPocetKladnychHodnoteniAttribute(): int
    {
        return $this->pocetHodnoteniPodlaDruhu(HodnotenieEnum::kladne());
    }

    /**
     * @param HodnotenieEnum $druhHodnotenia
     * @return int|null
     */
    public function pocetHodnoteniPodlaDruhu(HodnotenieEnum $druhHodnotenia): ?int
    {
        return $this->hodnotenia()->where('hodnotenie', $druhHodnotenia->value)->count();
    }

    /**
     * @return int
     */
    public function getPocetZapornychHodnoteniAttribute(): int
    {
        return $this->pocetHodnoteniPodlaDruhu(HodnotenieEnum::zaporne());
    }

    /**
     * @param User $pouzivatel
     * @return HodnotenieEnum|null
     */
    public function hodnoteniePouzivatela(User $pouzivatel): ?HodnotenieEnum
    {
        return $this->hodnotenia()->whereHodnotilId($pouzivatel->id)->first()->hodnotenie ?? null;
    }
}
