import { Prisma } from '@prisma/client'; import type { StartTrackingInput, SubmitPointsInput, LinkCanvassInput, LiveVolunteersQueryInput, HistoricalListQueryInput } from './tracking.schemas'; declare class TrackingService { /** Start or resume a tracking session for a volunteer. */ startSession(userId: string, data: StartTrackingInput): Promise<{ id: string; userId: string; isActive: boolean; startedAt: Date; endedAt: Date | null; totalPoints: number; totalDistanceM: number; lastLatitude: Prisma.Decimal | null; lastLongitude: Prisma.Decimal | null; lastRecordedAt: Date | null; canvassSessionId: string | null; }>; /** End a tracking session. */ endSession(sessionId: string, userId: string): Promise<{ id: string; userId: string; isActive: boolean; startedAt: Date; endedAt: Date | null; totalPoints: number; totalDistanceM: number; lastLatitude: Prisma.Decimal | null; lastLongitude: Prisma.Decimal | null; lastRecordedAt: Date | null; canvassSessionId: string | null; } | null>; /** Submit a batch of GPS points for a tracking session. */ submitPoints(sessionId: string, userId: string, data: SubmitPointsInput): Promise<{ inserted: number; addedDistanceM: number; }>; /** Get the active tracking session for a user. */ getActiveSession(userId: string): Promise<{ id: string; userId: string; isActive: boolean; startedAt: Date; endedAt: Date | null; totalPoints: number; totalDistanceM: number; lastLatitude: Prisma.Decimal | null; lastLongitude: Prisma.Decimal | null; lastRecordedAt: Date | null; canvassSessionId: string | null; } | null>; /** Link a canvass session to an existing tracking session. */ linkCanvassSession(trackingSessionId: string, data: LinkCanvassInput): Promise<{ id: string; userId: string; isActive: boolean; startedAt: Date; endedAt: Date | null; totalPoints: number; totalDistanceM: number; lastLatitude: Prisma.Decimal | null; lastLongitude: Prisma.Decimal | null; lastRecordedAt: Date | null; canvassSessionId: string | null; }>; /** Get all active volunteers with their recent trail for the admin live map. */ getLiveVolunteers(query: LiveVolunteersQueryInput): Promise<{ userId: string; name: string | null; email: string; latitude: number; longitude: number; lastRecordedAt: string; recentTrail: [number, number][]; canvassSessionId: string | null; trackingSessionId: string; }[]>; /** Get the full route for a tracking session, verifying ownership. */ getMySessionRoute(trackingSessionId: string, userId: string): Promise<{ coordinates: [number, number][]; events: { latitude: number; longitude: number; eventType: import(".prisma/client").$Enums.TrackPointEvent; recordedAt: string; }[]; totalPoints: number; } | null>; /** Get the full route for a tracking session. */ getSessionRoute(trackingSessionId: string): Promise<{ coordinates: [number, number][]; events: { latitude: number; longitude: number; eventType: import(".prisma/client").$Enums.TrackPointEvent; recordedAt: string; }[]; totalPoints: number; }>; /** Paginated list of historical tracking sessions. */ getHistoricalSessions(query: HistoricalListQueryInput): Promise<{ sessions: { id: string; userId: string; userName: string | null; userEmail: string; startedAt: string; endedAt: string | null; totalPoints: number; totalDistanceM: number; canvassSessionId: string | null; isActive: boolean; }[]; pagination: { page: number; limit: number; total: number; totalPages: number; }; }>; /** Delete old track points and empty sessions. */ cleanupOldData(retentionDays: number): Promise; /** Mark stale tracking sessions as inactive. */ closeStaleTrackingSessions(minutes: number): Promise; } export declare const trackingService: TrackingService; export {}; //# sourceMappingURL=tracking.service.d.ts.map