import { AutoBeDatabase, AutoBeOpenApi, AutoBeRealizeTransformerPlan, AutoBeRealizeTransformerSelectMapping, AutoBeRealizeTransformerTransformMapping } from "@autobe/interface";
import { ILlmApplication, IValidation } from "typia";
import { AutoBeContext } from "../../../context/AutoBeContext";
import { writeRealizeTransformerTemplate } from "./internal/writeRealizeTransformerTemplate";
export declare namespace AutoBeRealizeTransformerProgrammer {
    function filter(props: {
        schemas: Record<string, AutoBeOpenApi.IJsonSchemaDescriptive>;
        key: string;
    }): boolean;
    function getName(dtoTypeName: string): string;
    function getNeighbors(code: string): string[];
    function getRelationMappingTable(props: {
        application: AutoBeDatabase.IApplication;
        model: AutoBeDatabase.IModel;
    }): Array<{
        propertyKey: string;
        targetModel: string;
        relationType: string;
        fkColumns: string;
    }>;
    function formatRelationMappingTable(props: {
        application: AutoBeDatabase.IApplication;
        model: AutoBeDatabase.IModel;
    }): string;
    function getSelectMappingMetadata(props: {
        application: AutoBeDatabase.IApplication;
        model: AutoBeDatabase.IModel;
    }): AutoBeRealizeTransformerSelectMapping.Metadata[];
    function getTransformMappingMetadata(props: {
        document: AutoBeOpenApi.IDocument;
        plan: AutoBeRealizeTransformerPlan;
    }): AutoBeRealizeTransformerTransformMapping.Metadata[];
    interface INeighborRelation {
        dtoProperty: string;
        relationKey: string;
        transformerName: string;
        isArray: boolean;
        isNullable: boolean;
    }
    function computeNeighborRelations(props: {
        schema: AutoBeOpenApi.IJsonSchemaDescriptive.IObject;
        neighbors: AutoBeRealizeTransformerPlan[];
        relations: Array<{
            propertyKey: string;
            targetModel: string;
            relationType: string;
            fkColumns: string;
        }>;
    }): INeighborRelation[];
    const writeTemplate: typeof writeRealizeTransformerTemplate;
    function writeStructures(ctx: AutoBeContext, dtoTypeName: string): Promise<Record<string, string>>;
    function replaceImportStatements(ctx: AutoBeContext, props: {
        dtoTypeName: string;
        schemas: Record<string, AutoBeOpenApi.IJsonSchemaDescriptive>;
        code: string;
    }): Promise<string>;
    function validate(props: {
        application: AutoBeDatabase.IApplication;
        document: AutoBeOpenApi.IDocument;
        plan: AutoBeRealizeTransformerPlan;
        neighbors: AutoBeRealizeTransformerPlan[];
        transformMappings: AutoBeRealizeTransformerTransformMapping[];
        selectMappings: AutoBeRealizeTransformerSelectMapping[];
        draft: string;
        revise: {
            review: string;
            final: string | null;
        };
    }): IValidation.IError[];
    function getRecursiveRelations(props: {
        schemas: Record<string, AutoBeOpenApi.IJsonSchema>;
        typeName: string;
    }): {
        parent: string | null;
        children: string | null;
    };
    function getRecursiveProperty(props: {
        schemas: Record<string, AutoBeOpenApi.IJsonSchema>;
        typeName: string;
    }): string | null;
    const fixApplication: (props: {
        definition: ILlmApplication;
        application: AutoBeDatabase.IApplication;
        document: AutoBeOpenApi.IDocument;
        plan: AutoBeRealizeTransformerPlan;
    }) => void;
}
