"""Normalize Cloud's schema response without persisting Cloud-owned schema."""
import json


def _parse_jsonish(value, default=None):
    if value is None:
        return default
    if isinstance(value, (dict, list)):
        return value
    if isinstance(value, str) and value.strip():
        return json.loads(value)
    return default


def normalize_cloud_entity(entity: dict) -> dict:
    if not isinstance(entity, dict):
        raise ValueError("Invalid Cloud entity")
    if "schema_json" in entity:
        schema = _parse_jsonish(entity.get("schema_json"), {})
    else:
        schema = entity.get("schema") if isinstance(entity.get("schema"), dict) else entity
    if not isinstance(schema, dict):
        schema = {}
    settings = _parse_jsonish(entity.get("settings_json"), {}) or {}
    if not isinstance(settings, dict):
        settings = {}
    key = entity.get("entity_key") or entity.get("key")
    raw_fields = schema.get("fields")
    if not key:
        raise ValueError("Invalid Cloud entity schema")
    if not isinstance(raw_fields, list) or any(
        not isinstance(field, dict) or not field.get("key") or not field.get("type")
        for field in raw_fields
    ):
        raise ValueError("Cloud entity fields are unavailable or malformed")
    fields = raw_fields
    return {
        **entity,
        "key": key,
        "label": entity.get("label") or entity.get("name") or key,
        "fields": fields,
        "schema": schema,
        "rls_enabled": settings.get("rls_enabled", entity.get("rls_enabled", False)),
        "status": entity.get("status") or "active",
    }
