import { v4 as uuidv4 } from 'uuid';

/**
 * 用户记忆实体 - 存储用户的长期记忆
 * 用于个性化对话和用户画像
 */
export class UserMemoryEntity {
  id: string;

  /** 用户ID（可以是匿名用户ID） */
  userId: string;

  /** 记忆类型 */
  memoryType: MemoryType;

  /** 记忆内容 */
  content: string;

  /** 记忆的重要性 0-100 */
  importance: number;

  /** 记忆来源（哪次对话提取） */
  sourceConversationId?: string;

  /** 相关移民类别 */
  relatedCategory?: string;

  /** 内容向量 */
  embedding?: number[];

  /** 访问次数（记忆被检索使用） */
  accessCount: number;

  /** 最后访问时间 */
  lastAccessedAt?: Date;

  /** 是否已过期（用户情况已变化） */
  isExpired: boolean;

  createdAt: Date;
  updatedAt: Date;

  private constructor() {}

  static create(params: {
    userId: string;
    memoryType: MemoryType;
    content: string;
    importance?: number;
    sourceConversationId?: string;
    relatedCategory?: string;
  }): UserMemoryEntity {
    const memory = new UserMemoryEntity();
    memory.id = uuidv4();
    memory.userId = params.userId;
    memory.memoryType = params.memoryType;
    memory.content = params.content;
    memory.importance = params.importance ?? 50;
    memory.sourceConversationId = params.sourceConversationId;
    memory.relatedCategory = params.relatedCategory;
    memory.accessCount = 0;
    memory.isExpired = false;
    memory.createdAt = new Date();
    memory.updatedAt = new Date();
    return memory;
  }

  static fromPersistence(data: Partial<UserMemoryEntity>): UserMemoryEntity {
    const memory = new UserMemoryEntity();
    Object.assign(memory, data);
    return memory;
  }

  /**
   * 设置向量
   */
  setEmbedding(embedding: number[]): void {
    this.embedding = embedding;
    this.updatedAt = new Date();
  }

  /**
   * 记录访问
   */
  recordAccess(): void {
    this.accessCount++;
    this.lastAccessedAt = new Date();
  }

  /**
   * 标记为过期
   */
  markAsExpired(): void {
    this.isExpired = true;
    this.updatedAt = new Date();
  }

  /**
   * 更新重要性
   */
  updateImportance(importance: number): void {
    this.importance = Math.max(0, Math.min(100, importance));
    this.updatedAt = new Date();
  }
}

export enum MemoryType {
  // 用户基本信息
  PERSONAL_INFO = 'PERSONAL_INFO',      // 个人信息（年龄、学历等）
  WORK_EXPERIENCE = 'WORK_EXPERIENCE',  // 工作经历
  EDUCATION = 'EDUCATION',              // 教育背景
  LANGUAGE = 'LANGUAGE',                // 语言能力

  // 移民相关
  IMMIGRATION_INTENT = 'IMMIGRATION_INTENT',  // 移民意向
  PREFERRED_CATEGORY = 'PREFERRED_CATEGORY',  // 倾向的移民类别
  ASSESSMENT_RESULT = 'ASSESSMENT_RESULT',    // 评估结果

  // 对话相关
  QUESTION_ASKED = 'QUESTION_ASKED',    // 问过的问题
  CONCERN = 'CONCERN',                  // 关注点/顾虑
  PREFERENCE = 'PREFERENCE',            // 偏好设置

  // 其他
  CUSTOM = 'CUSTOM',                    // 自定义记忆
}
