import { PrismaService } from "../../../core/database/prisma/prisma.service";
import { CheckpointRepository } from '../repositories/checkpoint.repository';
import { AttendanceEventRepository } from '../repositories/attendance-event.repository';
import { DailySummaryRepository } from '../repositories/daily-summary.repository';
import { CheckinDto, GuestCheckinDto } from '../dto/checkin.dto';
import { GeocodingService } from './geocoding.service';
export declare class CheckinService {
    private readonly prisma;
    private readonly checkpointRepo;
    private readonly eventRepo;
    private readonly summaryRepo;
    private readonly geocodingService;
    constructor(prisma: PrismaService, checkpointRepo: CheckpointRepository, eventRepo: AttendanceEventRepository, summaryRepo: DailySummaryRepository, geocodingService: GeocodingService);
    private computeTodayDurationSeconds;
    getPublicCheckpoint(code: string, opts?: {
        qrToken?: string;
        ticket?: string;
    }): Promise<{
        id: string;
        name: string;
        description: string | null;
        address: string | null;
        timezone: string;
        geoPolicy: import("@prisma/client").$Enums.SiteGeoPolicy;
        geoRadius: number | undefined;
        allowUnauthenticatedCheckin: boolean;
        accessMode: import("@prisma/client").$Enums.SiteCheckpointAccessMode;
        sharedCheckinEnabled: boolean;
        sharedCompanyId: string | null | undefined;
        sharedCompanyLabel: string | null | undefined;
    }>;
    searchUsers(code: string, query: string): Promise<{
        users: {
            id: string;
            displayName: string;
            email: string;
            department: string;
        }[];
    }>;
    getTodayEvents(code: string, userId: string): Promise<{
        events: {
            id: string;
            eventType: import("@prisma/client").$Enums.SiteEventType;
            timestamp: string;
            geoStatus: import("@prisma/client").$Enums.SiteGeoStatus;
            authMethod: import("@prisma/client").$Enums.SiteAuthMethod;
            latitude: number | null;
            longitude: number | null;
            accuracy: number | null;
            distanceToCheckpoint: number | null;
        }[];
        summary: {
            firstCheckIn: string | null;
            lastCheckOut: string | null;
            totalEvents: number;
            todayDurationSeconds: number;
        };
    }>;
    checkin(code: string, dto: CheckinDto, userId: string, ip?: string, userAgent?: string): Promise<{
        event: {
            id: string;
            eventType: import("@prisma/client").$Enums.SiteEventType;
            timestamp: string;
            geoStatus: import("@prisma/client").$Enums.SiteGeoStatus;
            distanceToCheckpoint: number | null;
        };
        todaySummary: {
            firstCheckIn: string | null;
            lastCheckOut: string | null;
            totalEvents: number;
            todayDurationSeconds: number;
        };
    }>;
    guestCheckin(code: string, dto: GuestCheckinDto, ip?: string, userAgent?: string): Promise<{
        event: {
            id: string;
            eventType: import("@prisma/client").$Enums.SiteEventType;
            timestamp: string;
            geoStatus: import("@prisma/client").$Enums.SiteGeoStatus;
            distanceToCheckpoint: number | null;
        };
        todaySummary: {
            firstCheckIn: string | null;
            lastCheckOut: string | null;
            totalEvents: number;
            todayDurationSeconds: number;
        };
    }>;
    getCheckpointEvents(checkpointId: string, date?: string, page?: number, pageSize?: number, userName?: string, eventType?: string, lang?: string): Promise<{
        events: {
            id: string;
            userId: string;
            userName: any;
            userEmail: any;
            eventType: import("@prisma/client").$Enums.SiteEventType;
            timestamp: string;
            authMethod: import("@prisma/client").$Enums.SiteAuthMethod;
            geoStatus: import("@prisma/client").$Enums.SiteGeoStatus;
            latitude: number | null;
            longitude: number | null;
            accuracy: number | null;
            distanceToCheckpoint: number | null;
            resolvedAddress: string | null;
        }[];
        pagination: {
            total: number;
            page: number;
            pageSize: number;
        };
    }>;
    exportEvents(checkpointId: string, date?: string, lang?: string): Promise<string>;
    getTodaySummary(checkpointId: string): Promise<{
        date: string;
        totalCheckedIn: number;
        totalCheckedOut: number;
        notCheckedOut: number;
        totalDurationSeconds: number;
        avgDurationSeconds: number;
        recentEvents: {
            userId: string;
            userName: any;
            eventType: import("@prisma/client").$Enums.SiteEventType;
            timestamp: string;
        }[];
    }>;
    private validateGeo;
    private validateEventOrder;
    private checkDuplicateEvent;
}
