namespace CMSMicroservice.Domain.Common;

/// <summary>
/// اینترفیس مارکر برای entityهایی که تاریخچه تغییرات خودکار دارند (Q27).
/// هر entity که این اینترفیس رو implement کنه، در SaveChanges interceptor
/// به‌صورت خودکار یک snapshot از تغییرات ثبت می‌شه.
/// </summary>
/// <typeparam name="THistory">نوع entity تاریخچه (مثلاً PackageHistory)</typeparam>
public interface IHasHistory<THistory> where THistory : BaseAuditableEntity, new()
{
    /// <summary>
    /// ساخت snapshot تاریخچه از وضعیت فعلی entity.
    /// اطلاعات Original (قبل از تغییر) و Current (بعد از تغییر) باید مقایسه شوند.
    /// </summary>
    /// <param name="action">نوع عملیات (Created, Updated, etc.) — as string to be generic</param>
    /// <param name="performedBy">چه کسی انجام داده</param>
    /// <returns>یک رکورد تاریخچه آماده ذخیره</returns>
    THistory CreateHistorySnapshot(string action, string? performedBy);
}
