<?php

namespace App\Models\Hodnotenie;

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

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

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

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

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

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

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

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