import { DocumentCategory } from '@prisma/client';
import { PrismaService } from '../../prisma/prisma.service';
import { AuthenticatedUser } from '../../common/decorators/current-user.decorator';
import { StubSignatureProvider } from './providers/signature-provider.interface';
interface UploadDocumentInput {
    complexId: string;
    title: string;
    category?: DocumentCategory;
    folder?: string;
    isPublic?: boolean;
    filename: string;
    url: string;
    mimeType?: string;
    sizeBytes?: number;
    contentBase64?: string;
}
export declare class DocumentsService {
    private readonly prisma;
    private readonly signatures;
    constructor(prisma: PrismaService, signatures: StubSignatureProvider);
    upload(user: AuthenticatedUser, dto: UploadDocumentInput): Promise<{
        versions: {
            id: string;
            createdAt: Date;
            version: number;
            url: string;
            filename: string;
            mimeType: string | null;
            sizeBytes: number | null;
            hash: string | null;
            documentId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        category: import(".prisma/client").$Enums.DocumentCategory;
        title: string;
        isPublic: boolean;
        uploaderId: string;
        folder: string | null;
        latestVersionId: string | null;
    }>;
    addVersion(user: AuthenticatedUser, documentId: string, dto: Omit<UploadDocumentInput, 'complexId' | 'title' | 'category' | 'folder' | 'isPublic'>): Promise<{
        versions: {
            id: string;
            createdAt: Date;
            version: number;
            url: string;
            filename: string;
            mimeType: string | null;
            sizeBytes: number | null;
            hash: string | null;
            documentId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        category: import(".prisma/client").$Enums.DocumentCategory;
        title: string;
        isPublic: boolean;
        uploaderId: string;
        folder: string | null;
        latestVersionId: string | null;
    }>;
    list(user: AuthenticatedUser, complexId?: string, category?: DocumentCategory): Promise<({
        versions: {
            id: string;
            createdAt: Date;
            version: number;
            url: string;
            filename: string;
            mimeType: string | null;
            sizeBytes: number | null;
            hash: string | null;
            documentId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        category: import(".prisma/client").$Enums.DocumentCategory;
        title: string;
        isPublic: boolean;
        uploaderId: string;
        folder: string | null;
        latestVersionId: string | null;
    })[]>;
    findOne(user: AuthenticatedUser, id: string): Promise<{
        signatureRequests: ({
            signer: {
                id: string;
                email: string;
            };
        } & {
            id: string;
            createdAt: Date;
            status: import(".prisma/client").$Enums.SignatureStatus;
            expiresAt: Date | null;
            providerRef: string | null;
            provider: string;
            signedAt: Date | null;
            documentId: string;
            signingUrl: string | null;
            declinedAt: Date | null;
            signerId: string;
        })[];
        complex: {
            id: string;
            name: string;
            createdAt: Date;
            updatedAt: Date;
            city: string | null;
            country: string;
            status: string;
            tenantId: string;
            type: import(".prisma/client").$Enums.ComplexType;
            address: string | null;
            gpsLat: number | null;
            gpsLng: number | null;
        };
        versions: {
            id: string;
            createdAt: Date;
            version: number;
            url: string;
            filename: string;
            mimeType: string | null;
            sizeBytes: number | null;
            hash: string | null;
            documentId: string;
        }[];
    } & {
        id: string;
        createdAt: Date;
        updatedAt: Date;
        complexId: string;
        category: import(".prisma/client").$Enums.DocumentCategory;
        title: string;
        isPublic: boolean;
        uploaderId: string;
        folder: string | null;
        latestVersionId: string | null;
    }>;
    requestSignature(user: AuthenticatedUser, documentId: string, signerId: string): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.SignatureStatus;
        expiresAt: Date | null;
        providerRef: string | null;
        provider: string;
        signedAt: Date | null;
        documentId: string;
        signingUrl: string | null;
        declinedAt: Date | null;
        signerId: string;
    }>;
    completeStubSignature(providerRef: string): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.SignatureStatus;
        expiresAt: Date | null;
        providerRef: string | null;
        provider: string;
        signedAt: Date | null;
        documentId: string;
        signingUrl: string | null;
        declinedAt: Date | null;
        signerId: string;
    } | null>;
    handleSignatureCallback(rawBody: string, _headers: Record<string, string>): Promise<{
        id: string;
        createdAt: Date;
        status: import(".prisma/client").$Enums.SignatureStatus;
        expiresAt: Date | null;
        providerRef: string | null;
        provider: string;
        signedAt: Date | null;
        documentId: string;
        signingUrl: string | null;
        declinedAt: Date | null;
        signerId: string;
    } | {
        ok: boolean;
    }>;
    remove(user: AuthenticatedUser, id: string): Promise<{
        deleted: boolean;
    }>;
}
export {};
