<?php

namespace ApiQL\Language\Specs;

use Doctrine\DBAL\Query\QueryBuilder;
use ApiQL\Language\JsonField;

/**
* Class Equals
*
* @package ApiQL\Language\Specs
*/
class Equals extends AbstractSpec
{
    use JsonField;

    private $parameter;
    private $value;
    
    /**
     * @param string $parameter - query parameter
     * @param mixed $value - parameter value
     */
    public function __construct(string $parameter, $value)
    {
        $this->parameter = $parameter;
        $this->value = $value;
    }

    /**
     * @param QueryBuilder $queryBuilder - query builder
     *
     * @return string
     */
    public function match(QueryBuilder $queryBuilder): string
    {
        $fieldName = $this->getJsonFieldName($this->parameter, $this->value);
        $fieldValue = $this->getJsonFieldValue($this->parameter, $this->value);
        $queryBuilder->setParameter($fieldName, $this->getJsonPropertyValue($this->value));
        return $queryBuilder->expr()->eq($fieldValue, sprintf(":%s", $fieldName));
    }
}