'use client';

import { useAuthStore } from '@/stores/auth-store';
import type { HostActionKey } from '@pac/types';

/**
 * 宿主动作跳转 URL —— 通用占位符替换。
 *
 * 模板存于 host.actionUrls[key](会话下发到 user.actionUrls),形如
 *   `/emr/MedicalAdmin/full?tenantId={brandId}&emrId={medicalRecordNumber}&organizationId={clinicId}&patientId={patientId}`
 * 把 `{xxx}` 逐个替换成 ctx[xxx](URL 编码);缺失的键替换成空串(不报错)。
 *
 * 约定占位符(驼峰,与 HOST_ACTION_META 一致):
 *   {patientId} {medicalRecordNumber} {brandId} {clinicId} {doctorId} {appointmentId} ...
 */
export function fillActionUrl(
  template: string,
  ctx: Record<string, string | null | undefined>,
): string {
  return template.replace(/\{(\w+)\}/g, (_, key: string) =>
    encodeURIComponent(ctx[key] ?? ''),
  );
}

/** 取某个宿主动作的模板(会话下发的 actionUrls);未配置返回 undefined。 */
export function actionTemplate(key: HostActionKey): string | undefined {
  return useAuthStore.getState().user?.actionUrls?.[key] || undefined;
}

/**
 * 便捷:填好某动作的 URL。未配置模板 → 返回 undefined(调用方据此决定不渲染按钮)。
 */
export function resolveActionUrl(
  key: HostActionKey,
  ctx: Record<string, string | null | undefined>,
): string | undefined {
  const tpl = actionTemplate(key);
  return tpl ? fillActionUrl(tpl, ctx) : undefined;
}

/**
 * ⭐ 宿主槽位跳转一律**新开标签页** —— 所有槽位统一,别再各写各的 target。
 *
 * 2026-07-29 业务约定:客户档案 / 病历 / 预约等宿主页面「打开新页,不在当前页面做跳转」。
 * 原来用的是 `_top`:PAC 嵌在宿主 iframe 里时会把**整个宿主页顶掉**,客服看完档案回不到
 * 刚才的工单(召回上下文、已填的通话结果全丢)。新标签页则两边都在。
 *
 * 用 a 标签的地方用 HOST_LINK_PROPS,用 JS 派发的地方用 openHostUrl(),两条路同一口径。
 * `noopener`:新页拿不到 window.opener,防宿主页被反向导航(tabnabbing)。
 */
export const HOST_LINK_PROPS = { target: '_blank', rel: 'noopener noreferrer' } as const;

export function openHostUrl(url: string): void {
  window.open(url, '_blank', 'noopener,noreferrer');
}
