import { RelationshipType } from '../../basic-types/relationships.js';
export type ParsedJDLAnnotation = {
    optionName: string;
    type: 'UNARY' | string;
    optionValue?: boolean | string | number;
};
export type ParsedJDLValidation = {
    key: string;
    value?: string | number | RegExp | boolean;
    constant?: boolean;
};
export type ParsedJDLEntityField = {
    annotations?: ParsedJDLAnnotation[];
    validations: ParsedJDLValidation[];
    name: string;
    type: string;
    documentation?: string;
};
export type ParsedJDLEntity = {
    name: string;
    tableName?: string;
    documentation?: string;
    annotations?: ParsedJDLAnnotation[];
    body?: ParsedJDLEntityField[];
};
export type ParsedJDLApplicationConfig = {
    baseName: string;
} & Record<string, any>;
export type ParsedJDLEnumValue = {
    key: string;
    value?: string;
    comment?: string;
};
export type ParsedJDLEnum = {
    name: string;
    values: ParsedJDLEnumValue[];
    documentation?: string;
};
export type ParsedJDLOption = {
    list: string[];
    excluded: string[];
    annotations: any[];
};
export type ParsedJDLUseOption = {
    optionValues: string[];
} & ParsedJDLOption;
export type ParsedJDLApplication = {
    config: ParsedJDLApplicationConfig;
    namespaceConfigs?: Record<string, Record<string, boolean | number | string[] | string>>;
    entities?: string[];
    options?: Record<string, ParsedJDLOption | Record<string, ParsedJDLOption>>;
    useOptions?: ParsedJDLUseOption[];
};
export type ParsedJDLDeployment = {
    deploymentType: string;
    appsFolders?: string[];
    dockerRepositoryName?: string;
};
export type ParsedJDLRelationshipSide = {
    name: string;
    injectedField?: string;
    required: boolean;
    documentation?: string;
};
export type ParsedJDLRelationshipOption = {
    global: ParsedJDLAnnotation[];
    source: ParsedJDLAnnotation[];
    destination: ParsedJDLAnnotation[];
};
export type ParsedJDLRelationship = {
    from: ParsedJDLRelationshipSide;
    to: ParsedJDLRelationshipSide;
    cardinality: RelationshipType;
    options: ParsedJDLRelationshipOption;
};
export type ParsedJDLApplications = {
    applications: ParsedJDLApplication[];
    entities: ParsedJDLEntity[];
    relationships: ParsedJDLRelationship[];
    deployments: ParsedJDLDeployment[];
    enums: ParsedJDLEnum[];
    constants: Record<string, string>;
    options: Record<string, ParsedJDLOption | Record<string, ParsedJDLOption>>;
    useOptions: ParsedJDLUseOption[];
    aigcs: any[];
};
export type ParsedJDLRoot = {
    parsedContent: ParsedJDLApplications;
    document?: ParsedJDLApplications;
    entities?: ParsedJDLEntity[];
    applicationType?: string;
    applicationName?: string;
    databaseType?: string;
};
