<?php
namespace Magento\SalesRule\Model\RulesApplier;

/**
 * Interceptor class for @see \Magento\SalesRule\Model\RulesApplier
 */
class Interceptor extends \Magento\SalesRule\Model\RulesApplier implements \Magento\Framework\Interception\InterceptorInterface
{
    use \Magento\Framework\Interception\Interceptor;

    public function __construct(\Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory $calculatorFactory, \Magento\Framework\Event\ManagerInterface $eventManager, \Magento\SalesRule\Model\Utility $utility, ?\Magento\SalesRule\Model\Quote\ChildrenValidationLocator $childrenValidationLocator = null, ?\Magento\SalesRule\Model\Rule\Action\Discount\DataFactory $discountDataFactory = null, ?\Magento\SalesRule\Api\Data\RuleDiscountInterfaceFactory $discountInterfaceFactory = null, ?\Magento\SalesRule\Api\Data\DiscountDataInterfaceFactory $discountDataInterfaceFactory = null, ?\Magento\SalesRule\Model\SelectRuleCoupon $selectRuleCoupon = null, ?\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency = null)
    {
        $this->___init();
        parent::__construct($calculatorFactory, $eventManager, $utility, $childrenValidationLocator, $discountDataFactory, $discountInterfaceFactory, $discountDataInterfaceFactory, $selectRuleCoupon, $priceCurrency);
    }

    /**
     * {@inheritdoc}
     */
    public function applyRules($item, $rules, $skipValidation, array $couponCodes = [])
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'applyRules');
        return $pluginInfo ? $this->___callPlugins('applyRules', func_get_args(), $pluginInfo) : parent::applyRules($item, $rules, $skipValidation, $couponCodes);
    }

    /**
     * {@inheritdoc}
     */
    public function addDiscountDescription($address, $rule, array $couponCodes = [])
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'addDiscountDescription');
        return $pluginInfo ? $this->___callPlugins('addDiscountDescription', func_get_args(), $pluginInfo) : parent::addDiscountDescription($address, $rule, $couponCodes);
    }

    /**
     * {@inheritdoc}
     */
    public function addShippingDiscountDescription(\Magento\Quote\Model\Quote\Address $address, \Magento\SalesRule\Model\Rule $rule, array $discount, array $couponCodes): void
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'addShippingDiscountDescription');
        $pluginInfo ? $this->___callPlugins('addShippingDiscountDescription', func_get_args(), $pluginInfo) : parent::addShippingDiscountDescription($address, $rule, $discount, $couponCodes);
    }

    /**
     * {@inheritdoc}
     */
    public function resetDiscountAggregator()
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'resetDiscountAggregator');
        return $pluginInfo ? $this->___callPlugins('resetDiscountAggregator', func_get_args(), $pluginInfo) : parent::resetDiscountAggregator();
    }

    /**
     * {@inheritdoc}
     */
    public function maintainAddressCouponCode($address, $rule, $couponCode)
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'maintainAddressCouponCode');
        return $pluginInfo ? $this->___callPlugins('maintainAddressCouponCode', func_get_args(), $pluginInfo) : parent::maintainAddressCouponCode($address, $rule, $couponCode);
    }

    /**
     * {@inheritdoc}
     */
    public function setAppliedRuleIds(\Magento\Quote\Model\Quote\Item\AbstractItem $item, array $appliedRuleIds)
    {
        $pluginInfo = $this->pluginList->getNext($this->subjectType, 'setAppliedRuleIds');
        return $pluginInfo ? $this->___callPlugins('setAppliedRuleIds', func_get_args(), $pluginInfo) : parent::setAppliedRuleIds($item, $appliedRuleIds);
    }
}
