'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;
}
