/**
 * Type-safe augmentation management system for Brainy
 * Provides a clean API for managing augmentations without string literals
 */

import { IAugmentation, AugmentationType } from './types/augmentations.js'
import { augmentationPipeline } from './augmentationPipeline.js'

export interface AugmentationInfo {
  name: string
  type: string
  enabled: boolean
  description: string
}

/**
 * Type-safe augmentation manager
 * Accessed via brain.augmentations for all management operations
 */
export class AugmentationManager {
  private pipeline = augmentationPipeline

  /**
   * List all registered augmentations with their status
   * @returns Array of augmentation information
   */
  list(): AugmentationInfo[] {
    // Deprecated: use brain.augmentations instead
    return []
  }

  /**
   * Get information about a specific augmentation
   * @param name The augmentation name
   * @returns Augmentation info or undefined if not found
   */
  get(name: string): AugmentationInfo | undefined {
    const all = this.list()
    return all.find(a => a.name === name)
  }

  /**
   * Check if an augmentation is enabled
   * @param name The augmentation name
   * @returns True if enabled, false otherwise
   */
  isEnabled(name: string): boolean {
    const aug = this.get(name)
    return aug?.enabled ?? false
  }

  /**
   * Enable a specific augmentation
   * @param name The augmentation name
   * @returns True if successfully enabled
   */
  enable(name: string): boolean {
    // Deprecated: use brain.augmentations instead
    return false
  }

  /**
   * Disable a specific augmentation
   * @param name The augmentation name
   * @returns True if successfully disabled
   */
  disable(name: string): boolean {
    // Deprecated: use brain.augmentations instead
    return false
  }

  /**
   * Remove an augmentation from the pipeline
   * @param name The augmentation name
   * @returns True if successfully removed
   */
  remove(name: string): boolean {
    // Deprecated: use brain.augmentations instead
    return true
  }

  /**
   * Enable all augmentations of a specific type
   * @param type The augmentation type
   * @returns Number of augmentations enabled
   */
  enableType(type: AugmentationType): number {
    // Deprecated: use brain.augmentations instead
    return 0
  }

  /**
   * Disable all augmentations of a specific type
   * @param type The augmentation type
   * @returns Number of augmentations disabled
   */
  disableType(type: AugmentationType): number {
    // Deprecated: use brain.augmentations instead
    return 0
  }

  /**
   * Get all augmentations of a specific type
   * @param type The augmentation type
   * @returns Array of augmentations of that type
   */
  listByType(type: AugmentationType): AugmentationInfo[] {
    return this.list().filter(a => a.type === type)
  }

  /**
   * Get all enabled augmentations
   * @returns Array of enabled augmentations
   */
  listEnabled(): AugmentationInfo[] {
    return this.list().filter(a => a.enabled)
  }

  /**
   * Get all disabled augmentations
   * @returns Array of disabled augmentations
   */
  listDisabled(): AugmentationInfo[] {
    return this.list().filter(a => !a.enabled)
  }

  /**
   * Register a new augmentation (internal use)
   * @param augmentation The augmentation to register
   */
  register(augmentation: IAugmentation): void {
    // Deprecated: use brain.augmentations instead
  }
}

// Export types for external use
export { AugmentationType } from './types/augmentations.js'