import { Repository } from 'typeorm';
import { AnalyticsEvent, AnalyticsEventType } from './entities/analytics-event.entity';
import { TrackEventDto } from './dto/track-event.dto';
import { AnalyticsOverviewQueryDto } from './dto/analytics-overview-query.dto';
import { AnalyticsBreakdownQueryDto } from './dto/analytics-breakdown-query.dto';
import { AnalyticsTimeseriesQueryDto } from './dto/analytics-timeseries-query.dto';
import { Podcast } from '../podcasts/entities/podcast.entity';
import { Ebook } from '../ebooks/entities/ebook.entity';
import { ContentModule } from '../content-modules/entities/content-module.entity';
export interface OverviewRow {
    event_type: AnalyticsEventType;
    total: number;
    unique_visitors: number;
    unique_users: number;
}
export interface BreakdownRow {
    key: string;
    label: string;
    total: number;
    unique_visitors: number;
}
export interface TimeseriesPoint {
    date: string;
    count: number;
}
export declare class AnalyticsService {
    private readonly repo;
    private readonly podcastRepo;
    private readonly ebookRepo;
    private readonly contentModuleRepo;
    private readonly logger;
    constructor(repo: Repository<AnalyticsEvent>, podcastRepo: Repository<Podcast>, ebookRepo: Repository<Ebook>, contentModuleRepo: Repository<ContentModule>);
    recordEvent(dto: TrackEventDto, userId: string | null): Promise<void>;
    private resolveContentTitle;
    private findTitle;
    getOverview(query: AnalyticsOverviewQueryDto): Promise<OverviewRow[]>;
    getBreakdown(query: AnalyticsBreakdownQueryDto): Promise<BreakdownRow[]>;
    getTimeseries(query: AnalyticsTimeseriesQueryDto): Promise<TimeseriesPoint[]>;
    cleanupOldEvents(): Promise<void>;
    private applyDateRange;
    private breakdownByJsonFields;
    private breakdownByContent;
}
