<?php

namespace Traits\Validator;

use Helpers\QueryBuilder\QueryBuilder;
use Helpers\Trad\Trad;
use Helpers\Trad\ITrad;

    // phpcs:ignore
trait ValidatorEntity
{
    abstract public function getTrad() :ITrad;
    abstract public function setError($message) :bool;

    /**
     * @param mixed $value
     * @param array<mixed> $filter
     */
    public function entityAlreadyExist(
        string $message,
        QueryBuilder $qb,
        $value,
        array $filter = []
    ) :bool {
        if (! empty($qb->find($value, [], $filter))) {
            return $this->setError($message);
        }
        return true;
    }
    
    /**
     * Permet d'ajouter une erreur manuellement
     * @todo move somewhere else
     * @param mixed $valeur
     * @param string $message
     */
    public function isTrue($valeur, $message) :bool
    {

        if (!$valeur) {
            return true;
        }
        
        
        $this->validate += 1;
        $this->error .= '<br />'.$message;
        return false;
    }

    /**
     * @todo move somewhere else
     * @param mixed $valeur
     * @param string $message
     * @param bool $obligatoire
     */
    public function isFalse($valeur, $message = '', $obligatoire = false) :bool
    {
        if ($valeur) {
            return true;
        }
            
        $this->validate += 1;
        $this->error .= '<br />'.$message;
        return false;
    }
}
