import { OnModuleInit } from '@nestjs/common';
import { Student, StudentDocument } from './schemas/student.schema';
import { Model } from 'mongoose';
import { CreateStudentDto } from './dto/create-student.dto';
import { UpdateStudentDto } from './dto/update-student.dto';
import { PromoteBulkDto } from './dto/promote-bulk.dto';
import { ClassDocument } from '../classes/schemas/class.schema';
import { SectionDocument } from '../sections/schemas/section.schema';
import { EnrollmentDocument } from './schemas/enrollment.schema';
type DocumentsInput = Partial<{
    photoUrl: string;
    fatherPhotoUrl: string;
    motherPhotoUrl: string;
    birthCertificateUrl: string;
    scstCertificateUrl: string;
    leavingCertificateUrl: string;
    vaccineCardUrl: string;
}>;
export declare class StudentsService implements OnModuleInit {
    private studentModel;
    private classModel;
    private sectionModel;
    private enrollmentModel;
    private readonly logger;
    constructor(studentModel: Model<StudentDocument>, classModel: Model<ClassDocument>, sectionModel: Model<SectionDocument>, enrollmentModel: Model<EnrollmentDocument>);
    onModuleInit(): Promise<void>;
    private normEmail;
    private normRoll;
    private toDateOrUndefined;
    private convertDocumentUrls;
    private handleDupKey;
    private get ayModel();
    private parseAYLabel;
    private getAcademicYearById;
    private assertIsCurrentAcademicYear;
    private assertNextAcademicYear;
    create(dto: CreateStudentDto, docs?: DocumentsInput): Promise<(import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>) | null | undefined>;
    findByEmailForAuth(email: string): Promise<(import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>) | null>;
    findByIdForAuth(id: string): Promise<(import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>) | null>;
    findByEmail(email: string): Promise<(import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>) | null>;
    findByPhone(phone: string): Promise<(import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>) | null>;
    findAll(): Promise<any[]>;
    searchStudents(query: string, limit?: number): Promise<any[]>;
    findOne(id: string, academicYearId?: string): Promise<any>;
    update(id: string, dto: UpdateStudentDto): Promise<any>;
    updateDocuments(id: string, docs: DocumentsInput): Promise<import("mongoose").Document<unknown, {}, StudentDocument, {}> & Student & import("mongoose").Document<unknown, any, any, Record<string, any>> & Required<{
        _id: string;
    }>>;
    delete(id: string): Promise<(import("mongoose").Document<unknown, {}, StudentDocument, {}> & Student & import("mongoose").Document<unknown, any, any, Record<string, any>> & Required<{
        _id: string;
    }>) | null>;
    promote(studentId: string, classId: string, sectionId: string, academicYearId: string): Promise<import("mongoose").FlattenMaps<Student & import("mongoose").Document<unknown, any, any, Record<string, any>> & Required<{
        _id: string;
    }>>>;
    promoteBulk(dto: PromoteBulkDto, headerAY?: string): Promise<{
        selected: number;
        matched: number;
        modified: number;
        toAcademicYearId?: undefined;
        targetClassId?: undefined;
        targetSectionId?: undefined;
    } | {
        selected: number;
        matched: number;
        modified: number;
        toAcademicYearId: string;
        targetClassId: string;
        targetSectionId: string | null;
    }>;
    filterStudents(filters: {
        classId?: string;
        sectionId?: string;
        academicYearId?: string;
    }): Promise<any[]>;
    updatePassword(id: string, newPasswordHash: string): Promise<{
        message: string;
    }>;
    toggleActive(id: string): Promise<{
        _id: string;
        isActive: boolean;
    }>;
    getMonthlyEnrollmentStats(academicYearId?: string): Promise<{
        month: string;
        students: any;
    }[]>;
    getRecentEnrollments(limit?: number, academicYearId?: string): Promise<{
        id: string;
        name: string;
        createdAt: Date | undefined;
    }[]>;
    findBySection(sectionId: string): Promise<any[]>;
    findBySectionIds(sectionIds: string[]): Promise<any[]>;
    reAdmit(studentId: string, classId: string, sectionId: string, academicYearId: string): Promise<import("mongoose").FlattenMaps<Student & import("mongoose").Document<unknown, any, any, Record<string, any>> & Required<{
        _id: string;
    }>>>;
    reAdmitBulk(studentIds: string[], classId: string, sectionId: string, academicYearId: string): Promise<{
        total: number;
        successful: number;
        failed: number;
        errors: any[] | undefined;
    }>;
    updateSelfProfile(id: string, data: {
        name?: string;
        phone?: string;
        profileImageUrl?: string;
    }): Promise<import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>>;
    updateEmail(id: string, newEmail: string): Promise<import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>>;
    updateNotificationPrefs(id: string, prefs: {
        email?: boolean;
        whatsapp?: boolean;
    }): Promise<import("mongoose").FlattenMaps<StudentDocument> & Required<{
        _id: string;
    }>>;
}
export {};
