# SPDX-License-Identifier: GPL-3.0-or-later
#
# This file is part of Nominatim. (https://nominatim.org)
#
# Copyright (C) 2025 by the Nominatim developer community.
# For a full list of authors see the git log.
"""
Provides dummy implementations of ASGIAdaptor for testing.
"""
from collections import namedtuple

import nominatim_api.v1.server_glue as glue
from nominatim_api.v1.format import dispatch as formatting
from nominatim_api.config import Configuration


class FakeError(BaseException):

    def __init__(self, msg, status):
        self.msg = msg
        self.status = status

    def __str__(self):
        return f'{self.status} -- {self.msg}'


FakeResponse = namedtuple('FakeResponse', ['status', 'output', 'content_type'])


class FakeAdaptor(glue.ASGIAdaptor):

    def __init__(self, params=None, headers=None, config=None):
        self.params = params or {}
        self.headers = headers or {}
        self._config = config or Configuration(None)

    def get(self, name, default=None):
        return self.params.get(name, default)

    def get_header(self, name, default=None):
        return self.headers.get(name, default)

    def error(self, msg, status=400):
        return FakeError(msg, status)

    def create_response(self, status, output, num_results):
        return FakeResponse(status, output, self.content_type)

    def base_uri(self):
        return 'http://test'

    def config(self):
        return self._config

    def formatting(self):
        return formatting
