"""Detect 500 Internal Server Errors — test POST routes with edge-case inputs.

These tests send malformed or empty data to ensure routes handle errors
gracefully (redirect or 400/422) instead of crashing with 500.
"""

import pytest


MALFORMED_POST_CASES = [
    # USERS
    ("POST", "/service/users/create", {}),
    ("POST", "/service/users/create", {"login": "no_password"}),
    ("POST", "/service/users/create", {"password": "no_login"}),
    ("POST", "/service/users/edit", {}),
    ("POST", "/service/users/edit", {"id": ""}),
    ("POST", "/service/users/edit", {"id": "not_a_number"}),
    ("POST", "/service/users/delete", {}),
    ("POST", "/service/users/delete", {"id": ""}),

    # CUSTOMERS
    ("POST", "/service/customers/create", {}),
    ("POST", "/service/customers/create", {"name": "no_inn"}),
    ("POST", "/service/customers/create", {"inn": "bad_inn"}),
    ("POST", "/service/customers/edit", {}),
    ("POST", "/service/customers/delete", {}),

    # OBJECTS
    ("POST", "/service/objects/create", {}),
    ("POST", "/service/objects/edit", {}),
    ("POST", "/service/objects/delete", {}),

    # ASSIGNMENTS
    ("POST", "/service/assignments/create", {}),
    ("POST", "/service/assignments/unassign", {}),

    # SLA
    ("POST", "/service/sla/create", {}),
    ("POST", "/service/sla/edit", {}),

    # CEO
    ("POST", "/service/ceo/calc", {}),
    ("POST", "/service/ceo/kpi", {}),

    # COEFFICIENTS
    ("POST", "/service/coefficients/edit", {}),
    ("POST", "/service/coefficients/toggle", {}),
    ("POST", "/service/coefficients/create", {}),
    ("POST", "/service/coefficients/delete", {}),

    # TASKS
    ("POST", "/service/tasks/create", {}),
    ("POST", "/service/tasks/close", {}),

    # REPORTS
    ("POST", "/service/reports/create", {}),

    # INCIDENTS
    ("POST", "/service/incidents/create", {}),
    ("POST", "/service/incidents/resolve", {}),

    # BLOG
    ("POST", "/service/blog/create", {}),
    ("POST", "/service/blog/edit", {}),
    ("POST", "/service/blog/delete", {}),

    # IDEAS
    ("POST", "/service/ideas/create", {}),
    ("POST", "/service/ideas/edit", {}),
    ("POST", "/service/ideas/status", {}),
    ("POST", "/service/ideas/delete", {}),

    # CASES
    ("POST", "/service/cases/create", {}),
    ("POST", "/service/cases/edit", {}),
    ("POST", "/service/cases/delete", {}),

    # QUESTIONNAIRE CONFIG
    ("POST", "/service/questionnaire-config/create", {}),
    ("POST", "/service/questionnaire-config/edit", {}),
    ("POST", "/service/questionnaire-config/toggle", {}),
    ("POST", "/service/questionnaire-config/delete", {}),
]


@pytest.mark.parametrize("method,path,data", MALFORMED_POST_CASES)
def test_no_500_on_malformed_input(owner_client, method, path, data):
    """Malformed input should NOT cause a 500."""
    resp = owner_client.request(method, path, data=data)
    assert resp.status_code != 500, (
        f"{method} {path} with {data}: got 500 Internal Server Error"
    )
