namespace audit_logs.Models.DTO
{
    /// <summary>
    /// Data Transfer Object (DTO) for filtering and paginating audit log records.
    /// </summary>
    public class SpecificAuditLogFilterDto
    {
        /// <summary>
        /// Gets or sets the page number for pagination.
        /// </summary>
        /// <value>
        /// The number of the page to retrieve. Defaults to 1.
        /// </value>
        public int pageNumber { get; set; } = 1;

        /// <summary>
        /// Gets or sets the size of the page for pagination.
        /// </summary>
        /// <value>
        /// The number of records per page. Defaults to 10.
        /// </value>
        public int pageSize { get; set; } = 10;

        /// <summary>
        /// Gets or sets the user ID associated with the author of updates to audit records
        /// </summary>
        /// <value>
        /// The ID of the user who performed the action. Optional.
        /// </value>
        public string? userId { get; set; } = null;

        /// <summary>
        /// Gets or sets the record ID within the EntityType collection to search for audit records.
        /// </summary>
        /// <value>
        /// The ID of the record affected by the audit action, for example, patien_id Optional.
        /// </value>
        public string? recordId { get; set; } = null;

        /// <summary>
        /// Gets or sets the type of entity (collection) associated with the audit records.
        /// </summary>
        /// <value>
        /// The type of the audited entity (collection) (e.g., "Patient", "Order"). Optional.
        /// </value>
        public string? entityType { get; set; } = null;

        /// <summary>
        /// Gets or sets the date and time at which the audit action is performed..
        /// </summary>
        /// <value>
        /// The specific timestamp of the audit action. Optional.
        /// </value>
        public DateTime? actionTime { get; set; } = null;

        /// <summary>
        /// Gets or sets the start date for filtering audit logs by date range.
        /// </summary>
        /// <value>
        /// The earliest date to include in the results. Optional.
        /// </value>
        public DateTime? startDate { get; set; } = null;

        /// <summary>
        /// Gets or sets the end date for filtering audit logs by date range.
        /// </summary>
        /// <value>
        /// The latest date to include in the results. Optional.
        /// </value>
        public DateTime? endDate { get; set; } = null;
    }
}
