"""
Hilfsfunktionen für MCP-Tool-Implementierungen.
"""

from __future__ import annotations

import json
from datetime import date, datetime, time
from decimal import Decimal
from uuid import UUID


def serialize_value(value):
    """Konvertiert Django-Feldwerte in JSON-serialisierbare Typen."""
    if isinstance(value, UUID):
        return str(value)
    if isinstance(value, Decimal):
        return float(value)
    if isinstance(value, (date, datetime)):
        return value.isoformat()
    if isinstance(value, time):
        return value.isoformat()
    return value


def model_to_dict(instance, fields=None, exclude=None) -> dict:
    """
    Konvertiert eine Django-Model-Instanz in ein serialisierbares Dict.

    Args:
        instance: Django Model Instanz
        fields: Nur diese Felder einschließen (None = alle)
        exclude: Diese Felder ausschließen
    """
    exclude = exclude or []
    result = {}
    for field in instance._meta.fields:
        name = field.name
        if fields and name not in fields:
            continue
        if name in exclude:
            continue
        value = getattr(instance, name)
        # ForeignKey: _id-Suffix-Wert (nicht ganzes Objekt)
        result[name] = serialize_value(value)

    # Auch ForeignKey-IDs explizit aufnehmen (z.B. konto_id)
    for field in instance._meta.fields:
        if hasattr(field, "attname") and field.attname != field.name:
            attname = field.attname
            if attname not in result:
                result[attname] = serialize_value(getattr(instance, attname))

    return result


def format_result(data) -> str:
    """Gibt Daten als formatiertes JSON zurück."""
    return json.dumps(data, ensure_ascii=False, indent=2, default=str)
