import type { QueryFieldRange, QueryFieldRef } from './crud';
import type { ControllerSide } from './meta';
/** EPS：单条 API */
export type EpsApiItem = {
    method: string;
    path: string;
    summary: string;
    dts: Record<string, unknown>;
    tag: string;
    prefix: string;
    ignoreToken: boolean;
    /** 强化：登录但免权限码 */
    ignorePerms: boolean;
    /** 强化：推导/显式权限码 */
    perms: string[];
};
/** EPS：字段列 */
export type EpsColumn = {
    propertyName: string;
    /** drizzle dataType：string / number / boolean / date（兼容旧逻辑） */
    type: string;
    /** drizzle columnType：PgVarchar / PgText / PgInteger / PgNumeric … */
    columnType?: string;
    /** getSQLType()：varchar(100) / text / numeric(10, 2) … */
    sqlType?: string;
    length?: string;
    precision?: number;
    scale?: number;
    comment?: string;
    nullable?: boolean;
    /** 列有 DB default / $defaultFn / serial */
    hasDefault?: boolean;
    defaultValue?: unknown;
    source?: string;
    dict?: string | string[];
    /** 物理表名（i18n_pack），供 field.{table}.{prop} 翻译 */
    table?: string;
};
/** EPS：单个控制器/实体描述 */
export type EpsEntity = {
    module: string;
    /** 强化：admin | app */
    side: ControllerSide;
    prefix: string;
    name?: string;
    info: {
        type: {
            name: string;
            description: string;
        };
    };
    api: EpsApiItem[];
    columns: EpsColumn[];
    pageQueryOp: {
        keyWordLikeFields: string[];
        fieldEq: Array<string | QueryFieldRef>;
        fieldLike: Array<string | QueryFieldRef>;
        fieldArray: Array<string | QueryFieldRef>;
        fieldRange: QueryFieldRange[];
    };
    pageColumns: EpsColumn[];
    /** Controller api 含 dataI18n：本实体参与业务数据翻译 */
    dataI18n?: boolean;
    /** direct 字段名（语言 Tab 列） */
    dataI18nFields?: string[];
    /** 全局：已声明 dataI18n 的业务表（供 join 发现源表） */
    dataI18nTables?: string[];
};
/** EPS：按模块分组 */
export type EpsModuleMap = Record<string, EpsEntity[]>;
/** EPS 开放接口完整载荷（实体 + 全部字典扁平数据） */
export type EpsDictFlatRow = {
    id: number;
    name: string;
    typeId: number;
    parentId?: number | null;
    orderNum?: number;
    value?: unknown;
};
export type EpsPayload = {
    /** 服务端 vome.eps；写入打包 eps.json，生产仅 true 时前端可再请求 */
    eps?: boolean;
    modules: EpsModuleMap;
    /** 字典类型 key → 扁平条目（前端组树后当本地缓存） */
    dict: Record<string, EpsDictFlatRow[]>;
};
