import type { ConversionOptions } from '@/types/conversion';

export interface FormatPreset {
  id: string;
  name: string;
  description: string;
  icon: string;
  category: 'video' | 'audio' | 'image';
  outputFormat: string;
  options: ConversionOptions;
}

/**
 * Predefined format presets for common use cases
 */
export const FORMAT_PRESETS: FormatPreset[] = [
  // Video Presets
  {
    id: 'youtube-video',
    name: 'YouTube Video',
    description: '1080p MP4, optimized for YouTube',
    icon: '🎬',
    category: 'video',
    outputFormat: 'mp4',
    options: {
      videoCodec: 'libx264',
      videoBitrate: '5M',
      videoResolution: '1920x-1',
      videoFps: 30,
      audioCodec: 'aac',
      audioBitrate: '192k',
    },
  },
  {
    id: 'instagram-video',
    name: 'Instagram Video',
    description: 'Square 1:1 format for Instagram',
    icon: '📸',
    category: 'video',
    outputFormat: 'mp4',
    options: {
      videoCodec: 'libx264',
      videoBitrate: '3M',
      videoResolution: '1080x-1', // Will be cropped to square
      videoFps: 30,
      audioCodec: 'aac',
      audioBitrate: '128k',
    },
  },
  {
    id: 'twitter-video',
    name: 'Twitter Video',
    description: '720p, optimized for Twitter',
    icon: '🐦',
    category: 'video',
    outputFormat: 'mp4',
    options: {
      videoCodec: 'libx264',
      videoBitrate: '2M',
      videoResolution: '1280x-1',
      videoFps: 30,
      audioCodec: 'aac',
      audioBitrate: '128k',
    },
  },
  {
    id: 'web-video',
    name: 'Web Optimized',
    description: 'Small file size for web streaming',
    icon: '🌐',
    category: 'video',
    outputFormat: 'mp4',
    options: {
      videoCodec: 'libx264',
      videoBitrate: '1.5M',
      videoResolution: '854x-1',
      videoFps: 24,
      audioCodec: 'aac',
      audioBitrate: '96k',
    },
  },

  // Audio Presets
  {
    id: 'podcast-audio',
    name: 'Podcast',
    description: 'MP3, optimized for voice',
    icon: '🎙️',
    category: 'audio',
    outputFormat: 'mp3',
    options: {
      audioCodec: 'libmp3lame',
      audioBitrate: '128k',
      audioSampleRate: 44100,
      audioChannels: 2,
    },
  },
  {
    id: 'music-high-quality',
    name: 'High Quality Music',
    description: 'MP3, 320kbps for music',
    icon: '🎵',
    category: 'audio',
    outputFormat: 'mp3',
    options: {
      audioCodec: 'libmp3lame',
      audioBitrate: '320k',
      audioSampleRate: 48000,
      audioChannels: 2,
    },
  },
  {
    id: 'audiobook',
    name: 'Audiobook',
    description: 'Mono, small file size',
    icon: '📚',
    category: 'audio',
    outputFormat: 'mp3',
    options: {
      audioCodec: 'libmp3lame',
      audioBitrate: '64k',
      audioSampleRate: 22050,
      audioChannels: 1,
    },
  },

  // Image Presets
  {
    id: 'web-thumbnail',
    name: 'Web Thumbnail',
    description: 'JPG, 800px width, optimized',
    icon: '🖼️',
    category: 'image',
    outputFormat: 'jpg',
    options: {
      imageQuality: 85,
      imageWidth: 800,
    },
  },
  {
    id: 'hd-image',
    name: 'HD Image',
    description: 'PNG, high quality, lossless',
    icon: '🎨',
    category: 'image',
    outputFormat: 'png',
    options: {
      imageQuality: 100,
    },
  },
  {
    id: 'social-media-image',
    name: 'Social Media',
    description: 'JPG, 1200px, optimized',
    icon: '📱',
    category: 'image',
    outputFormat: 'jpg',
    options: {
      imageQuality: 90,
      imageWidth: 1200,
    },
  },
  {
    id: 'web-optimized-image',
    name: 'Web Optimized',
    description: 'WebP, small file size',
    icon: '⚡',
    category: 'image',
    outputFormat: 'webp',
    options: {
      imageQuality: 80,
    },
  },
];

/**
 * Get presets by category
 */
export function getPresetsByCategory(category: 'video' | 'audio' | 'image'): FormatPreset[] {
  return FORMAT_PRESETS.filter(preset => preset.category === category);
}

/**
 * Get preset by ID
 */
export function getPresetById(id: string): FormatPreset | undefined {
  return FORMAT_PRESETS.find(preset => preset.id === id);
}
