<?php

namespace Signteer\Core\Criteria;

class CriteriaHelper
{
    public static function isMatching($v, string $compare, $to): bool
    {
        $ret = null;

        if ('=' === $compare) {
            if (is_array($to)) {
                if (is_array($v)) {
                    $ret = array_intersect($v, $to) ? true : false;
                } else {
                    $ret = in_array($v, $to);
                }
            } else {
                if (is_array($v)) {
                    $ret = in_array($to, $v);
                } else {
                    $ret = ($v == $to) ? true : false;
                }
            }
        }

        if ('<>' === $compare) {
            if (is_array($to)) {
                $ret = !in_array($v, $to);
            } else {
                $ret = ($v != $to) ? true : false;
            }
        }

        if ('>' === $compare) {
            $ret = ($v > $to) ? true : false;
        }

        if ('&' === $compare) {
            $ret = ($v & $to) ? true : false;
        }

        if ('>=' === $compare) {
            $ret = ($v >= $to) ? true : false;
        }

        if ('<' === $compare) {
            $ret = ($v < $to) ? true : false;
        }

        if ('<=' === $compare) {
            $ret = ($v <= $to) ? true : false;
        }

        if ('LIKE' === $compare) {
            if (is_array($to)) {
                if (is_array($v)) {
                    $ret = array_intersect($v, $to) ? true : false;
                } else {
                    $ret = in_array($v, $to) ? true : false;
                }
            } else {
                $ret = (false === strpos($v, $to)) ? false : true;
            }
        }

        if (null === $ret) {
            exit(__METHOD__ . ': unknown compare');
        }

        return $ret;
    }
}
