"""La página ausente y su diagnóstico de desarrollo."""

import json

from django.http import JsonResponse
from django.test import RequestFactory, override_settings

from apps.core.not_found import debug_not_found_middleware, page


def inertia_request(path='/missing'):
    """Un pedido de pantalla sin depender de que Vite esté encendido."""
    request = RequestFactory().get(path, HTTP_X_INERTIA='true')
    request.session = {}
    return request


@override_settings(DEBUG=True)
def test_debug_html_is_kept_behind_the_not_found_page():
    original = '<!doctype html><title>Page not found at /missing</title><p>routes tried</p>'
    middleware = debug_not_found_middleware(
        lambda request: JsonResponse({}, status=404)
    )

    # Una respuesta de API nunca se convierte en pantalla.
    assert middleware(inertia_request()).headers['Content-Type'].startswith('application/json')

    from django.http import HttpResponse

    middleware = debug_not_found_middleware(
        lambda request: HttpResponse(original, status=404, content_type='text/html')
    )
    response = middleware(inertia_request())
    payload = json.loads(response.content)

    assert response.status_code == 404
    assert payload['component'] == 'NotFound'
    assert payload['props']['debug_document'] == original


@override_settings(DEBUG=True)
def test_a_missing_url_uses_the_clean_page_and_keeps_djangos_report(client):
    response = client.get('/definitely-missing', HTTP_X_INERTIA='true')
    payload = json.loads(response.content)

    assert response.status_code == 404
    assert payload['component'] == 'NotFound'
    assert 'Page not found' in payload['props']['debug_document']
    assert 'definitely-missing' in payload['props']['debug_document']


@override_settings(DEBUG=False)
def test_production_not_found_never_sends_debug_details():
    response = page(inertia_request(), debug_document='<p>internal routes</p>')
    payload = json.loads(response.content)

    assert response.status_code == 404
    assert payload['component'] == 'NotFound'
    assert payload['props']['debug_document'] is None
