"""Teste P1-5 (hardening 2026-07-03): plafon global corp cerere (BodyCapMiddleware)."""

from __future__ import annotations

import io
import json
import os
import tempfile

import pytest
from fastapi.testclient import TestClient


@pytest.fixture()
def client(monkeypatch):
    tmp = tempfile.mkdtemp()
    monkeypatch.setenv("AUTOPASS_DB_PATH", os.path.join(tmp, "bc.db"))
    monkeypatch.setenv("AUTOPASS_LOG_DIR", os.path.join(tmp, "logs"))
    # Prag mic ca sa nu generam MB-uri reale in test.
    monkeypatch.setenv("AUTOPASS_MAX_REQUEST_BYTES", "1000")
    from app.config import get_settings
    get_settings.cache_clear()
    from app.main import app
    with TestClient(app) as c:
        yield c
    get_settings.cache_clear()


def test_multipart_peste_limita_413(client):
    data = b"x" * 5000
    r = client.post(
        "/v1/import",
        files={"file": ("mare.csv", io.BytesIO(data), "text/csv")},
    )
    assert r.status_code == 413
    assert r.json()["cod"] == "CERERE_PREA_MARE"


def test_json_peste_limita_413(client):
    payload = {"blob": "x" * 5000}
    r = client.post(
        "/v1/prezentari",
        content=json.dumps(payload),
        headers={"content-type": "application/json"},
    )
    assert r.status_code == 413
    assert r.json()["cod"] == "CERERE_PREA_MARE"


def test_cerere_normala_sub_limita_trece(client):
    r = client.get("/healthz")
    assert r.status_code == 200


def test_content_length_mare_body_mic_413_devreme(client):
    """Content-Length declarat peste limita respinge inainte sa citeasca body-ul,
    chiar daca body-ul trimis efectiv e mic (client "mincinos")."""
    r = client.post(
        "/v1/prezentari",
        content=b"{}",
        headers={"content-type": "application/json", "content-length": "999999"},
    )
    assert r.status_code == 413
    assert r.json()["cod"] == "CERERE_PREA_MARE"
