/**
 * SharePoint Integration Type Definitions
 * Part of ADPA (Automated Document Processing Assistant) v2.1.3
 *
 * Defines TypeScript interfaces and types for SharePoint integration
 * with Microsoft Graph API and Microsoft 365 ecosystem.
 *
 * Features:
 * - OAuth 2.0 and Service Principal authentication
 * - Microsoft Graph API integration
 * - SharePoint document library management
 * - Enterprise security and compliance
 */
export interface SharePointConfig {
    authMethod: 'oauth2' | 'service-principal' | 'certificate';
    tenantId: string;
    clientId: string;
    clientSecret?: string;
    certificatePath?: string;
    siteUrl: string;
    documentLibrary: string;
    oauth2?: {
        redirectUri: string;
        scopes: string[];
        authority?: string;
    };
    rootFolderPath?: string;
    enableVersioning?: boolean;
    retentionDays?: number;
}
export interface SharePointDocument {
    title: string;
    content: string;
    fileName: string;
    contentType?: string;
    folderPath?: string;
    metadata?: Record<string, any>;
    tags?: string[];
    category?: string;
}
export interface PublishResult {
    success: boolean;
    driveItemId?: string;
    webUrl?: string;
    error?: string;
    fileName: string;
    size?: number;
    lastModified?: string;
}
export interface SharePointSite {
    id: string;
    displayName: string;
    name: string;
    webUrl: string;
    description?: string;
}
export interface SharePointDriveItem {
    id: string;
    name: string;
    webUrl: string;
    size: number;
    createdDateTime: string;
    lastModifiedDateTime: string;
    folder?: {
        childCount: number;
    };
    file?: {
        mimeType: string;
        hashes: {
            quickXorHash?: string;
            sha1Hash?: string;
        };
    };
}
export interface SharePointMetadata {
    Title?: string;
    ContentType?: string;
    Author?: string;
    Created?: string;
    Modified?: string;
    DocumentCategory?: string;
    ProjectPhase?: string;
    PMBOKReference?: string;
    DocumentVersion?: string;
    ReviewStatus?: string;
    ApprovalStatus?: string;
    [key: string]: any;
}
export interface BatchUploadOptions {
    maxConcurrency?: number;
    chunkSize?: number;
    retryAttempts?: number;
    progressCallback?: (uploaded: number, total: number) => void;
}
export interface SharePointPermissions {
    read: boolean;
    write: boolean;
    delete: boolean;
    manage: boolean;
}
export interface OAuth2Config {
    tenantId: string;
    clientId: string;
    redirectUri: string;
    scopes: string[];
    authority?: string;
    cacheLocation?: string;
}
export interface TokenResponse {
    access_token: string;
    token_type: string;
    expires_in: number;
    scope: string;
    refresh_token?: string;
}
export interface GraphError {
    error: {
        code: string;
        message: string;
        innerError?: {
            date: string;
            'request-id': string;
            'client-request-id': string;
        };
    };
}
export interface PublishingOptions {
    parentFolderPath?: string;
    enableVersioning?: boolean;
    overwriteExisting?: boolean;
    createFolders?: boolean;
    preserveTimestamps?: boolean;
    addMetadata?: boolean;
    tagPrefix?: string;
}
export interface SharePointPublishOptions {
    folderPath?: string;
    labelPrefix?: string;
    dryRun?: boolean;
    force?: boolean;
    createFolders?: boolean;
    overwriteExisting?: boolean;
    preserveMetadata?: boolean;
    enableVersioning?: boolean;
}
export interface SiteCreationOptions {
    template?: string;
    language?: number;
    timeZone?: number;
    owners?: string[];
    members?: string[];
}
export interface SearchOptions {
    query?: string;
    fileTypes?: string[];
    dateRange?: {
        start: string;
        end: string;
    };
    sortBy?: 'name' | 'modified' | 'size';
    sortOrder?: 'asc' | 'desc';
    top?: number;
}
export interface GraphResponse<T> {
    '@odata.context'?: string;
    '@odata.nextLink'?: string;
    value?: T[];
}
export interface DriveResponse {
    id: string;
    driveType: string;
    name: string;
    webUrl: string;
    quota: {
        total: number;
        used: number;
        remaining: number;
    };
}
//# sourceMappingURL=types.d.ts.map