# © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

import requests
import logging

from odoo import api, models, tools

_logger = logging.getLogger(__name__)


class GeoCoder(models.AbstractModel):
    _inherit = "base.geocoder"

    def _geo_query_address_adressedatagouv(self, street=None, zip=None, city=None, state=None, country=None):
        address = ("%s %s %s %s" % (street or '', zip or '', city or '', 'France')).strip()
        addr = address.replace(' ', '+')
        if zip:
            addr += '&postcode=%s' % zip
        return addr

    def _call_adressedatagouv(self, addr, **kw):
        """
        Use French Address API Data Gouv service to retrieve location
        :return: (latitude, longitude) or None if not found
        """
        if not addr:
            _logger.info('invalid address given')
            return None

        url = 'https://api-adresse.data.gouv.fr/search/?q='

        try:
            response = requests.get(url + addr)
            _logger.info('Address API Gouv service called')
            if response.status_code != 200:
                _logger.error('Request to Address API Gouv failed.\nCode: %s\nContent: %s'
                              % (response.status_code, response.content))
            result = response.json()
        except Exception as e:
            self._raise_query_error(e)

        if result.get('features', False):
            geo = result.get('features')[0].get('geometry').get('coordinates')
        return float(geo[1]), float(geo[0])