export const MAX_FILE_SIZE = 5 * 1024 * 1024;
export const MAX_FILES = 5;
export const ALLOWED_TYPES = ["image/png", "image/jpeg", "image/webp", "image/gif", "application/pdf", "text/plain"];

export type UploadedFile = { name: string; size: number; url: string };

export function validateFiles(files: File[]): { ok: true; files: File[] } | { ok: false; message: string } {
  if (files.length > MAX_FILES) return { ok: false, message: `Max ${MAX_FILES} files` };
  for (const f of files) {
    if (f.size > MAX_FILE_SIZE) return { ok: false, message: `${f.name}: exceeds ${MAX_FILE_SIZE / 1024 / 1024} MB` };
    if (!ALLOWED_TYPES.includes(f.type)) return { ok: false, message: `${f.name}: unsupported type` };
  }
  return { ok: true, files };
}

export function simulateUpload(file: File, onProgress: (pct: number) => void): Promise<UploadedFile> {
  return new Promise((resolve) => {
    let pct = 0;
    const t = setInterval(() => {
      pct = Math.min(100, pct + 15 + Math.random() * 15);
      onProgress(Math.round(pct));
      if (pct >= 100) {
        clearInterval(t);
        resolve({ name: file.name, size: file.size, url: URL.createObjectURL(file) });
      }
    }, 180);
  });
}