// 批准页的 redirect-back：/link?r=…&c=… 要求已登录，但既有登录流程（OAuth 整页
// 跳转 + 回调落 "/"）不带返回地址。这里用 sessionStorage 暂存意图返回的 /link URL：
//   - /link 在未登录时 stash 当前 URL，再走标准登录；
//   - 首页 beforeLoad consume 它——登录后落到 "/" 即被弹回 /link。
// sessionStorage（非 localStorage）：仅本次登录回流需要，关标签即清，且不跨设备。

const RETURN_TO_KEY = "cdrop.qr.return_to";

// 仅允许站内 /link 路径回流，杜绝 open-redirect（外部 URL / 协议相对地址）。
function isSafeLinkPath(path: string): boolean
{
    return path.startsWith("/link?") || path === "/link";
}

export function stashLinkReturn(path: string): void
{
    if (typeof window === "undefined") { return; }
    if (!isSafeLinkPath(path)) { return; }
    window.sessionStorage.setItem(RETURN_TO_KEY, path);
}

// consumeLinkReturn 取出并清除暂存的返回地址（一次性）。无 / 非法返回 null。
export function consumeLinkReturn(): string | null
{
    if (typeof window === "undefined") { return null; }
    const path = window.sessionStorage.getItem(RETURN_TO_KEY);
    window.sessionStorage.removeItem(RETURN_TO_KEY);
    if (!path || !isSafeLinkPath(path)) { return null; }
    return path;
}
