"""
Utility functions for data conversion and JSON serialization.
"""

import pandas as pd
import numpy as np
from typing import Any, List


def convert_to_native(value: Any) -> Any:
    """Convert numpy types to native Python types for JSON serialization."""
    if pd.isna(value):
        return None
    if isinstance(value, np.bool_):
        return bool(value)
    if isinstance(value, (np.integer,)):
        return int(value)
    if isinstance(value, (np.floating,)):
        if np.isnan(value) or np.isinf(value):
            return None
        return float(value)
    if isinstance(value, np.ndarray):
        return value.tolist()
    if value == "SUPP" or value == "NE" or value == "NA" or value == "NP":
        return None
    return value


def clean_for_json(df: pd.DataFrame) -> List[dict]:
    """Convert DataFrame to list of dicts, replacing NaN/inf with None for JSON serialization."""
    records = df.to_dict(orient="records")
    cleaned = []
    for record in records:
        clean_record = {}
        for key, value in record.items():
            clean_record[key] = convert_to_native(value)
        cleaned.append(clean_record)
    return cleaned

