<?php

namespace Yajny\Member\FraudDetection\Factors;

use Yajny\Member\FraudDetection\Utils\FraudDetectionPeriodsUtil;
use Yajny\Member\Models\FraudRule;

class OrderCountFactor implements FraudDetectionFactorInterface
{
    /** @var FraudRule $fraudRule */
    private $fraudRule;

    public function __construct(FraudRule $fraudRule)
    {
        $this->fraudRule = $fraudRule;
    }

    public function shouldApply(): bool
    {
        return $this->fraudRule->order_count && $this->fraudRule->order_count_per;
    }

    public function getFraudUserWhoMatchFactor($from, $to): array
    {
        return $this->fraudRule->getFraudUsersThatExceedsOrderCount($from, $to);
    }

    public function getFromDate($from): string
    {
        return FraudDetectionPeriodsUtil::getFromDateOfPeriod($from, $this->fraudRule->order_count_per);
    }

    public function getToDate($to): string
    {
        return FraudDetectionPeriodsUtil::getToDateOfPeriod($to, $this->fraudRule->order_count_per);
    }
}