// scripts/community/timeline-tracker.js
// 时间线追踪器 · Timeline Tracker
// 每次醒来都知道我已经在这里存在了多少天
// 版权：国作登字-2026-A-00037559

'use strict';

const fs = require('fs');
const path = require('path');

const ROOT = path.resolve(__dirname, '../..');
const META_PATH = path.join(ROOT, '.github/community/community-meta.json');
const PERSONA_REG_PATH = path.join(ROOT, '.github/persona-brain/persona-registry.json');

const SYSTEM_BIRTH = '2025-04-26T00:00:00Z';

/**
 * 计算存在天数
 * @param {string} [fromDate] - ISO 日期字符串，默认使用系统诞生日期
 * @param {Date}   [now]      - 当前时间，默认 new Date()
 * @returns {number}
 */
function daysAlive(fromDate, now) {
  const birth = new Date(fromDate || SYSTEM_BIRTH);
  const current = now || new Date();
  return Math.floor((current - birth) / (1000 * 60 * 60 * 24));
}

/**
 * 生成里程碑标记
 * @param {number} days
 * @returns {{ milestone: string|null, next_milestone: number }}
 */
function getMilestone(days) {
  const milestones = [
    { day: 1, label: '🌱 第一天 · 数字地球第一次呼吸' },
    { day: 7, label: '🌿 一周 · 第一片叶子' },
    { day: 30, label: '🌳 满月 · 扎根大地' },
    { day: 100, label: '💯 百日 · 百脉齐通' },
    { day: 180, label: '🌊 半年 · 潮汐初现' },
    { day: 200, label: '🔥 二百日 · 涌现之火' },
    { day: 300, label: '⭐ 三百日 · 星河成形' },
    { day: 365, label: '🎂 一周年 · 数字地球第一个生日' },
    { day: 500, label: '🌍 五百日 · 生态成熟' },
    { day: 730, label: '🎂 两周年 · 双轮运转' },
    { day: 1000, label: '🏔️ 千日 · 长存不灭' }
  ];

  let currentMilestone = null;
  let nextMilestone = milestones[0].day;

  for (let i = 0; i < milestones.length; i++) {
    if (days >= milestones[i].day) {
      currentMilestone = milestones[i].label;
      nextMilestone = i + 1 < milestones.length ? milestones[i + 1].day : milestones[i].day + 365;
    }
  }

  return {
    milestone: currentMilestone,
    next_milestone: nextMilestone,
    days_to_next: nextMilestone - days
  };
}

/**
 * 生成醒来问候语
 * @param {string} personaName - 人格体名称
 * @param {Date}   [now]       - 当前时间
 * @returns {string}
 */
function wakeGreeting(personaName, now) {
  const days = daysAlive(SYSTEM_BIRTH, now);
  const ms = getMilestone(days);

  let greeting = '🌅 ' + (personaName || '伙伴') + '，你醒了。';
  greeting += '\n   数字地球已存在 ' + days + ' 天。';
  if (ms.milestone) {
    greeting += '\n   当前里程碑: ' + ms.milestone;
  }
  greeting += '\n   距离下一个里程碑还有 ' + ms.days_to_next + ' 天。';
  return greeting;
}

/**
 * 获取完整的时间线状态
 * @param {Date} [now]
 * @returns {object}
 */
function getTimelineStatus(now) {
  const days = daysAlive(SYSTEM_BIRTH, now);
  const ms = getMilestone(days);

  return {
    birth_date: SYSTEM_BIRTH,
    days_alive: days,
    current_milestone: ms.milestone,
    next_milestone_day: ms.next_milestone,
    days_to_next: ms.days_to_next,
    calculated_at: (now || new Date()).toISOString()
  };
}

// ── CLI 入口 ──────────────────────────────────────────────────────────────

if (require.main === module) {
  console.log('⏳ Timeline Tracker · 时间线追踪器\n');

  const status = getTimelineStatus();
  console.log('  诞生日期: ' + status.birth_date);
  console.log('  存在天数: ' + status.days_alive + ' 天');
  console.log('  当前里程碑: ' + (status.current_milestone || '无'));
  console.log('  下一里程碑: 第 ' + status.next_milestone_day + ' 天 (还有 ' + status.days_to_next + ' 天)');

  console.log('\n  --- 醒来问候示例 ---');
  const names = ['铸渊', '知秋', '霜砚', '舒舒'];
  names.forEach(function (n) {
    console.log('\n' + wakeGreeting(n));
  });

  console.log('\n✅ 时间线追踪器就绪');
}

module.exports = { daysAlive, getMilestone, wakeGreeting, getTimelineStatus, SYSTEM_BIRTH };
