import structlog

logger = structlog.get_logger("studio_api.gunicorn")


def post_fork(server, worker):
    """
    Called just after a gunicornworker has been forked.
    This is where we initialize singletons that need to be set up in each worker process.
    """
    logger.info(f"Worker {worker.pid} forked, initializing singletons...")

    try:
        # See https://docs.statsig.com/server-core/python-core/#process-forking-and-wsgi-servers
        from studio_api.bots.singletons import feature_flags

        if not feature_flags.initialized:
            feature_flags.initialize()
            logger.info(f"Worker {worker.pid}: Statsig initialized successfully")
        else:
            logger.warning(f"Worker {worker.pid}: Statsig already initialized")

    except Exception as e:
        logger.error(f"Worker {worker.pid}: Failed to initialize singletons: {e}")
        # Don't raise the exception - we want the worker to continue even if singletons fail
        # The application will fall back to mock implementations if needed
