fix the delta time init and event number calculation (#12862)

diff --git a/src/app/EventLoggingTypes.h b/src/app/EventLoggingTypes.h
index 8ef91c4..742c2c7 100644
--- a/src/app/EventLoggingTypes.h
+++ b/src/app/EventLoggingTypes.h
@@ -149,7 +149,8 @@
 struct EventLoadOutContext
 {
     EventLoadOutContext(TLV::TLVWriter & aWriter, PriorityLevel aPriority, EventNumber aStartingEventNumber) :
-        mWriter(aWriter), mPriority(aPriority), mStartingEventNumber(aStartingEventNumber), mCurrentEventNumber(0), mFirst(true)
+        mWriter(aWriter), mPriority(aPriority), mStartingEventNumber(aStartingEventNumber), mCurrentEventNumber(0), mFirst(true),
+        mSamePriorityEvent(false)
     {}
 
     TLV::TLVWriter & mWriter;
@@ -161,6 +162,7 @@
     size_t mEventCount                   = 0;
     ClusterInfo * mpInterestedEventPaths = nullptr;
     bool mFirst                          = true;
+    bool mSamePriorityEvent              = false;
 };
 } // namespace app
 } // namespace chip
diff --git a/src/app/EventManagement.cpp b/src/app/EventManagement.cpp
index 1455ad4..0f52283 100644
--- a/src/app/EventManagement.cpp
+++ b/src/app/EventManagement.cpp
@@ -659,6 +659,10 @@
     if (event.mPriority == apEventLoadOutContext->mPriority)
     {
         apEventLoadOutContext->mCurrentTime.mValue += event.mDeltaTime.mValue;
+        // If the retrieved event has the same priority as the one set by FetchEventSince, we need to use mSamePriorityEvent to
+        // increase the event number after encoding the current event number.  Then this updated event number will be used by
+        // FetchEventSince for next use
+        apEventLoadOutContext->mSamePriorityEvent = true;
         if (IsInterestedEventPaths(apEventLoadOutContext, event))
         {
             return CHIP_EVENT_ID_FOUND;
@@ -692,7 +696,13 @@
         loadOutContext->mFirst               = false;
         loadOutContext->mEventCount++;
     }
-    loadOutContext->mCurrentEventNumber++;
+    if (loadOutContext->mSamePriorityEvent)
+    {
+        // Update to next Event Number
+        loadOutContext->mCurrentEventNumber++;
+        loadOutContext->mSamePriorityEvent = false;
+    }
+
     return err;
 }
 
@@ -771,6 +781,21 @@
         envelope->mFieldsToRead |= 1 << to_underlying(EventDataIB::Tag::kPriority);
     }
 
+    if (reader.GetTag() == TLV::ContextTag(to_underlying(EventDataIB::Tag::kDeltaSystemTimestamp)))
+    {
+        uint64_t deltaSystemTime;
+        ReturnErrorOnFailure(reader.Get(deltaSystemTime));
+        envelope->mDeltaTime.mType  = Timestamp::Type::kSystem;
+        envelope->mDeltaTime.mValue = deltaSystemTime;
+    }
+
+    if (reader.GetTag() == TLV::ContextTag(to_underlying(EventDataIB::Tag::kDeltaEpochTimestamp)))
+    {
+        uint64_t deltaEpochTime;
+        ReturnErrorOnFailure(reader.Get(deltaEpochTime));
+        envelope->mDeltaTime.mType  = Timestamp::Type::kEpoch;
+        envelope->mDeltaTime.mValue = deltaEpochTime;
+    }
     return CHIP_NO_ERROR;
 }
 
diff --git a/src/app/reporting/Engine.cpp b/src/app/reporting/Engine.cpp
index 7c29750..8baa297 100644
--- a/src/app/reporting/Engine.cpp
+++ b/src/app/reporting/Engine.cpp
@@ -235,8 +235,7 @@
     CHIP_ERROR err    = CHIP_NO_ERROR;
     size_t eventCount = 0;
     TLV::TLVWriter backup;
-    bool eventClean = true;
-    EventNumber initialEvents[kNumPriorityLevel];
+    bool eventClean                = true;
     ClusterInfo * clusterInfoList  = apReadHandler->GetEventClusterInfolist();
     EventNumber * eventNumberList  = apReadHandler->GetVendedEventNumberList();
     EventManagement & eventManager = EventManagement::GetInstance();
@@ -250,17 +249,6 @@
     // skip the rest of processing
     VerifyOrExit(eventManager.IsValid(), ChipLogError(DataManagement, "EventManagement has not yet initialized"));
 
-    memcpy(initialEvents, eventNumberList, sizeof(initialEvents));
-
-    for (size_t index = 0; index < kNumPriorityLevel; index++)
-    {
-        EventNumber tmpNumber = eventManager.GetFirstEventNumber(static_cast<PriorityLevel>(index));
-        if (tmpNumber > initialEvents[index])
-        {
-            initialEvents[index] = tmpNumber;
-        }
-    }
-
     eventClean = apReadHandler->CheckEventClean(eventManager);
 
     // proceed only if there are new events.
@@ -438,26 +426,6 @@
     err = reportDataWriter.Finalize(&bufHandle);
     SuccessOrExit(err);
 
-#if CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK
-    {
-        ChipLogDetail(DataManagement, "<RE> Dumping report data...");
-        chip::System::PacketBufferTLVReader reader;
-        ReportDataMessage::Parser report;
-
-        reader.Init(bufHandle.Retain());
-        reader.Next();
-
-        err = report.Init(reader);
-        SuccessOrExit(err);
-
-        if ((err = report.CheckSchemaValidity()) != CHIP_NO_ERROR)
-        {
-            ChipLogError(DataManagement, "<RE> Schema check failed: %s", chip::ErrorStr(err));
-        }
-        SuccessOrExit(err);
-    }
-#endif // CHIP_CONFIG_IM_ENABLE_SCHEMA_CHECK
-
     ChipLogDetail(DataManagement, "<RE> Sending report (payload has %" PRIu32 " bytes)...", reportDataWriter.GetLengthWritten());
     err = SendReport(apReadHandler, std::move(bufHandle), hasMoreChunks);
     VerifyOrExit(err == CHIP_NO_ERROR,