import { PrismaService } from '../../common/prisma/prisma.service';
import { Prisma } from '../../generated/prisma/client';
import { type ActivityAction, type ActivityEntityType, type ActivityLog, type Client, type Report, type User } from '../../generated/prisma/client';
import { ListActivityLogsQueryDto } from './dto/list-activity-logs-query.dto';
export type ActivityLogActor = Pick<User, 'id' | 'name' | 'email' | 'role' | 'status'>;
export type ActivityLogClient = Pick<Client, 'id' | 'companyName' | 'contactName' | 'email' | 'website' | 'dashboardSlug'>;
export type ActivityLogReport = Pick<Report, 'id' | 'clientId' | 'version' | 'reportStartDate' | 'reportEndDate'>;
export type ActivityLogRecord = Pick<ActivityLog, 'id' | 'action' | 'entityType' | 'entityId' | 'title' | 'description' | 'createdAt'> & {
    actorUser: ActivityLogActor | null;
    targetUser: ActivityLogActor | null;
    client: ActivityLogClient | null;
    report: ActivityLogReport | null;
};
export type ActivityLogSummary = {
    total: number;
    auth: number;
    user: number;
    client: number;
    report: number;
    uniqueActors: number;
    latestAt: Date | null;
};
export type ActivityLogListResponse = {
    items: ActivityLogRecord[];
    meta: {
        page: number;
        limit: number;
        total: number;
        totalPages: number;
    };
    summary: ActivityLogSummary;
};
export interface RecordActivityLogInput {
    action: ActivityAction;
    entityType: ActivityEntityType;
    entityId?: string | null;
    title: string;
    description: string;
    metadata?: Prisma.InputJsonValue | null;
    actorUserId?: string | null;
    clientId?: string | null;
    reportId?: string | null;
}
export declare class ActivityLogService {
    private readonly prisma;
    private readonly logger;
    constructor(prisma: PrismaService);
    listActivityLogs(query: ListActivityLogsQueryDto, actorUserId?: string): Promise<ActivityLogListResponse>;
    record(input: RecordActivityLogInput): Promise<{
        id: string;
        createdAt: Date;
        clientId: string | null;
        reportId: string | null;
        action: ActivityAction;
        entityType: ActivityEntityType;
        entityId: string | null;
        title: string;
        description: string;
        metadata: import("@prisma/client/runtime/client").JsonValue | null;
        actorUserId: string | null;
    }>;
    private buildWhere;
}
