import { NotificationService } from './notification.service';
import { TemplateService } from './services/template.service';
import { SendNotificationDto, SendBatchDto, CreateTemplateDto, UpdateTemplateDto, TestRenderDto, QueryLogsDto } from './dto/notification.dto';
export declare class NotificationController {
    private readonly notificationService;
    private readonly templateService;
    constructor(notificationService: NotificationService, templateService: TemplateService);
    send(dto: SendNotificationDto): Promise<{
        id: string;
        createdAt: Date;
        status: import("@prisma/client").$Enums.NotificationSendStatus;
        errorMessage: string | null;
        metadata: import("@prisma/client/runtime/library").JsonValue | null;
        updatedAt: Date;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        variables: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
        content: string;
        recipientEmail: string | null;
        sentAt: Date | null;
        retryCount: number;
        maxRetries: number;
        nextRetryAt: Date | null;
        recipientId: string;
        templateId: string | null;
    }>;
    sendBatch(dto: SendBatchDto): Promise<{
        total: number;
        successful: number;
        failed: number;
        results: PromiseSettledResult<{
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.NotificationSendStatus;
            errorMessage: string | null;
            metadata: import("@prisma/client/runtime/library").JsonValue | null;
            updatedAt: Date;
            channel: import("@prisma/client").$Enums.NotificationChannel;
            subject: string | null;
            variables: import("@prisma/client/runtime/library").JsonValue | null;
            priority: import("@prisma/client").$Enums.NotificationPriority;
            content: string;
            recipientEmail: string | null;
            sentAt: Date | null;
            retryCount: number;
            maxRetries: number;
            nextRetryAt: Date | null;
            recipientId: string;
            templateId: string | null;
        }>[];
    }>;
    getLogs(query: QueryLogsDto): Promise<{
        data: ({
            template: {
                code: string;
                name: string;
            } | null;
            recipient: {
                displayName: string;
                id: string;
                username: string;
                email: string;
            };
        } & {
            id: string;
            createdAt: Date;
            status: import("@prisma/client").$Enums.NotificationSendStatus;
            errorMessage: string | null;
            metadata: import("@prisma/client/runtime/library").JsonValue | null;
            updatedAt: Date;
            channel: import("@prisma/client").$Enums.NotificationChannel;
            subject: string | null;
            variables: import("@prisma/client/runtime/library").JsonValue | null;
            priority: import("@prisma/client").$Enums.NotificationPriority;
            content: string;
            recipientEmail: string | null;
            sentAt: Date | null;
            retryCount: number;
            maxRetries: number;
            nextRetryAt: Date | null;
            recipientId: string;
            templateId: string | null;
        })[];
        total: number;
        page: number;
        limit: number;
        totalPages: number;
    }>;
    getMyLogs(page?: number, limit?: number): Promise<{
        message: string;
    }>;
    retry(id: string): Promise<{
        success: boolean;
        message: string;
    }>;
    getStatistics(startDate?: string, endDate?: string): Promise<{
        total: number;
        sent: number;
        failed: number;
        pending: number;
        successRate: string;
        byChannel: {
            channel: any;
            count: any;
        }[];
    }>;
    getTemplates(channel?: string): Promise<{
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        template: string;
        variables: string[];
        example: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
    }[]>;
    getTemplate(code: string): Promise<{
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        template: string;
        variables: string[];
        example: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
    }>;
    createTemplate(dto: CreateTemplateDto): Promise<{
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        template: string;
        variables: string[];
        example: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
    }>;
    updateTemplate(code: string, dto: UpdateTemplateDto): Promise<{
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        template: string;
        variables: string[];
        example: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
    }>;
    deleteTemplate(code: string): Promise<{
        code: string;
        id: string;
        createdAt: Date;
        name: string;
        updatedAt: Date;
        description: string | null;
        isActive: boolean;
        channel: import("@prisma/client").$Enums.NotificationChannel;
        subject: string | null;
        template: string;
        variables: string[];
        example: import("@prisma/client/runtime/library").JsonValue | null;
        priority: import("@prisma/client").$Enums.NotificationPriority;
    }>;
    testRender(dto: TestRenderDto): Promise<{
        subject: string;
        content: string;
    }>;
}
