<?php

namespace App\Form\Editor;

use App\Form\Models\Participant;
use App\Lib\Editor\Condition;
use App\Lib\Editor\ConditionResolver;

class FormConditionResolver extends ConditionResolver
{

    private Participant $participant;

    public function forParticipant(Participant $participant): self
    {
        $this->participant = $participant;

        return $this;
    }

    /**
     * @inheritdoc
     */
    public function filterCondition(Condition $condition): bool
    {
        if (!$condition->hasStatements()) {
            return true;
        }

        foreach ($condition->ifs as $if) {
            $field = $this->participant->getFields()->findByKey($if->field);
            $matches = $field->matches($if->comparator, $if->value);
            if ($matches && $condition->isAny()) {
                return true;
            }
            if (!$matches && $condition->isAll()) {
                return false;
            }
        }

        if ($condition->isAny()) {
            return false;
        }

        return true;
    }
}