<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
    <imports>
        <import resource="ban_config.xml"/>
    </imports>

    <parameters>
        <parameter key="evp_ticket_maintenance.reservation" type="collection">
            <parameter key="expire_interval_in_minutes">*</parameter>
            <parameter key="command_to_execute">php %kernel.root_dir%/console orders:mark-expired</parameter>
        </parameter>
    </parameters>

    <services>
        <service id="evp_ticket_maintenance.cron_tab"
                 class="Crontab\Crontab"/>

        <service id="evp_ticket_maintenance.cron_tab.job"
                 factory-method="createJob"
                 factory-service="evp_ticket_maintenance.cron_job_builder"
                 class="Crontab\Job"/>

        <service id="evp_ticket_maintenance.cron_job_builder" class="Evp\Bundle\TicketMaintenanceBundle\Services\CronJobFactory">
            <argument>%evp_ticket_maintenance.reservation%</argument>
        </service>

        <service id="evp.twig.is_numeric_extension" class="Evp\Bundle\TicketMaintenanceBundle\Twig\IsNumericExtension">
            <tag name="twig.extension"/>
        </service>

        <service id="evp_ticket_maintenance.fake_cron" class="Evp\Bundle\TicketMaintenanceBundle\Services\FakeCron">
            <call method="setRootDir">
                <argument>%kernel.root_dir%</argument>
            </call>
            <call method="setCommand">
                <argument type="service" id="evp_ticket_maintenance.command.mark_expired_orders"/>
            </call>
        </service>

        <service id="evp_ticket_maintenance.command.mark_expired_orders" class="Evp\Bundle\TicketMaintenanceBundle\Command\MarkExpiredOrdersCommand">
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="evp_ticket_maintenance.service.unique_token_annotation_reader"
                class="Evp\Bundle\TicketMaintenanceBundle\Services\UniqueTokenAnnotationReader">
            <argument type="service" id="annotation_reader"/>
        </service>
        <service id="evp_ticket_maintenance.service.unique_token_generator"
                class="Evp\Bundle\TicketMaintenanceBundle\Services\UniqueTokenGenerator">
        </service>

        <service
                id="evp_ticket_maintenance.command.clear_cache"
                class="Symfony\Bundle\FrameworkBundle\Command\CacheClearCommand">
            <call method="setContainer">
                <argument type="service" id="service_container"/>
            </call>
        </service>

        <service id="evp_ticket_maintenance.service.system_environment" class="Evp\Bundle\TicketMaintenanceBundle\Services\SystemEnvironment">
            <call method="setRootDir">
                <argument>%kernel.root_dir%</argument>
            </call>
            <call method="setCacheClearer">
                <argument type="service" id="evp_ticket_maintenance.command.clear_cache"/>
            </call>
            <call method="setParameters">
                <argument type="collection">
                    <argument key="cache_dir">%kernel.cache_dir%</argument>
                </argument>
            </call>
        </service>

        <service
                id="evp_ticket_maintenance.service.current_user_provider"
                class="Evp\Bundle\TicketMaintenanceBundle\Services\CurrentUserProvider"/>

        <service
                id="evp_ticket_maintenance.listener.ban_manager"
                class="Evp\Bundle\TicketMaintenanceBundle\Listener\BanManager">
            <argument type="service" id="router"/>
            <argument type="service" id="logger"/>
            <argument type="service" id="evp_ticket_maintenance.service.current_user_provider"/>
            <argument>%evp_ticket_maintenance.ban_manager.ips%</argument>
            <argument>%evp_ticket_maintenance.ban_manager.user_agents%</argument>
            <argument>%evp_ticket_maintenance.ban_manager.affected_routes%</argument>
            <tag name="kernel.event_listener" event="kernel.request" method="banByRules"/>
        </service>
    </services>

</container>
