/**
 * fileDnd — ファイルタブのドラッグ移動（Box 化 Phase 2）で共有する小道具。
 * MIME 種別と dataTransfer の読み書きだけを担い、実際の移動判定は fileMove.ts に委ねる。
 */
import type { LocalFileEntry } from '../api';

/** ドラッグペイロードの MIME 種別（移動元パスの JSON 配列）。 */
export const DND_FILES_MIME = 'application/x-maestro-files';

/**
 * ドラッグ開始時に運ぶ移動元パス集合を決める。
 * 選択中のファイルをドラッグしたら選択全体を運ぶ（複数選択移動）。
 * それ以外（非選択ファイル・フォルダ）はその 1 件だけ。
 */
export function dragSources(entry: LocalFileEntry, selected: Set<string>): string[] {
  if (entry.kind !== 'directory' && selected.size > 0 && selected.has(entry.path)) {
    return Array.from(selected);
  }
  return [entry.path];
}

/** dataTransfer から移動元パス配列を読む（未設定・破損時は空配列）。 */
export function readDragSources(dt: DataTransfer | null): string[] {
  if (!dt) return [];
  try {
    const raw = dt.getData(DND_FILES_MIME);
    const arr = raw ? JSON.parse(raw) : [];
    return Array.isArray(arr) ? arr.filter((x): x is string => typeof x === 'string') : [];
  } catch {
    return [];
  }
}
