import { Model } from 'mongoose';
import { Notification, NotificationDocument } from './schemas/notification.schema';
import { CreateNotificationDto } from './dto/create-notification.dto';
import { UpdateNotificationDto } from './dto/update-notification.dto';
import { StudentDocument } from '../students/schemas/student.schema';
import { TeacherDocument } from '../teachers/schemas/teacher.schema';
import { SectionDocument } from '../sections/schemas/section.schema';
import { SmsService } from '../common/services/sms.service';
type FileMeta = {
    fileUrl?: string;
    fileName?: string;
    fileType?: string;
    fileSize?: number;
};
export declare class NotificationsService {
    private readonly notificationModel;
    private readonly studentModel;
    private readonly teacherModel;
    private readonly sectionModel;
    private readonly smsService;
    private logger;
    constructor(notificationModel: Model<NotificationDocument>, studentModel: Model<StudentDocument>, teacherModel: Model<TeacherDocument>, sectionModel: Model<SectionDocument>, smsService: SmsService);
    private safeId;
    private validateRecipients;
    sendNotification(dto: CreateNotificationDto, userId: string, file?: FileMeta): Promise<Notification & import("mongoose").Document<unknown, any, any, Record<string, any>> & Required<{
        _id: string;
    }>>;
    private sendSmsToRecipients;
    getRecipients(notificationId: string): Promise<{
        recipients: {
            type: "Student" | "Teacher";
            id: string;
            name: string;
            uniqueId: string;
        }[];
        total: number;
    }>;
    findAll(): Promise<(import("mongoose").FlattenMaps<NotificationDocument> & Required<{
        _id: string;
    }>)[]>;
    findOne(id: string): Promise<(import("mongoose").FlattenMaps<NotificationDocument> & Required<{
        _id: string;
    }>) | null>;
    update(id: string, dto: UpdateNotificationDto, file?: FileMeta): Promise<import("mongoose").FlattenMaps<NotificationDocument> & Required<{
        _id: string;
    }>>;
    delete(id: string): Promise<{
        message: string;
    }>;
    filter(filters: {
        type?: string;
        status?: string;
        sentBy?: string;
        academicYearId?: string;
        classId?: string;
        sectionId?: string;
        q?: string;
        hasFile?: string;
        dateFrom?: string;
        dateTo?: string;
    }): Promise<(import("mongoose").FlattenMaps<NotificationDocument> & Required<{
        _id: string;
    }>)[]>;
    getRecent(limit?: number, academicYearId?: string): Promise<(import("mongoose").FlattenMaps<NotificationDocument> & Required<{
        _id: string;
    }>)[]>;
    getForStudent(studentId: string, limit?: number, ayOverride?: string): Promise<any[]>;
    getForTeacher(teacherId: string, limit?: number, ayOverride?: string): Promise<any[]>;
    canUserAccessNotification(notificationId: string, userId: string, role: string, ayOverride?: string): Promise<boolean>;
    getUnreadCount(userId: string, role: string, ayOverride?: string): Promise<{
        count: number;
    }>;
    markAsRead(notificationId: string, userId: string): Promise<{
        message: string;
    }>;
    markAllAsRead(userId: string, role: string, ayOverride?: string): Promise<{
        message: string;
    }>;
    dismiss(notificationId: string, userId: string): Promise<{
        message: string;
    }>;
    dismissAll(userId: string, role: string, ayOverride?: string): Promise<{
        message: string;
    }>;
}
export {};
