import type { MediaItem } from '@features/media/types';

/**
 * メディアから画像ブロック (imageBlock) の属性を組み立てる。
 * media_size ("幅x高さ") から width/height を取り出す。
 */
export const createImageBlockAttrs = (mediaItem: MediaItem, className?: string) => {
  let width = null;
  let height = null;
  if (mediaItem.media_size.includes('x')) {
    const [tempX, tempY] = mediaItem.media_size.split('x');
    width = parseInt(tempX.trim(), 10);
    height = parseInt(tempY.trim(), 10);
  }
  return {
    src: mediaItem.media_root_path,
    class: className || null,
    mediaId: mediaItem.media_id,
    entryId: ACMS.Config.eid,
    width,
    height,
    link: mediaItem.media_link ?? null,
    caption: mediaItem.media_caption ?? null,
    alt: mediaItem.media_alt ?? null,
  };
};

/**
 * メディアからファイルブロック (fileBlock) の属性を組み立てる。
 */
export const createFileBlockAttrs = (mediaItem: MediaItem, className?: string) => ({
  href: mediaItem.media_permalink,
  icon: mediaItem.media_icon,
  iconWidth: mediaItem.media_icon_width || '100',
  iconHeight: mediaItem.media_icon_height || '100',
  class: className || null,
  mediaId: mediaItem.media_id,
  caption: mediaItem.media_caption || mediaItem.media_title || null,
  alt: mediaItem.media_alt || null,
  extension: mediaItem.media_ext || null,
  fileSize: mediaItem.media_filesize || null,
});

export type MediaBlockContent = {
  type: 'imageBlock' | 'fileBlock';
  attrs: Record<string, unknown>;
};

/**
 * メディアの media_type に応じて、挿入する画像/ファイルブロックの JSONContent を組み立てる。
 * 画像 (image) と svg は imageBlock、それ以外 (file) は fileBlock として扱う。
 * これにより、画像とファイルが混在していても 1 回の挿入で適切なブロックへ振り分けられる。
 */
export const buildMediaBlockContent = (
  mediaItem: MediaItem,
  className: string,
  noLightbox: string
): MediaBlockContent => {
  if (mediaItem.media_type === 'file') {
    return { type: 'fileBlock', attrs: createFileBlockAttrs(mediaItem, className) };
  }
  return { type: 'imageBlock', attrs: { ...createImageBlockAttrs(mediaItem, className), noLightbox } };
};
