/**
 * Fragment Manager for Detection Module
 * 
 * Manages fragmented protocol data using the shared fragment handler
 */

import { FragmentHandler, type IFragmentOptions } from '../../protocols/common/fragment-handler.js';
import type { IConnectionContext } from '../../protocols/common/types.js';

/**
 * Detection-specific fragment manager
 */
export class DetectionFragmentManager {
  private tlsFragments: FragmentHandler;
  private httpFragments: FragmentHandler;
  
  constructor() {
    // Configure fragment handlers with appropriate limits
    const tlsOptions: IFragmentOptions = {
      maxBufferSize: 16384,  // TLS record max size
      timeout: 5000,
      cleanupInterval: 30000
    };
    
    const httpOptions: IFragmentOptions = {
      maxBufferSize: 8192,   // HTTP header reasonable limit
      timeout: 5000,
      cleanupInterval: 30000
    };
    
    this.tlsFragments = new FragmentHandler(tlsOptions);
    this.httpFragments = new FragmentHandler(httpOptions);
  }
  
  /**
   * Get fragment handler for protocol type
   */
  getHandler(protocol: 'tls' | 'http'): FragmentHandler {
    return protocol === 'tls' ? this.tlsFragments : this.httpFragments;
  }
  
  /**
   * Create connection ID from context
   */
  static createConnectionId(context: IConnectionContext): string {
    return context.id || `${context.sourceIp}:${context.sourcePort}-${context.destIp}:${context.destPort}`;
  }
  
  /**
   * Clean up all handlers
   */
  cleanup(): void {
    this.tlsFragments.cleanup();
    this.httpFragments.cleanup();
  }
  
  /**
   * Destroy all handlers
   */
  destroy(): void {
    this.tlsFragments.destroy();
    this.httpFragments.destroy();
  }
}