// dev mode 用的随机用户生成器 — 每次"演示账号进入" 都换一个新身份.
//
// 目的: 让我们能验证 demo 各处 (左屏 label / 我的页 / 消息列表 / 答主头像 / 等等)
// 是否真的接的是 CURRENT_USER, 还是有 hardcoded "白水君" 没换掉.
//
// 生成的 user 字段跟知乎 OAuth /user 返回 shape 一致 — uid / fullname / avatar_path
// / headline / description / gender / 等等. 多加一个 _stats 字段把"关注/被关注/回答数"
// 之类的也带上 (知乎 /user 接口本身不返回这些, 真 OAuth 上线后我们另用 /api/following/list
// 等 endpoint 拉真实数据).

const _MOCK_NAMES = [
  '梅子青', '陈墨笙', '林深时见鹿', '青衫忘川', '夜雨惊鸿', '宋时月', '苏予安',
  '北岛听海', '简书南', '夏至未至', '清水煮鱼', '风过留声', '半山听雨', '南山隐居',
  '木子小生', '雾里看花', '云深不知', '一蓑烟雨', '檐下雨歇', '岁岁安康', '白居不易',
  '林间小路', '青衿一梦',
];

const _MOCK_HEADLINES = [
  '数字媒体硕士在读', '互联网产品设计师', '前端开发, 偶尔写写散文',
  '心理学博士在读, 关注情绪与认知', '互联网内容创作者', '建筑师 / 偶尔摄影',
  '医学院在读 / 大内科方向', 'PMP, 在大厂做项目管理', 'AI 工程师 / 开源贡献者',
  '财经记者, 主跑科技口', '律所合伙人 / 民商法', '高校讲师 / 中国近代史',
  '游戏行业从业者 · 关注 RPG', '插画师 / 数字创作', '独立咖啡师, 喜欢做菜',
  '健身教练 ACE-CPT', '中文系毕业, 现在做新媒体', '会计师事务所审计',
  '产品经理 / 关注 AI 落地', '海外华人 / 工程师',
];

const _MOCK_DESCRIPTIONS = [
  '写一些自己看得懂的字, 也许刚好对你有用.',
  '不擅长长篇大论, 只在我熟悉的话题里说话.',
  '所见即所得, 所写即真心.',
  '把每一篇回答当一次完整的输出.',
  '试着把复杂的事讲简单.',
  '只回答自己真正经历过的问题.',
];

