<?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">

    <parameters>
        <parameter key="bazinga_geocoder.geocoder.class">Geocoder\ProviderAggregator</parameter>
        <parameter key="bazinga_geocoder.geocoder.loggable_class">Bazinga\Bundle\GeocoderBundle\Geocoder\LoggableGeocoder</parameter>
        <parameter key="bazinga_geocoder.geocoder.default_adapter.class">Ivory\HttpAdapter\CurlHttpAdapter</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.bing_maps.class">Geocoder\Provider\BingMaps</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.free_geo_ip.class">Geocoder\Provider\FreeGeoIp</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.google_maps.class">Geocoder\Provider\GoogleMaps</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.arcgis_online.class">Geocoder\Provider\ArcGISOnline</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.google_maps_business.class">Geocoder\Provider\GoogleMapsBusiness</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.host_ip.class">Geocoder\Provider\HostIp</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.ip_info_db.class">Geocoder\Provider\IpInfoDb</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.yahoo.class">Geocoder\Provider\Yahoo</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.openstreetmap.class">Geocoder\Provider\OpenStreetMap</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.geoip.class">Geocoder\Provider\Geoip</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.mapquest.class">Geocoder\Provider\MapQuest</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.yandex.class">Geocoder\Provider\Yandex</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.geo_ips.class">Geocoder\Provider\GeoIPs</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.geo_plugin.class">Geocoder\Provider\GeoPlugin</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.maxmind.class">Geocoder\Provider\MaxMind</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.maxmind_binary.class">Geocoder\Provider\MaxMindBinary</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.opencage.class">Geocoder\Provider\OpenCage</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.cache.class">Bazinga\Bundle\GeocoderBundle\Provider\Cache</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.chain.class">Geocoder\Provider\Chain</parameter>
        <parameter key="bazinga_geocoder.geocoder.provider.tom_tom.class">Geocoder\Provider\TomTom</parameter>


        <parameter key="bazinga_geocoder.logger.class">Bazinga\Bundle\GeocoderBundle\Logger\GeocoderLogger</parameter>

        <parameter key="bazinga_geocoder.data_collector.class">Bazinga\Bundle\GeocoderBundle\DataCollector\GeocoderDataCollector</parameter>

        <parameter key="bazinga_geocoder.event_listener.fake_request.class">Bazinga\Bundle\GeocoderBundle\EventListener\FakeRequestListener</parameter>

        <parameter key="bazinga_geocoder.dumper_manager.class">Bazinga\Bundle\GeocoderBundle\DumperManager</parameter>
        <parameter key="bazinga_geocoder.dumper.geojson.class">Geocoder\Dumper\GeoJson</parameter>
        <parameter key="bazinga_geocoder.dumper.gpx.class">Geocoder\Dumper\Gpx</parameter>
        <parameter key="bazinga_geocoder.dumper.kmp.class">Geocoder\Dumper\Kml</parameter>
        <parameter key="bazinga_geocoder.dumper.wkb.class">Geocoder\Dumper\Wkb</parameter>
        <parameter key="bazinga_geocoder.dumper.wkt.class">Geocoder\Dumper\Wkt</parameter>
    </parameters>

    <services>
        <service id="geocoder" alias="bazinga_geocoder.geocoder" />
        <service id="bazinga_geocoder.geocoder" class="%bazinga_geocoder.geocoder.class%" />

        <!-- Adapters -->
        <service id="bazinga_geocoder.geocoder.default_adapter" class="%bazinga_geocoder.geocoder.default_adapter.class%" public="false" />

        <!-- Dumpers -->
        <service id="bazinga_geocoder.dumper_manager" class="%bazinga_geocoder.dumper_manager.class%">
            <argument type="collection" /><!-- Placeholder -->
        </service>
        <service id="bazinga_geocoder.dumper.geojson" class="%bazinga_geocoder.dumper.geojson.class%">
            <tag name="bazinga_geocoder.dumper" alias="geojson" />
        </service>
        <service id="bazinga_geocoder.dumper.gpx" class="%bazinga_geocoder.dumper.gpx.class%">
            <tag name="bazinga_geocoder.dumper" alias="gpx" />
        </service>
        <service id="bazinga_geocoder.dumper.kmp" class="%bazinga_geocoder.dumper.kmp.class%">
            <tag name="bazinga_geocoder.dumper" alias="kmp" />
        </service>
        <service id="bazinga_geocoder.dumper.wkb" class="%bazinga_geocoder.dumper.wkb.class%">
            <tag name="bazinga_geocoder.dumper" alias="wkb" />
        </service>
        <service id="bazinga_geocoder.dumper.wkt" class="%bazinga_geocoder.dumper.wkt.class%">
            <tag name="bazinga_geocoder.dumper" alias="wkt" />
        </service>

         <!-- Logger -->
        <service id="bazinga_geocoder.logger" class="%bazinga_geocoder.logger.class%">
            <tag name="monolog.logger" channel="bazinga_geocoder" />
            <argument type="service" id="logger" on-invalid="null" />
        </service>

        <!-- Data collector -->
        <service id="bazinga_geocoder.data_collector" class="%bazinga_geocoder.data_collector.class%" public="false">
            <tag name="data_collector" template="BazingaGeocoderBundle:Collector:geocoder" id="geocoder" />
            <argument type="service" id="bazinga_geocoder.logger" />
        </service>

        <!-- Listener -->
        <service id="bazinga_geocoder.event_listener.fake_request" class="%bazinga_geocoder.event_listener.fake_request.class%">
            <argument></argument>
            <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" />
        </service>
    </services>
</container>
