import { type ChildProcess } from 'child_process'
import { allSignals } from './all-signals.js'

/**
 * Starts forwarding signals to `child` through `parent`.
 */
export const proxySignals = (child: ChildProcess) => {
  const listeners = new Map()

  for (const sig of allSignals) {
    const listener = () => {
      // some signals can only be received, not sent
      try {
        child.kill(sig)
        /* c8 ignore start */
      } catch (_) {}
      /* c8 ignore stop */
    }
    try {
      // if it's a signal this system doesn't recognize, skip it
      process.on(sig, listener)
      listeners.set(sig, listener)
      /* c8 ignore start */
    } catch (_) {}
    /* c8 ignore stop */
  }

  const unproxy = () => {
    for (const [sig, listener] of listeners) {
      process.removeListener(sig, listener)
    }
  }
  child.on('exit', unproxy)
  return unproxy
}
