'use client';

import { toast } from 'sonner';
import { useAuthStore } from '@/stores/auth-store';

/**
 * PAC → 宿主 的动作事件(postMessage)。单向,信封:source / type / action / payload。
 *   { source: 'pac', type: 'action', action, payload: { patientId } }
 * (与对接方约定的契约一致 —— type 固定 'action',宿主据 type+source 过滤本类消息。)
 *
 * 用于"宿主动作是弹窗/组件、没有独立 URL"的场景:PAC 只喊一声 + 带 patientId,
 * 宿主父页监听后弹自己的组件。targetOrigin 走 host 配置 actionUrls.HOST_ORIGIN(不允许 '*')。
 * 不做 iframe 判断:按钮固定就是这套;非嵌入时 targetOrigin 与当前窗口不符,浏览器自动丢弃(无副作用)。
 */
export type HostAction = 'OPEN_POTENTIAL_TREATMENT' | 'OPEN_RETURN_VISIT';

/** 宿主 origin(postMessage targetOrigin)—— 来自会话下发的 actionUrls.HOST_ORIGIN。 */
export function hostOrigin(): string | undefined {
  return useAuthStore.getState().user?.actionUrls?.HOST_ORIGIN || undefined;
}

/** 向宿主父窗发一条动作事件。未配置 origin 时提示并返 false。 */
export function postToHost(action: HostAction, patientId: string): boolean {
  const origin = hostOrigin();
  if (!origin) {
    toast('未配置宿主 Origin', { description: '请在宿主管理页配置 actionUrls.HOST_ORIGIN' });
    return false;
  }
  // 信封:source + type + action + payload(契约约定;无 version / doctorId / meta)
  window.parent.postMessage({ source: 'pac', type: 'action', action, payload: { patientId } }, origin);
  return true;
}
