<?php

namespace Yajny\Member\FraudDetection\Factors;

use Yajny\Member\Models\FraudRule;

class FraudDetectionFactorsApplier
{
    /** @var FraudDetectionFactorInterface[] $factors */
    private $factors;

    public function __construct(FraudRule $fraudRule)
    {
        $this->factors = [
            new OrderCountFactor($fraudRule),
            new TotalOrderAmountFactor($fraudRule)
        ];
    }

    public function getFraudUserWhoMatchTheRules($from, $to): array
    {
        $fraudUserThatMatchFactors = [];
        foreach ($this->factors as $factor) {
            if ($factor->shouldApply())
                $fraudUserThatMatchFactors = array_merge(
                    $fraudUserThatMatchFactors,
                    $factor->getFraudUserWhoMatchFactor($factor->getFromDate($from), $factor->getToDate($to))
                );
        }
        return array_unique($fraudUserThatMatchFactors);
    }
}