import * as plugins from '../../plugins.js';
import * as paths from '../../paths.js';
import type { UnifiedEmailServer } from '../routing/classes.unified.email.server.js';

/**
 * Configures email server storage settings 
 * @param emailServer Reference to the unified email server
 * @param options Configuration options containing storage paths
 */
export function configureEmailStorage(emailServer: UnifiedEmailServer, options: any): void {
  // Extract the receivedEmailsPath if available
  if (options?.emailPortConfig?.receivedEmailsPath) {
    const receivedEmailsPath = options.emailPortConfig.receivedEmailsPath;
    
    // Ensure the directory exists
    plugins.smartfile.fs.ensureDirSync(receivedEmailsPath);
    
    // Set path for received emails
    if (emailServer) {
      // Storage paths are now handled by the unified email server system
      plugins.smartfile.fs.ensureDirSync(paths.receivedEmailsDir);
      
      console.log(`Configured email server to store received emails to: ${receivedEmailsPath}`);
    }
  }
}

/**
 * Configure email server with port and storage settings
 * @param emailServer Reference to the unified email server
 * @param config Configuration settings for email server
 */
export function configureEmailServer(
  emailServer: UnifiedEmailServer, 
  config: {
    ports?: number[];
    hostname?: string;
    tls?: {
      certPath?: string;
      keyPath?: string;
      caPath?: string;
    };
    storagePath?: string;
  }
): boolean {
  if (!emailServer) {
    console.error('Email server not available');
    return false;
  }
  
  // Configure the email server with updated options
  const serverOptions = {
    ports: config.ports || [25, 587, 465],
    hostname: config.hostname || 'localhost',
    tls: config.tls
  };
  
  // Update the email server options
  emailServer.updateOptions(serverOptions);
  
  console.log(`Configured email server on ports ${serverOptions.ports.join(', ')}`);
  
  // Set up storage path if provided
  if (config.storagePath) {
    configureEmailStorage(emailServer, {
      emailPortConfig: {
        receivedEmailsPath: config.storagePath
      }
    });
  }
  
  return true;
}