/**
 * 与 `@cainiaofe/cn-request` 对齐：响应常为 `{ data: 业务体 }`。
 * 有 `data` 则取内层，否则认为调用方已传入业务体。
 */
export function unwrapResponseData(result) {
    var _a;
    const wrapped = result;
    return ((_a = wrapped.data) !== null && _a !== void 0 ? _a : result);
}
/**
 * 归一为开放平台 getList 的「根对象」形态：
 * `{ success, errorCode, data: { tableData, paging } }`。
 *
 * `response.data` 可能是两种含义之一，需区分：
 * - 多包一层 HTTP：此时 `data` 即上述根对象（上面带 success / errorCode），应再剥一层。
 * - 已是根对象：`data` 里是 `{ tableData, paging }`，没有 success，不能把 `data` 当根。
 * 故仅当内层对象上存在 `success` 或 `errorCode` 时，才认定「多包了一层」并返回内层。
 */
function normalizeGetListResponse(raw) {
    const response = raw;
    const inner = response.data;
    const innerLooksLikePlatformRoot = inner != null &&
        typeof inner === 'object' &&
        !Array.isArray(inner) &&
        ('success' in inner || 'errorCode' in inner);
    if (innerLooksLikePlatformRoot) {
        return inner;
    }
    return response;
}
/** 从 `paging` 取总条数；缺省或非对象时为 0。 */
function totalCountFromPaging(paging) {
    if (paging == null || typeof paging !== 'object') {
        return 0;
    }
    return Number(paging.totalCount) || 0;
}
/**
 * 解析 getList 响应，得到是否成功、行列表、分页总条数。
 *
 * `success`：显式 `success === false` 为失败；否则 `success === true`、或 `errorCode === '0000'`、或
 * 有行数据（避免仅 success 字段缺失/在外层时误判失败）。
 */
export function parseGetListPage(result) {
    var _a, _b;
    const platform = normalizeGetListResponse(result);
    const listPayload = (_a = platform.data) !== null && _a !== void 0 ? _a : {};
    const { tableData, paging } = listPayload;
    const rows = Array.isArray(tableData)
        ? tableData
        : [];
    const totalCount = totalCountFromPaging(paging);
    const errorCodeOk = String((_b = platform.errorCode) !== null && _b !== void 0 ? _b : '') === '0000';
    const ok = platform.success === true || errorCodeOk;
    const failed = platform.success === false;
    const success = failed ? false : ok || rows.length > 0;
    return { success, rows, totalCount };
}
/**
 * 解析 createOrUpdate 响应中的配置行主键 `id`（供后续更新带 `id`）。
 * 优先取 `data.id`；否则取根上的 `id`；再兜底最外层 `result.id`（兼容未走 unwrap 的少数形态）。
 */
export function parseCreateOrUpdateRowId(result) {
    var _a;
    const root = unwrapResponseData(result);
    const detail = root.data;
    let id;
    if (detail != null && typeof detail === 'object' && 'id' in detail) {
        id = detail.id;
    }
    else {
        id = (_a = root.id) !== null && _a !== void 0 ? _a : result.id;
    }
    if (id == null || id === '') {
        return undefined;
    }
    return String(id);
}
