import type { DetectionConfig, ModelInfo } from './types';

/**
 * Configuration for different model variants.
 * I've used the models from the original repo and another one from TensorFlow Hub.
 */
export const MODEL_VARIANTS: Record<'quantized' | 'standard' | 'full', ModelInfo> = {
  quantized: {
    variant: 'quantized',
    url: '/models/model.json',
    size: 2 * 1024 * 1024, // ~2MB
    name: 'SSD-MobileNetV2 Quantized',
    description: 'Fastest, for continuous detection.'
  },
  standard: {
    variant: 'standard',
    url: '/models/model.json',
    size: 2 * 1024 * 1024, // Same model, different configs
    name: 'SSD-MobileNetV2 Standard',
    description: 'Balanced speed and accuracy.'
  },
  full: {
    variant: 'full',
    url: '/models/model.json',
    size: 2 * 1024 * 1024, // Same model, different configs
    name: 'SSD-MobileNetV2 Full',
    description: 'Most accurate, for on-demand scan.'
  }
};

/**
 * Default detection configuration.
 */
export const DEFAULT_CONFIG: DetectionConfig = {
  frameSkip: 6,
  confidenceThreshold: 0.8, // Default to 80% confidence
  modelVariant: 'standard',
  maxDetections: 5, // Match the working implementation (process up to 5 detections)
  inputSize: [300, 300], // Match the working implementation
  enableContinuous: true,
  enableTrigger: true,
};

/**
 * Class labels for the models.
 * IMPORTANT: This must match the order of the model's output classes.
 */
export const CLASS_LABELS = ['shoe'];

/**
 * Rules to validate detections and reduce false positives.
 */
export const VALIDATION_RULES = {
  minBoundingBoxSize: 30, // Minimum pixel width/height of a bounding box
  aspectRatioRange: [0.5, 2.0], // Plausible aspect ratio (width / height) for a shoe
  temporalConsistencyFrames: 3, // Must be detected in N consecutive frames
};