import { Attendance, AttendanceStatus } from './schemas/attendance.schema';
import { Model } from 'mongoose';
import { FilterAttendanceDto } from './dto/filter-attendance.dto';
import { MarkAttendanceDto } from './dto/mark-attendance.dto';
import { BulkMarkDto } from './dto/bulk-mark.dto';
import { Student } from '../students/schemas/student.schema';
import { Section } from '../sections/schemas/section.schema';
type Range = {
    from?: string;
    to?: string;
};
export declare class AttendanceService {
    private model;
    private studentModel;
    private sectionModel;
    constructor(model: Model<Attendance>, studentModel: Model<Student>, sectionModel: Model<Section>);
    private isDateYYYYMMDD;
    private isFutureDate;
    private isTeacherAssignedToSection;
    private getStudentMapByIds;
    private resolveStudentSnap;
    markAttendance(dto: MarkAttendanceDto, teacherId: string, headerAcademicYearId?: string, userRole?: string): Promise<import("mongoose").FlattenMaps<{
        studentId: string;
        classId?: string | undefined;
        sectionId?: string | undefined;
        academicYearId?: string | undefined;
        date: string;
        status: AttendanceStatus;
        markedBy: string;
        _id: string;
        __v: number;
        createdAt?: Date | undefined;
        updatedAt?: Date | undefined;
    }> & Required<{
        _id: string;
    }>>;
    bulkMarkAttendance(body: BulkMarkDto, teacherId: string, headerAcademicYearId?: string, userRole?: string): Promise<{
        matched: any;
        modified: any;
        upserted: any;
        skipped: number;
    }>;
    getAttendance(filter: FilterAttendanceDto): Promise<(import("mongoose").FlattenMaps<{
        studentId: string;
        classId?: string | undefined;
        sectionId?: string | undefined;
        academicYearId?: string | undefined;
        date: string;
        status: AttendanceStatus;
        markedBy: string;
        _id: string;
        __v: number;
        createdAt?: Date | undefined;
        updatedAt?: Date | undefined;
    }> & Required<{
        _id: string;
    }>)[]>;
    getAdminSummary(filter: FilterAttendanceDto): Promise<{
        date: string;
        present: number;
        absent: number;
        total: number;
    }[]>;
    getReport(filter: FilterAttendanceDto, period: 'weekly' | 'monthly'): Promise<{
        label: string;
        present: number;
        absent: number;
        total: number;
    }[]>;
    getTeacherHistory(teacherId: string): Promise<(import("mongoose").FlattenMaps<{
        studentId: string;
        classId?: string | undefined;
        sectionId?: string | undefined;
        academicYearId?: string | undefined;
        date: string;
        status: AttendanceStatus;
        markedBy: string;
        _id: string;
        __v: number;
        createdAt?: Date | undefined;
        updatedAt?: Date | undefined;
    }> & Required<{
        _id: string;
    }>)[]>;
    getSectionDay(sectionId: string, date: string, academicYearId?: string): Promise<(import("mongoose").FlattenMaps<{
        studentId: string;
        classId?: string | undefined;
        sectionId?: string | undefined;
        academicYearId?: string | undefined;
        date: string;
        status: AttendanceStatus;
        markedBy: string;
        _id: string;
        __v: number;
        createdAt?: Date | undefined;
        updatedAt?: Date | undefined;
    }> & Required<{
        _id: string;
    }>)[]>;
    getStudentRange(studentId: string, range: Range, academicYearId?: string): Promise<(import("mongoose").FlattenMaps<{
        studentId: string;
        classId?: string | undefined;
        sectionId?: string | undefined;
        academicYearId?: string | undefined;
        date: string;
        status: AttendanceStatus;
        markedBy: string;
        _id: string;
        __v: number;
        createdAt?: Date | undefined;
        updatedAt?: Date | undefined;
    }> & Required<{
        _id: string;
    }>)[]>;
    getStudentMonth(studentId: string, month: string, academicYearId?: string): Promise<{
        dates: any[];
    }>;
    getDailySummary(academicYearId?: string): Promise<{
        date: any;
        present: any;
        absent: any;
        total: any;
    }[]>;
}
export {};
