import { Repository } from 'typeorm';
import { Notification, NotificationType } from './entities/notification.entity';
import { NotificationTemplate } from './entities/notification-template.entity';
import { EmailService } from './email.service';
import { NotificationsGateway } from './notifications.gateway';
export declare class NotificationsService {
    private notificationsRepository;
    private templatesRepository;
    private emailService;
    private notificationsGateway;
    private readonly logger;
    constructor(notificationsRepository: Repository<Notification>, templatesRepository: Repository<NotificationTemplate>, emailService: EmailService, notificationsGateway: NotificationsGateway);
    getTemplates(): Promise<NotificationTemplate[]>;
    getTemplate(type: NotificationType): Promise<NotificationTemplate | null>;
    getTemplateById(id: string): Promise<NotificationTemplate | null>;
    updateTemplate(id: string, data: Partial<NotificationTemplate>): Promise<NotificationTemplate>;
    seedDefaultTemplates(): Promise<void>;
    private getDefaultTemplates;
    private getDefaultTemplateName;
    createNotification(data: {
        organization_id: string;
        user_id?: string;
        type: NotificationType;
        title: string;
        message: string;
        data?: Record<string, any>;
    }): Promise<Notification>;
    sendNotification(options: {
        organizationId: string;
        userId?: string;
        type: NotificationType;
        variables: Record<string, any>;
        recipientEmail?: string;
    }): Promise<Notification | null>;
    getOrganizationNotifications(organizationId: string, limit?: number, offset?: number): Promise<{
        notifications: Notification[];
        total: number;
    }>;
    getUserNotifications(userId: string, organizationId: string, limit?: number, offset?: number): Promise<{
        notifications: Notification[];
        total: number;
    }>;
    getUnreadCount(organizationId: string, userId?: string): Promise<number>;
    markAsRead(notificationId: string, userId: string): Promise<Notification>;
    markAllAsRead(organizationId: string, userId: string): Promise<void>;
    deleteNotification(notificationId: string): Promise<void>;
    notifyVoteReceived(organizationId: string, data: {
        campaignName: string;
        contestantName: string;
        votes: number;
        amount: number;
        voterName?: string;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifySubscriptionActivated(organizationId: string, data: {
        planName: string;
        maxCampaigns: number;
        maxContestants: number;
        platformFee: number;
        expiresAt: string;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifySubscriptionExpiring(organizationId: string, data: {
        planName: string;
        daysRemaining: number;
        expiresAt: string;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifySubscriptionExpired(organizationId: string, recipientEmail?: string): Promise<Notification | null>;
    notifyTeamMemberAdded(organizationId: string, data: {
        memberName: string;
        memberEmail: string;
        addedBy: string;
        role: string;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifyCampaignStarted(organizationId: string, data: {
        campaignName: string;
        campaignSlug: string;
        votePrice: number;
        contestantCount: number;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifyCampaignEnded(organizationId: string, data: {
        campaignId: string;
        campaignName: string;
        totalVotes: number;
        totalRevenue: number;
        winnerName: string;
        winnerVotes: number;
    }, recipientEmail?: string): Promise<Notification | null>;
    notifyPaymentReceived(organizationId: string, data: {
        amount: number;
        campaignName: string;
        contestantName: string;
        votes: number;
        voterName?: string;
    }, recipientEmail?: string): Promise<Notification | null>;
    broadcastSystemNotification(title: string, message: string, targetPlan?: string): Promise<void>;
}
