using audit_logs.Models.DTO;
using audit.Model;

namespace audit_logs.Services.Interfaces;
using System.Security.Claims;
using System.Threading.Tasks;
using audit_logs.Models;
using MongoDB.Bson;
public interface IAuditService
{
    Task RecordAuditAsync(AuditRecord auditRecord);
    Task CreateAuditLogAsync(ClaimsPrincipal user, object dataOriginal, object dataModified, string reason = null);
    Task CreateAuditLogAsync(AuditLogData auditLogData);
    Task<PaginatedLogsResultDto<AuditRecordDto>> GetAuditLogsBySpecificFilterAsync(
        SpecificAuditLogFilterDto filterDto);

    Task<PaginatedLogsResultDto<AuditRecordDto>> GetAuditLogsMatchingTextOrDateAsync(
        AuditLogTextOrDateSearchDTO filtertTextOrDateDto);
  
    Task<T> DeepCopyAsync<T>(T source);
}