import {Access} from "./internal/access";
import {disposePdf} from "./internal/grpc_layer/pdfium/io";
import {IronPdfConfig, IronPdfGlobalConfig} from "./public/ironpdfglobalconfig";

/**
 * Force clean up app resource of IronPdf, result in all previously created PdfDocument objects becoming unusable.
 *
 * See {@link PdfDocument.close} for individual resource clean up for each PdfDocument objects
 */
export async function cleanUp(): Promise<void> {
	// deletePdf(pdfDocumentId) for all ids in static[]
	for (const usedId of Access.usedDocumentIds) {
		await disposePdf(usedId);
	}
}

/**
 * A global configuration for IronPdf including {@link IronPdfConfig.licenseKey}
 * @param ironPdfConfig {@link IronPdfConfig}
 */
export function config(ironPdfConfig: IronPdfConfig) {
	IronPdfGlobalConfig.setConfig(ironPdfConfig);
}

/**
 * Force Shutdown IronPdf Engine process
 */
export function forceShutdown(): void {
	Access.forceShutdown();
}

/* not yet implemented - leave to next release
etc in papersize
Attachments
Bookmarks
Read and fill Forms
SecuritySettings
Revisions
GetVerifiedSignatures
Flatten
drawImageToPdf
*/

export * from "./public/affix";
export * from "./public/image";
export * from "./public/ironpdfglobalconfig";
export * from "./public/page";
export * from "./public/paper";
export * from "./public/pdfDocument";
export * from "./public/pdfGenerator";
export * from "./public/render";
export * from "./public/security";
export * from "./public/signature";
export * from "./public/stamp";
export * from "./public/types";
export * from "./public/naturalLanguages";