function _pick(list) {
  return list[Math.floor(Math.random() * list.length)];
}
function _randInt(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

// 生成一个全随机的 知乎 /user shape 用户 (带 dev stats), 用做演示账号
function generateRandomMockUser() {
  const fullname = _pick(_MOCK_NAMES);
  const headline = _pick(_MOCK_HEADLINES);
  const description = _pick(_MOCK_DESCRIPTIONS);
  const gender = Math.random() < 0.5 ? 'male' : 'female';
  // 头像用 picsum 拍照随机, seed 跟 name 绑这样切换头像不会闪
  const seed = encodeURIComponent(fullname) + '-' + _randInt(1, 9999);
  const avatar_path = `https://picsum.photos/seed/${seed}/200/200`;
  // hash_id 模拟知乎那种 8 位混合 ID
  const hash_id = Array.from({ length: 8 }, () =>
    '0123456789abcdefghijklmnopqrstuvwxyz'[Math.floor(Math.random() * 36)]
  ).join('');
  // 关注/被关注/回答/点赞 数随机, 范围合理 (知乎普通用户量级)
  const _stats = {
    following:   _randInt(20, 800),
    followers:   _randInt(50, 50000),
    collections: _randInt(0, 30),
    recentViews: _randInt(50, 5000),
    answers:     _randInt(5, 300),
    likes:       _randInt(100, 80000),
  };
  return {
    uid:          _randInt(100000, 9999999),
    hash_id,
    fullname,
    gender,
    headline,
    description,
    avatar_path,
    url:          `https://www.zhihu.com/people/${hash_id}`,
    email:        '',
    phone_no:     '',
    access_token: '',
    _stats,
    _devBypass:   true,
    _fetchedAt:   Date.now(),
  };
}

// ─── 消息列表用的随机内容池 + 生成器 ──────────────────────────
// 用做 messages.jsx 的"过去评论 / 点赞 / 收藏 / 订阅" 列表内容. 这样不同账号
// 登录看到的都是不一样的中性 mock 数据, 不会出现特定真实事件 / 真人名字.

const _MOCK_OTHER_NAMES = [
  '苏亦可', 'Empyrean', '林之夏', '青衿', 'Mercer', '柚子茶', 'Yang.',
  '小满未满', '不知名网友', 'Akira', 'Lvy', '风过留声', '清水煮鱼',
  '观海听涛', '苏怀瑾', 'Ethan', '李知遥', '0419', '木子默', 'Helena',
  '夜行船', 'Riku',
];

const _MOCK_QTITLES = [
  '如何看待最近大模型在推理任务上的进展?',
  '在大厂工作 5 年的人, 现在状态怎么样?',
  '为什么有些人喝咖啡完全没用?',
  'Apple Vision Pro 现在二手价多少合理?',
  '坚持冥想一年后, 你最大的变化是什么?',
  '怎么选择适合自己的护肤品?',
  '北漂十年, 你后悔过吗?',
  '为什么有些 AI 工具用一周就放弃了?',
  '考研失败后, 你是怎么走出来的?',
  '关于"35 岁危机", 真实情况到底是?',
  '硅谷工程师跟国内大厂工程师, 工作节奏差异在哪?',
  '为什么 Pilates 突然这么火?',
  '现在还有必要学法语吗?',
  '产后第一年, 妈妈们最需要的支持是什么?',
  '如何评价最新一季的脱口秀大会?',
];

const _MOCK_CMT_BODIES = [
  '这点我之前没想过, 学到了. 不过最后那段证据链能再展开讲讲吗?',
  '同意大方向, 但我自己的经验有点不一样 — 我那次反而是反过来的.',
  '关键的不是数据本身, 是数据之间的关系. 你这个角度挺有意思.',
  '我也是过来人, 没那么乐观. 中间踩的坑你下次可能也会踩.',
  '能不能补一下源链接? 我顺手搜了一下没找到原始数据.',
  '我反复读了三遍, 第二段的逻辑跟第四段其实是矛盾的, 是我理解错了吗?',
  '保存了, 等周末有空认真看完再回复.',
  '这种角度真的少见. 我自己写过类似的东西, 但你切得更深.',
];

const _MOCK_SUBLINES = [
  '理性的悲观主义者', '中文系毕业', '互联网产品经理', '前端开发 / 偶尔写诗',
  '心理咨询师 / CBT 方向', '健身教练 ACE-CPT', '建筑师 · 城市观察',
  '法考通过, 半小白律师', '互联网内容编辑', '硅谷工程师 5 年',
  '医学博士在读', '财经记者', null, null, null,
];

// 颜色池 (跟 messages.jsx 原有头像色风格一致)
const _MOCK_AVATAR_COLORS = ['#6A8FC5', '#C58A6F', '#7C6BFF', '#7DB46C', '#E08A9A', '#5C7AA8', '#D89A52', '#A1AAB5', '#FFB37E', '#9CB1C7'];

// 把整组消息列表 mock 出来 — 8 个数组, 对应 messages.jsx 里的 4 类 × 现实/镜像 两边
function generateMockMessageLists() {
  const me = (typeof CURRENT_USER !== 'undefined' && CURRENT_USER.name) || '你';
  const dates = ['今天', '昨天', '前天', '04-29', '04-20', '04-17', '02-18', '2025-10-17', '2025-01-10'];
  // 评论 — 别人回复你
  const pastCmt = Array.from({ length: 3 }, () => {
    const stats = `${_randInt(50, 2000)} 赞同 · ${_randInt(0, 200)} 评论`;
    return {
      name:    _pick(_MOCK_OTHER_NAMES),
      date:    _pick(dates),
      avatar:  _pick(_MOCK_AVATAR_COLORS),
      head:    '回复了回答下你的评论：',
      body:    `${me}：${_pick(_MOCK_CMT_BODIES)}`,
      qTitle:  _pick(_MOCK_QTITLES),
      stats,
    };
  });
  // 镜像评论
  const mirrorCmt = Array.from({ length: 2 }, () => ({
    name:    '@镜像 · ' + _pick(_MOCK_OTHER_NAMES),
    date:    _pick(['今天', '昨天']),
    avatar:  _pick(_MOCK_AVATAR_COLORS),
    head:    '在你的镜像回答下留下评论：',
    headTag: '镜像内容',
    body:    `镜像 AI：${_pick(_MOCK_CMT_BODIES)}`,
    qTitle:  _pick(_MOCK_QTITLES),
    stats:   `镜像回答 · ${_randInt(100, 1500)} 赞同 · ${_randInt(5, 80)} 评论`,
  }));
  // 点赞
  const pastLike = Array.from({ length: 4 }, () => ({
    name:      _pick(_MOCK_OTHER_NAMES),
    date:      _pick(dates),
    avatar:    _pick(_MOCK_AVATAR_COLORS),
    body:      '赞同了你的回答',
    qTitle:    _pick(_MOCK_QTITLES),
    stats:     `${_randInt(30, 800)} 赞同 · ${_randInt(0, 80)} 喜欢 · ${_randInt(0, 60)} 评论`,
    thumb:     Math.random() < 0.4,
    thanksBtn: '感谢',
  }));
  const mirrorLike = Array.from({ length: 2 }, () => ({
    name:      '@镜像 · ' + _pick(_MOCK_OTHER_NAMES),
    date:      _pick(['今天', '昨天']),
    avatar:    _pick(_MOCK_AVATAR_COLORS),
    body:      '赞同了你的镜像回答',
    qTitle:    _pick(_MOCK_QTITLES),
    stats:     `镜像 · ${_randInt(100, 500)} 赞同 · ${_randInt(5, 50)} 喜欢`,
    thanksBtn: '感谢',
  }));
  // 收藏
  const pastFav = Array.from({ length: 4 }, () => ({
    name:    Math.random() < 0.7 ? '知乎用户' : _pick(_MOCK_OTHER_NAMES),
    date:    _pick(dates),
    body:    '收藏了你的回答至' + (Math.random() < 0.5 ? '私密收藏夹' : '公开收藏夹《' + _pick(['长读清单', '想读', '后浪精选', '认真读']) + '》'),
    qTitle:  _pick(_MOCK_QTITLES),
    stats:   `${_randInt(30, 800)} 赞同 · ${_randInt(0, 50)} 喜欢 · ${_randInt(0, 60)} 评论`,
    thumb:   Math.random() < 0.3,
  }));
  const mirrorFav = Array.from({ length: 2 }, () => ({
    name:    '@镜像 · ' + _pick(_MOCK_OTHER_NAMES),
    date:    _pick(['今天', '昨天']),
    body:    '收藏了你的镜像回答至' + (Math.random() < 0.5 ? '收藏夹《镜像精选》' : '公开收藏夹'),
    qTitle:  _pick(_MOCK_QTITLES),
    stats:   `镜像 · ${_randInt(50, 500)} 赞同 · ${_randInt(0, 40)} 喜欢`,
  }));
  // 订阅
  const pastSub = Array.from({ length: 6 + Math.floor(Math.random() * 3) }, () => ({
    name:         _pick(_MOCK_OTHER_NAMES),
    date:         _pick(dates),
    subline:      _pick(_MOCK_SUBLINES),
    followAction: Math.random() < 0.6 ? '回关' : '关注',
    verified:     Math.random() < 0.15,
  }));
  const mirrorSub = Array.from({ length: 3 }, () => ({
    name:         '@镜像 · ' + _pick(_MOCK_OTHER_NAMES),
    date:         _pick(['今天', '昨天']),
    subline:      '订阅了你的「镜像答主」',
    followAction: '回订阅',
  }));
  return { pastCmt, mirrorCmt, pastLike, mirrorLike, pastFav, mirrorFav, pastSub, mirrorSub };
}

Object.assign(window, { generateRandomMockUser, generateMockMessageLists });
