import { Prisma } from '@prisma/client';
import { CheckpointRepository } from '../repositories/checkpoint.repository';
import { SharedCheckinPartnerRepository } from '../repositories/shared-checkin-partner.repository';
import { TicketUsageRepository } from '../repositories/ticket-usage.repository';
import { CreatePartnerDto, UpdatePartnerDto, DispatchRequestDto } from '../dto/shared-checkin.dto';
import { QrTokenScope } from '../utils/shared-checkin.util';
export declare class SharedCheckinService {
    private readonly checkpointRepo;
    private readonly partnerRepo;
    private readonly ticketUsageRepo;
    constructor(checkpointRepo: CheckpointRepository, partnerRepo: SharedCheckinPartnerRepository, ticketUsageRepo: TicketUsageRepository);
    getQrTokenForCheckpoint(code: string): Promise<{
        token: string;
        expiresAt: number | null;
        scope: QrTokenScope;
        rotationSeconds: number | null;
        graceSeconds: number;
    }>;
    getDispatchOptions(code: string, qrToken: string): Promise<{
        self: {
            companyId: string;
            companyLabel: string;
            checkpointCode: string;
            checkpointName: string;
        };
        partners: {
            partnerId: string;
            companyId: string;
            companyLabel: string;
            displayLabel: string | undefined;
            isExternal: boolean;
        }[];
    }>;
    dispatch(req: DispatchRequestDto, dispatchOrigin: string): Promise<{
        redirectUrl: string;
        ticketExpiresAt: number;
        targetMode: "local";
    } | {
        redirectUrl: string;
        ticketExpiresAt: number;
        targetMode: "external";
    }>;
    validateTicket(ticket: string, targetCheckpointCode: string): Promise<{
        valid: boolean;
        payload: {
            companyId: string;
            dispatchOrigin: string;
            expiresAt: number;
        };
    }>;
    listPartners(checkpointId: string): Promise<{
        id: string;
        createdAt: Date;
        sortOrder: number;
        updatedAt: Date;
        isActive: boolean;
        updatedBy: string;
        createdBy: string;
        checkpointId: string;
        companyId: string;
        companyLabel: string;
        displayLabel: string | null;
        targetUrl: string;
    }[]>;
    createPartner(checkpointId: string, dto: CreatePartnerDto, userId: string): Promise<{
        id: string;
        createdAt: Date;
        sortOrder: number;
        updatedAt: Date;
        isActive: boolean;
        updatedBy: string;
        createdBy: string;
        checkpointId: string;
        companyId: string;
        companyLabel: string;
        displayLabel: string | null;
        targetUrl: string;
    }>;
    updatePartner(partnerId: string, dto: UpdatePartnerDto, userId: string): Promise<{
        id: string;
        createdAt: Date;
        sortOrder: number;
        updatedAt: Date;
        isActive: boolean;
        updatedBy: string;
        createdBy: string;
        checkpointId: string;
        companyId: string;
        companyLabel: string;
        displayLabel: string | null;
        targetUrl: string;
    }>;
    deletePartner(partnerId: string): Promise<void>;
    cleanupTicketUsage(): Prisma.PrismaPromise<Prisma.BatchPayload>;
    private assertCheckpointExists;
    private validatePartnerPayload;
    private verifyQrToken;
}
