import type { Port80Handler } from '../port80handler/classes.port80handler.js';
import { Port80HandlerEvents } from './types.js';
import type { ICertificateData, ICertificateFailure, ICertificateExpiring } from './types.js';

/**
 * Subscribers callback definitions for Port80Handler events
 */
export interface Port80HandlerSubscribers {
  onCertificateIssued?: (data: ICertificateData) => void;
  onCertificateRenewed?: (data: ICertificateData) => void;
  onCertificateFailed?: (data: ICertificateFailure) => void;
  onCertificateExpiring?: (data: ICertificateExpiring) => void;
}

/**
 * Subscribes to Port80Handler events based on provided callbacks
 */
export function subscribeToPort80Handler(
  handler: Port80Handler,
  subscribers: Port80HandlerSubscribers
): void {
  if (subscribers.onCertificateIssued) {
    handler.on(Port80HandlerEvents.CERTIFICATE_ISSUED, subscribers.onCertificateIssued);
  }
  if (subscribers.onCertificateRenewed) {
    handler.on(Port80HandlerEvents.CERTIFICATE_RENEWED, subscribers.onCertificateRenewed);
  }
  if (subscribers.onCertificateFailed) {
    handler.on(Port80HandlerEvents.CERTIFICATE_FAILED, subscribers.onCertificateFailed);
  }
  if (subscribers.onCertificateExpiring) {
    handler.on(Port80HandlerEvents.CERTIFICATE_EXPIRING, subscribers.onCertificateExpiring);
  }
}