export const AUDIT_BIZ_SIGN_HEADER = 'X-Audit-Biz-Sign';

/** 无电子签名操作使用的前端事件关联键；32 位 UUID 与后端 biz-sign 长度约束兼容。 */
export function createAuditCorrelationId(): string {
  const randomUUID = globalThis.crypto?.randomUUID?.();
  if (randomUUID) return randomUUID.replaceAll('-', '');

  const bytes = new Uint8Array(16);
  if (globalThis.crypto?.getRandomValues) {
    globalThis.crypto.getRandomValues(bytes);
  } else {
    for (let index = 0; index < bytes.length; index++) bytes[index] = Math.floor(Math.random() * 256);
  }
  bytes[6] = (bytes[6]! & 0x0f) | 0x40;
  bytes[8] = (bytes[8]! & 0x3f) | 0x80;
  return Array.from(bytes, (value) => value.toString(16).padStart(2, '0')).join('');
}

/** 从在线表单提交外层对象或实际业务数据中提取后端签发的 biz_sign。 */
export function resolveAuditBizSign(payload: any): string {
  const direct = resolveDirectAuditBizSign(payload);
  if (direct) return direct;
  for (const nestedPayload of [payload?.formData, payload?.map]) {
    const nested = resolveDirectAuditBizSign(nestedPayload);
    if (nested) return nested;
  }
  if (typeof payload?.data !== 'string') return '';
  try {
    const formData = JSON.parse(payload.data);
    return resolveDirectAuditBizSign(formData);
  } catch {
    return '';
  }
}

export function buildAuditBizSignHeaders(payload: any, fallbackBizSign?: unknown): Record<string, string> {
  const bizSign = resolveAuditBizSign(payload) || resolveDirectAuditBizSign({ biz_sign: fallbackBizSign });
  return bizSign ? { [AUDIT_BIZ_SIGN_HEADER]: bizSign } : {};
}

function isValidBizSign(value: unknown): boolean {
  return value != null && /^[\w-]{1,40}$/.test(String(value).trim());
}

function resolveDirectAuditBizSign(payload: any): string {
  const value = payload?.biz_sign ?? payload?.bizSign ?? payload?.biz_sign_jnpfId;
  return isValidBizSign(value) ? String(value).trim() : '';
}
