import { S3Service } from '../aws/s3.service';
import { PrismaService } from '../prisma/prisma.service';
import { S3CleanupQueue } from '../queues/s3-cleanup.queue';
import { RedisService } from '../redis/redis.service';
import { AbortUploadDto, CompleteUploadDto, InitiateUploadDto, ListOfflineMapsDto, PresignedPartDto, SyncS3MapsDto, UpdateOfflineMapDto } from './dto';
export declare class OfflineMapsService {
    private readonly prisma;
    private readonly s3;
    private readonly redis;
    private readonly cleanupQueue;
    constructor(prisma: PrismaService, s3: S3Service, redis: RedisService, cleanupQueue: S3CleanupQueue);
    initiateUpload(dto: InitiateUploadDto, userId: string, replaceId?: string): Promise<{
        message: string;
        data: {
            offlineMapId: string;
            uploadId: string;
            s3Key: string;
        };
    }>;
    presignedPart(dto: PresignedPartDto): Promise<{
        message: string;
        data: {
            partNumber: number;
            url: string;
        };
    }>;
    completeUpload(dto: CompleteUploadDto, replacement?: boolean): Promise<{
        message: string;
        data: unknown;
    }>;
    abortUpload(dto: AbortUploadDto): Promise<{
        message: string;
        data: unknown;
    }>;
    syncFromS3(userId: string, dto: SyncS3MapsDto): Promise<{
        message: string;
        data: {
            scanned: number;
            existing: number;
            insertable: number;
            skipped: {
                key: string;
                reason: string;
            }[];
            items: {
                s3Key: string;
                countryName: string;
                stateName: string;
                fileName: string;
                fileSize: number;
            }[];
            created?: undefined;
        };
    } | {
        message: string;
        data: {
            scanned: number;
            existing: number;
            created: number;
            skipped: {
                key: string;
                reason: string;
            }[];
            items: unknown[];
            insertable?: undefined;
        };
    }>;
    list(query: ListOfflineMapsDto): Promise<{
        message: string;
        data: {
            items: unknown[];
            meta: {
                page: number;
                limit: number;
                total: number;
            };
        };
    }>;
    detail(id: string): Promise<{
        message: string;
        data: unknown;
    }>;
    update(id: string, dto: UpdateOfflineMapDto): Promise<{
        message: string;
        data: unknown;
    }>;
    updateStatus(id: string, status: 'ACTIVE' | 'INACTIVE'): Promise<{
        message: string;
        data: unknown;
    }>;
    softDelete(id: string): Promise<{
        message: string;
        data: unknown;
    }>;
    hardDelete(id: string): Promise<{
        message: string;
        data: null;
    }>;
    private createReplacementHistory;
    private validateZip;
    private getActiveRecord;
    private clearMapCache;
    private parseS3MapKey;
    private humanizePathPart;
    private safeDecode;
    private serializeMap;
}
