import { DataSource } from 'typeorm';
import { Lead } from '../entities/lead.entity';
export interface NotificationsPort {
    create(payload: {
        user_id: number;
        type: string;
        title: string;
        message: string;
        link?: string | null;
        metadata?: Record<string, any> | null;
    }): Promise<any>;
}
export interface MailsPort {
    sendMail(payload: {
        to: string;
        subject: string;
        html: string;
    }): Promise<any>;
}
export interface LeadsGatewayPort {
    emitToUser(userId: number, event: string, payload: any): void;
}
export declare const NOTIFICATIONS_PORT = "NOTIFICATIONS_PORT";
export declare const MAILS_PORT = "MAILS_PORT";
export declare const LEADS_GATEWAY_PORT = "LEADS_GATEWAY_PORT";
export declare const LEAD_NOTIFICATION_TYPES: {
    readonly ASSIGNED: "LEAD_ASSIGNED";
    readonly UNASSIGNED: "LEAD_UNASSIGNED";
    readonly BULK_ASSIGNED: "LEAD_BULK_ASSIGNED";
    readonly HANDOVER_REQUESTED: "LEAD_HANDOVER_REQUESTED";
};
export declare class LeadNotificationsService {
    private readonly dataSource;
    private readonly notifications;
    private readonly mails;
    private readonly gateway?;
    private readonly logger;
    constructor(dataSource: DataSource, notifications: NotificationsPort, mails: MailsPort, gateway?: LeadsGatewayPort | undefined);
    leadAssigned(params: {
        leadId: number;
        newAssigneeId: number;
        previousAssigneeId: number | null;
        actorId: number;
        note?: string | null;
    }): Promise<void>;
    leadsBulkAssigned(params: {
        leadIds: number[];
        newAssigneeId: number;
        actorId: number;
        note?: string | null;
    }): Promise<void>;
    handoverRequested(params: {
        lead: Lead;
        requesterId: number;
        requesterName: string;
        reason: string;
        note?: string | null;
    }): Promise<void>;
    leadCreated(leadId: number, actorId: number): Promise<void>;
    private push;
    private mail;
    private findUser;
    private displayName;
    private emailOf;
    private leadSummary;
    private usersWhoCanAssign;
    private shell;
    private button;
    private assignedEmailHtml;
    private bulkEmailHtml;
    private row;
    private escape;
}
