<?php

namespace CouponsPlus\App\Handlers;

use CouponsPlus\App\Conditions\BuiltIn\Filters\OnSale;
use CouponsPlus\App\Conditions\Stubs\Filters\ItemPrice;
use CouponsPlus\App\Conditions\Stubs\Filters\Attributes;
use CouponsPlus\App\Conditions\BuiltIn\Filters\AnyProducts;
use CouponsPlus\App\Conditions\BuiltIn\Filters\CombinedCostOfItems;
use CouponsPlus\App\Conditions\BuiltIn\Filters\FeaturedProducts;
use CouponsPlus\App\Conditions\BuiltIn\Filters\InBrands;
use CouponsPlus\App\Conditions\BuiltIn\Filters\InCategories;
use CouponsPlus\App\Conditions\BuiltIn\Filters\InTags;
use CouponsPlus\App\Conditions\BuiltIn\Filters\NoItems;
use CouponsPlus\App\Conditions\BuiltIn\Filters\NumberOfItems;
use CouponsPlus\App\Conditions\BuiltIn\Filters\Products;
use CouponsPlus\App\Conditions\FiltersRegistrator;
use CouponsPlus\Original\Events\Handler\EventHandler;
use CouponsPlus\App\Conditions\Stubs\Filters\MinimumCombinedCostOfItems;

#[\AllowDynamicProperties]
Class BuiltInFiltersRegistrator extends EventHandler
{
    protected $numberOfArguments = 1;
    protected $priority = 10;

    public function execute(FiltersRegistrator $filtersRegistrator)
    {
        /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *
         *             -----------  IMPLEMENTED -----------
         *
         +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

        /*------------------------------------------------------------
            Special
        *------------------------------------------------------------*/
        /*|*/ $filtersRegistrator->register(AnyProducts::class);
        /*------------------------------------------------------------
            Simple InterSection
        *------------------------------------------------------------*/
        /*|*/ $filtersRegistrator->register(FeaturedProducts::class);
        /*|*/ $filtersRegistrator->register(OnSale::class);
        /*|*/ $filtersRegistrator->register(InCategories::class);
        /*|*/ $filtersRegistrator->register(InTags::class);
	    /*|*/ $filtersRegistrator->register(Products::class);
	    /*|*/ $filtersRegistrator->register(InBrands::class);
        /*------------------------------------------------------------
            SubsetSum
        *------------------------------------------------------------*/
        /*|*/ $filtersRegistrator->register(CombinedCostOfItems::class); // deprecated
        /*|*/ $filtersRegistrator->register(NumberOfItems::class);
        /*------------------------------------------------------------
            Private
        *------------------------------------------------------------*/
        /*|*/ $filtersRegistrator->register(NoItems::class);

        /**++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         * ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *
         *             -----------  NOT IMPLEMENTED -----------
         *
        +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
         *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
        $filtersRegistrator->registerStub(MinimumCombinedCostOfItems::class);
        $filtersRegistrator->registerStub(Attributes::class);
        $filtersRegistrator->registerStub(ItemPrice::class);
    }
}