"""Offline-Diagnose eines gespeicherten /api/tags-Antworttexts. Kein Netzwerkaufruf."""
import json
import sys
from pathlib import Path

def unique_pairs(pairs):
    result = {}
    for key, value in pairs:
        if key in result:
            raise ValueError('Doppelter JSON-Schlüssel: ' + key)
        result[key] = value
    return result

def reject_constant(value):
    raise ValueError('Ungültige JSON-Konstante: ' + value)

def classify(status, raw):
    if type(status) is not int or not 100 <= status <= 599:
        raise ValueError('HTTP-Status muss eine ganze Zahl von 100 bis 599 sein.')
    if not isinstance(raw, str) or len(raw) > 1_000_000:
        raise ValueError('Antworttext fehlt oder ist größer als eine Million Zeichen.')
    if status in (401, 403):
        return 'zugriff', 'HTTP-Dienst verweigert Zugriff; vorgesehenen Zugang prüfen.'
    if status != 200:
        return 'http', 'HTTP-Antwort vorhanden; Status, Zieladresse und API-Pfad prüfen.'
    try:
        value = json.loads(raw, object_pairs_hook=unique_pairs, parse_constant=reject_constant)
    except (ValueError, RecursionError):
        return 'json', 'HTTP 200, aber kein gültiger JSON-Antworttext.'
    if not isinstance(value, dict) or not isinstance(value.get('models'), list):
        return 'format', 'HTTP 200, aber die erwartete models-Liste fehlt.'
    if not all(isinstance(m, dict) for m in value['models']):
        return 'format', 'models enthält Einträge, die keine Objekte sind.'
    if not value['models']:
        return 'leer', 'Listenformat erkannt; die Liste ist leer.'
    return 'liste', 'Listenformat mit Einträgen erkannt; keine Identitäts- oder Generierungsprüfung.'

def main():
    if len(sys.argv) != 3:
        raise ValueError('Aufruf: python antwort-pruefen.py HTTP_STATUS ANTWORTDATEI')
    file = Path(sys.argv[2])
    if file.stat().st_size > 4_000_000:
        raise ValueError('Datei ist zu groß.')
    code, message = classify(int(sys.argv[1]), file.read_text(encoding='utf-8-sig'))
    print(code + ': ' + message)
    print('Serveridentität, laufendes Modell und Hardware bleiben ungeprüft.')
    return 0 if code in ('leer', 'liste') else 1

if __name__ == '__main__':
    try:
        sys.exit(main())
    except (ValueError, OSError) as exc:
        print(str(exc), file=sys.stderr)
        sys.exit(2)
