/**
 * Global Process Error Handlers
 * Safeguards to prevent crashes from unhandled errors
 */
const logger = require("../config/logger");

/**
 * Handle uncaught exceptions
 */
process.on("uncaughtException", (error) => {
  logger.error("💥 Uncaught Exception", {
    error: error.message,
    stack: error.stack,
  });

  // Give time to log before exiting
  setTimeout(() => {
    process.exit(1);
  }, 1000);
});

/**
 * Handle unhandled promise rejections
 */
process.on("unhandledRejection", (reason, promise) => {
  logger.error("💥 Unhandled Promise Rejection", {
    reason: reason instanceof Error ? reason.message : reason,
    stack: reason instanceof Error ? reason.stack : undefined,
    promise,
  });

  // Don't exit - log and continue
  // In production, you might want to exit: process.exit(1);
});

/**
 * Handle process warnings
 */
process.on("warning", (warning) => {
  logger.warn("⚠️  Process Warning", {
    name: warning.name,
    message: warning.message,
    stack: warning.stack,
  });
});

/**
 * Handle SIGTERM gracefully
 */
process.on("SIGTERM", () => {
  logger.info("👋 SIGTERM received, shutting down gracefully");

  // Give server time to close connections
  setTimeout(() => {
    process.exit(0);
  }, 10000);
});

/**
 * Handle SIGINT gracefully (Ctrl+C)
 */
process.on("SIGINT", () => {
  logger.info("👋 SIGINT received, shutting down gracefully");
  process.exit(0);
});

logger.info("✅ Global process error handlers registered");

module.exports = {
  // Exports for testing if needed
};
