/**
 * ID 生成器模块
 * 提供各种实体的 ID 生成功能
 */

/**
 * 生成会话 ID
 * 格式: {date}_{random} (如 2025-12-15_abc123)
 */
export function generateSessionId(): string {
  const now = new Date();
  const date = now.toISOString().slice(0, 10); // YYYY-MM-DD
  const random = Math.random().toString(36).substring(2, 8);
  return `${date}_${random}`;
}

/**
 * 生成消息 ID（降序，最新的在前）
 * 格式: msg_{invertedTimestamp}_{random}
 */
export function generateMessageId(): string {
  const timestamp = Date.now();
  const random = Math.random().toString(36).substring(2, 8);
  // 使用最大时间戳减去当前时间戳，实现降序
  const invertedTimestamp = 9999999999999 - timestamp;
  return `msg_${invertedTimestamp}_${random}`;
}

/**
 * 生成 Part ID（升序，按创建顺序）
 * 格式: part_{timestamp}_{random}
 */
export function generatePartId(): string {
  const timestamp = Date.now();
  const random = Math.random().toString(36).substring(2, 8);
  return `part_${timestamp}_${random}`;
}

/**
 * 生成 Todo ID
 * 格式: todo_{timestamp}_{random}
 */
export function generateTodoId(): string {
  const timestamp = Date.now();
  const random = Math.random().toString(36).substring(2, 8);
  return `todo_${timestamp}_${random}`;
}

/**
 * 从消息 ID 提取时间戳
 */
export function getTimestampFromMessageId(messageId: string): number {
  const match = messageId.match(/^msg_(\d+)_/);
  if (!match) return 0;
  const invertedTimestamp = parseInt(match[1], 10);
  return 9999999999999 - invertedTimestamp;
}

/**
 * 从 Part ID 提取时间戳
 */
export function getTimestampFromPartId(partId: string): number {
  const match = partId.match(/^part_(\d+)_/);
  if (!match) return 0;
  return parseInt(match[1], 10);
}

/**
 * 从会话 ID 提取日期
 */
export function getDateFromSessionId(sessionId: string): string | null {
  const match = sessionId.match(/^(\d{4}-\d{2}-\d{2})_/);
  return match ? match[1] : null;
}

/**
 * 验证会话 ID 格式
 */
export function isValidSessionId(id: string): boolean {
  return /^\d{4}-\d{2}-\d{2}_[a-z0-9]+$/.test(id);
}

/**
 * 验证消息 ID 格式
 */
export function isValidMessageId(id: string): boolean {
  return /^msg_\d+_[a-z0-9]+$/.test(id);
}

/**
 * 验证 Part ID 格式
 */
export function isValidPartId(id: string): boolean {
  return /^part_\d+_[a-z0-9]+$/.test(id);
}
