import { isSanityMedia, SanityMedia } from './transformMedia';
import { isObject } from './transformContent';
import type { AnyObject, NacelleContentEntry } from '.';

export function transformSanityMedia(media: SanityMedia): SanityMedia {
  const newAsset = { ...media.asset };

  if (newAsset.metadata && typeof newAsset.metadata.palette !== 'undefined') {
    delete newAsset.metadata.palette;
  }

  if (typeof media.asset._depth === 'undefined') {
    newAsset._depth = 1;
  }

  return {
    ...media,
    asset: newAsset
  };
}

export function transformSanityContent(
  content: NacelleContentEntry | NacelleContentEntry[] | SanityMedia
): NacelleContentEntry | NacelleContentEntry[] {
  if (Array.isArray(content)) {
    return content.map((entry) =>
      transformSanityContent(entry)
    ) as NacelleContentEntry[];
  }

  if (isObject(content)) {
    if (isSanityMedia(content)) {
      content = transformSanityMedia(content);
    } else {
      for (const [property, value] of Object.entries(content)) {
        const key = property as keyof NacelleContentEntry;

        if (Array.isArray(value) || isObject(value)) {
          content[key] = transformSanityContent(value);
        }
      }
    }
  }

  return content as AnyObject;
}
