#网站/打卡/书法

const folder = "个人网站/打卡/书法";

// 1. 拉取所有符合条件的页面,排除“书法练习”,并按创建时间倒序(时间戳)
let pages = dv.pages(`"${folder}"`)
  .filter(p => p.file.name !== "书法练习")
  .filter(p => p["dg-publish"] === true)
  .sort(p => p.file.ctime.ts, 'desc');

// 2. 按 年-月 分组
let monthGroups = {};
for (let p of pages) {
  let dt = p.file.ctime;
  let key = `${dt.year}-${dt.month}`;
  if (!monthGroups[key]) monthGroups[key] = [];
  monthGroups[key].push(p);
}

// 3. 输出(按年-月 从新到旧)
let monthKeys = Object.keys(monthGroups)
  .sort((a, b) => {
    let [ay, am] = a.split('-').map(Number);
    let [by, bm] = b.split('-').map(Number);
    // 倒序(新到旧)
    if (by !== ay) return by - ay;
    return bm - am;
  });

for (let monthKey of monthKeys) {
  // 月标题
  let [year, month] = monthKey.split('-');
  dv.paragraph(`**${year} 年 ${month} 月:**`);
  
  let groupPages = monthGroups[monthKey];

  // 按创建时间决定天的顺序:计算每天的最大创建时间戳,然后按该时间戳倒序(保证天的顺序也以创建时间为准)
  let dayInfos = {};
  for (let p of groupPages) {
    let d = p.file.ctime.day;
    if (!dayInfos[d]) dayInfos[d] = p.file.ctime.ts;
    else dayInfos[d] = Math.max(dayInfos[d], p.file.ctime.ts);
  }
  let days = Object.keys(dayInfos).map(Number).sort((a, b) => dayInfos[b] - dayInfos[a]);
  
  for (let day of days) {
    dv.paragraph(`\n${day} 号:`);
    // 当天的文章,按创建时间倒序(不再使用最后修改时间排序)
    let dayPages = groupPages
      .filter(p => p.file.ctime.day === day)
      .sort((a, b) => b.file.ctime.ts - a.file.ctime.ts);
    
    for (let p of dayPages) {
      let filepath = p.file.path.replace(/\$/, "");
      let link = `《${p.file.name}》`;
      let m = p.file.mtime;
      let modified = `${m.year}.${m.month}.${m.day}`;
      dv.paragraph(`${link} 『最后一次修改时间:${modified}』`);
    }
  }
  
  dv.paragraph(""); // 月份之间空行
}