import { create } from "zustand";

// 应用内确认框（取代在 Wails 桌面 WebView 失效的 window.confirm）。confirmDialog 弹一个 DOM
// 渲染的 Mantine Modal（浏览器 + 桌面都可用），返回用户是否确认。须在 React 树里挂一次
// <ConfirmHost/>（见 main.tsx）。破坏性操作（移除设备 / 全部清除 / 撤销令牌等）用它做二次确认。

interface PendingConfirm
{
    message: string;
    resolve: (ok: boolean) => void;
}

interface ConfirmStore
{
    pending: PendingConfirm | null;
    open: (message: string) => Promise<boolean>;
    settle: (ok: boolean) => void;
}

export const useConfirmStore = create<ConfirmStore>((set, get) =>
({
    pending: null,
    open: (message) => new Promise<boolean>((resolve) =>
    {
        // 同一时刻只挂一个确认框；若已有未决的，先把它按「取消」结清，避免 resolve 泄漏。
        const prev = get().pending;
        if (prev) { prev.resolve(false); }
        set({ pending: { message, resolve } });
    }),
    settle: (ok) =>
    {
        const p = get().pending;
        if (!p) { return; }
        set({ pending: null });
        p.resolve(ok);
    },
}));

export function confirmDialog(message: string): Promise<boolean>
{
    return useConfirmStore.getState().open(message);
}
