def setup_mock_onvif_camera(mock_onvif_camera,
                            with_h264=True,
                            two_profiles=False,
                            with_interfaces=True):
    """Prepare mock onvif.ONVIFCamera."""
    devicemgmt = MagicMock()

    interface = MagicMock()
    interface.Enabled = True
    interface.Info.HwAddress = MAC

    devicemgmt.GetNetworkInterfaces.return_value = Future()
    devicemgmt.GetNetworkInterfaces.return_value.set_result(
        [interface] if with_interfaces else [])

    media_service = MagicMock()

    profile1 = MagicMock()
    profile1.VideoEncoderConfiguration.Encoding = "H264" if with_h264 else "MJPEG"
    profile2 = MagicMock()
    profile2.VideoEncoderConfiguration.Encoding = "H264" if two_profiles else "MJPEG"

    media_service.GetProfiles.return_value = Future()
    media_service.GetProfiles.return_value.set_result([profile1, profile2])

    mock_onvif_camera.update_xaddrs.return_value = Future()
    mock_onvif_camera.update_xaddrs.return_value.set_result(True)
    mock_onvif_camera.create_devicemgmt_service = MagicMock(
        return_value=devicemgmt)
    mock_onvif_camera.create_media_service = MagicMock(
        return_value=media_service)

    def mock_constructor(
        host,
        port,
        user,
        passwd,
        wsdl_dir,
        encrypt=True,
        no_cache=False,
        adjust_time=False,
        transport=None,
    ):
        """Fake the controller constructor."""
        return mock_onvif_camera

    mock_onvif_camera.side_effect = mock_constructor