'use client';

/**
 * 宿主动作 URL(actionUrls)——「插槽」配置。
 *
 * PAC 工作台里有些动作(新建预约 / 看患者档案 / 看影像原图)发生在**宿主系统**里,
 * PAC 不实现,只在对应插槽用宿主提供的 URL 打开宿主页面(iframe 嵌入或跳转)。
 *
 * 生产:这些 URL 由宿主在接入时配置下发(换票 token / 配置接口),按 host 不同而不同。
 * 这里给**演示默认值**(指向模拟宿主的新建预约页),并允许 env 覆盖,方便本地联调。
 */
const DEFAULT_ACTION_URLS = {
  /** 新建预约 —— 带患者/项目预填,打开宿主预约中心 */
  createAppointment: 'http://localhost:4100/appointment',
} as const;

type ActionKey = keyof typeof DEFAULT_ACTION_URLS;

const ENV_OVERRIDES: Partial<Record<ActionKey, string | undefined>> = {
  createAppointment: process.env.NEXT_PUBLIC_HOST_APPOINTMENT_URL,
};

/** 取某个插槽的宿主基础 URL。 */
export function actionBaseUrl(key: ActionKey): string {
  return ENV_OVERRIDES[key] || DEFAULT_ACTION_URLS[key];
}

/** 拼上下文参数,生成插槽最终 URL(供 iframe src / 跳转用)。 */
export function actionUrl(key: ActionKey, params: Record<string, string | undefined>): string {
  const url = new URL(actionBaseUrl(key));
  for (const [k, v] of Object.entries(params)) {
    if (v) url.searchParams.set(k, v);
  }
  return url.toString();
}
