/**
 * File Extensions Constants
 * Categorizes common file extensions for use throughout the application
 */

// Image file extensions
export const IMAGE_EXTENSIONS = [
  'jpg',
  'jpeg',
  'png',
  'gif',
  'bmp',
  'webp',
  'svg',
  'tiff',
  'ico'
];

// Document file extensions
export const DOCUMENT_EXTENSIONS = [
  'pdf',
  'doc',
  'docx',
  'xls',
  'xlsx',
  'ppt',
  'pptx',
  'txt',
  'rtf',
  'odt',
  'ods',
  'odp',
  'csv',
  'xml',
  'html',
  'htm'
];

// Video file extensions
export const VIDEO_EXTENSIONS = [
  'mp4',
  'avi',
  'mov',
  'wmv',
  'flv',
  'webm',
  'mkv',
  'm4v',
  '3gp',
  'mpeg',
  'mpg'
];

// Audio file extensions
export const AUDIO_EXTENSIONS = [
  'mp3',
  'wav',
  'flac',
  'aac',
  'ogg',
  'wma',
  'm4a',
  'opus'
];

// Archive file extensions
export const ARCHIVE_EXTENSIONS = [
  'zip',
  'rar',
  '7z',
  'tar',
  'gz',
  'bz2',
  'xz',
  'iso',
  'dmg'
];

// Combined list of all extensions
export const ALL_EXTENSIONS = [
  ...IMAGE_EXTENSIONS,
  ...DOCUMENT_EXTENSIONS,
  ...VIDEO_EXTENSIONS,
  ...AUDIO_EXTENSIONS,
  ...ARCHIVE_EXTENSIONS
];

// Helper function to get file type category based on extension
export const getFileTypeCategory = (extension: string): string => {
  const ext = extension.toLowerCase();
  
  if (IMAGE_EXTENSIONS.includes(ext)) {
    return 'image';
  } else if (DOCUMENT_EXTENSIONS.includes(ext)) {
    return 'document';
  } else if (VIDEO_EXTENSIONS.includes(ext)) {
    return 'video';
  } else if (AUDIO_EXTENSIONS.includes(ext)) {
    return 'audio';
  } else if (ARCHIVE_EXTENSIONS.includes(ext)) {
    return 'archive';
  }
  
  return 'unknown';
};

// Helper function to check if a file is an image
export const isImageFile = (extension: string): boolean => {
  return IMAGE_EXTENSIONS.includes(extension.toLowerCase());
};

// Helper function to check if a file is a document
export const isDocumentFile = (extension: string): boolean => {
  return DOCUMENT_EXTENSIONS.includes(extension.toLowerCase());
};

// Helper function to check if a file is a video
export const isVideoFile = (extension: string): boolean => {
  return VIDEO_EXTENSIONS.includes(extension.toLowerCase());
};

// Helper function to check if a file is audio
export const isAudioFile = (extension: string): boolean => {
  return AUDIO_EXTENSIONS.includes(extension.toLowerCase());
};

// Helper function to check if a file is an archive
export const isArchiveFile = (extension: string): boolean => {
  return ARCHIVE_EXTENSIONS.includes(extension.toLowerCase());
};