<?php
/**
 * @copyright (c) Kufer Software GmbH, Oderstraße 7, D-84453 Mühldorf
 */

namespace Kufer\Web\KuferTools\Utils\FilterSearch\Method;

use Kufer\Web\Classes\Dbfilter\ISQLFilter;

class EqualsNaturalMethod extends SQLSearchFilterMethod
{
  
  public function __construct($fnApply)
  {
    if (is_string($fnApply)) {
      parent::__construct(static function(ISQLFilter $filter, $value) use ($fnApply): ISQLFilter {
        return \call_user_func(array($filter, 'equals' . $fnApply), (int)$value);
      });
    } else {
      parent::__construct($fnApply);
    }
  }

  public function apply($filter, $value): ISQLFilter
  {
    if (\trim($value) === '') { 
      return $filter;
    }

    if (!\CleanOperations::isNatural($value)) {
      return $filter;
    }

    return parent::apply($filter, $value);
  }

  public function fromRequest($value)
  {
    $value = trim($value);
    if ($value === '') {
      return null;
    }

    if (!\CleanOperations::isNatural($value)) {
      return null;
    }

    return $value;
  }
}