import * as ImageManipulator from 'expo-image-manipulator';

export type UploadImage = {
  uri: string;
  fileName: string;
  mimeType: string;
};

/**
 * Convert any gallery image (HEIC, WebP, PNG, …) to a JPEG suitable for CRM upload.
 * Also caps longest side so large phone photos don't blow PHP memory on thumbnails.
 */
export async function prepareUploadImage(
  uri: string,
  fileNameHint?: string,
  index = 0,
): Promise<UploadImage> {
  const manipulated = await ImageManipulator.manipulateAsync(
    uri,
    [{ resize: { width: 2048 } }],
    {
      compress: 0.85,
      format: ImageManipulator.SaveFormat.JPEG,
    },
  );

  const base =
    (fileNameHint || '')
      .replace(/\.[^.]+$/, '')
      .replace(/[^\w\-]+/g, '_')
      .slice(0, 48) || `photo_${Date.now()}_${index + 1}`;

  return {
    uri: manipulated.uri,
    fileName: `${base}.jpg`,
    mimeType: 'image/jpeg',
  };
}
