<?php

namespace Modules\Evaluation\Service;

use Helpers\Trad\Trad;
use Helpers\Validator\Validator;
use Modules\Evaluation\Repository\BibliothequeDeQuestions;

class ThemeValidator extends Validator
{
    /**
     * @param array<mixed> $post
     * @return void
     */
    public function validateThemeCreation(string $mode, string $idCamp, array &$post)
    {
        $this->isCode(
            $this->trad->t('Code Thème'),
            $post['ID_THEME'],
            1,
            9/* 10 - 1 character 'B' */
        );

        $repo = new BibliothequeDeQuestions($this->getPdo());
        $duplicate = $repo->getTheme(
            $mode,
            $repo->prefixThemeId($mode, $post['ID_THEME']),
            $idCamp
        );
        $this->isTrue(!empty($duplicate), $this->trad->t('Le code thème existe déjà.'));


        $this->validateTheme($post);
    }
    /**
     * @param array<mixed> $post
     * @return void
     */
    public function validateTheme(array &$post)
    {

        $this->size($post['LIB_THEME'], $this->trad->t('Libellé Thème'), 1, 60);
        $this->size($post['POIDS'], $this->trad->t('Poids'), 1, 7);

        if (isset($post['POIDS']) && $post['POIDS'] != '' && !is_numeric($post['POIDS'])) {
            $this->setError($this->trad->t('Le poids n\'est pas correct.'));
        }

        // TODO : each PROFNOTEUR1 should be validated depending on PROFNOTEUR0
        
        if (!empty($post['PROFNOTEUR0'])) {
            if (in_array($post['PROFNOTEUR0'], ['G', 'N'])) {
                $post['PROFNOTEUR1'] = $post['PROFNOTEUR0'];
            }
             
            if ($post['PROFNOTEUR0'] == 'N') {
                $this->zoom(
                    'Hastutil',
                    $post['PROFNOTEUR2'],
                    $this->trad->t('Evaluateur'),
                    $this->pdo
                );
            } elseif ($post['PROFNOTEUR1'] != 'C') {
                // si PROFNOTEUR1 est renseigné et différent des valeurs sans CS, PROFNOTEUR2 est obligatoire
                if (! in_array($post['PROFNOTEUR1'], ['M', 'A', 'L', 'D'])
                    && empty($post['PROFNOTEUR2'])
                ) {
                    $this->setError(Trad::strBuild(
                        $this->trad->t('Veuillez sélectionner @1@.'),
                        $post['PROFNOTEUR1'] == 'G'
                            ? $this->trad->t('un groupe d\'évaluateurs')
                            : $this->trad->t('un évaluateur')
                    ));
                }
            }
        }
    }
}
