/**
 * 不可放入 URL 的路由载荷（系统消息对象、课表课程对象等）的短时缓存。
 * 深链仅带 id；从通知列表等入口跳转前先 stash，目标屏按 id 读取。
 */
import type { SystemMessageResponse } from '../types/dto';
import type { Course } from '../types/schedule';

const systemById = new Map<string, SystemMessageResponse>();
const courseById = new Map<string, { course: Course; relatedCourses: Course[] }>();

export const routePayloadCache = {
  stashSystemMessage(message: SystemMessageResponse): void {
    systemById.set(message.id, message);
  },

  getSystemMessage(id: string): SystemMessageResponse | undefined {
    return systemById.get(id);
  },

  stashCourseDetail(course: Course, relatedCourses: Course[]): void {
    courseById.set(String(course.id), { course, relatedCourses });
  },

  getCourseDetail(id: string): { course: Course; relatedCourses: Course[] } | undefined {
    return courseById.get(id);
  },

  takeCourseDetail(id: string): { course: Course; relatedCourses: Course[] } | undefined {
    const v = courseById.get(id);
    if (v) courseById.delete(id);
    return v;
  },
};
