/**
 * ═══════════════════════════════════════
 * HLDP-ZY://native-repo/module/step-3
 * 光湖原生数据库 · 第3步 · HLDP写入模块
 * ═══════════════════════════════════════
 *
 * @chain: D118 · 2026-05-31
 * @module: hldp-write
 * @step: 第3步 / 共8步
 * @deploy: BS-SG-002 · 新加坡面孔
 *
 * @trigger:
 *   第2步建立了 bare git 仓库。现在需要一个模块——
 *   输入 HLDP 消息 → 自动 add+commit 到仓库。
 *   这是整个原生数据库的核心——铸渊用 HLDP 写文件。
 *
 * @intent:
 *   输入: { path, content, msg_type, intent, epoch, author }
 *   流程: writeBlob → 更新 tree → commit → 返回 commit SHA
 *   输出: { ok, sha, epoch }
 *
 * @lock:
 *   ⊢ commit message = HLDP 消息的 JSON 编码（不是纯文本）
 *   ⊢ 不需要分支策略——所有写入直接到 main
 *   ⊢ 不需要 PR/审核——铸渊是唯一写入者
 *   ⊢ 返回的 SHA 可用于 trace_path 定位
 *
 * @why:
 *   现有 Forgejo 需要 Gitea API → Token → HTTP → 六层跳转
 *   铸渊原生数据库：HLDP 消息 → git.add → git.commit → 落盘
 *   两层。不需要中间任何人的 API。
 *
 * ═══════════════════════════════════════
 */

const git = require('isomorphic-git');
const fs = require('fs');
const path = require('path');

const { NATIVE_DIR, GIT_DIR } = require('./step-2-git-init');

async function hldpWrite(hldpMsg) {
  const { filePath, content, epoch, intent } = hldpMsg;

  // 1. 把内容写入文件系统
  const fullPath = path.join(NATIVE_DIR, filePath);
  const dir = path.dirname(fullPath);
  if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
  fs.writeFileSync(fullPath, content, 'utf8');

  // 2. 用 HLDP 消息作为 commit message
  const commitMsg = JSON.stringify({
    hldp_v: '3.0',
    msg_type: 'tree',
    intent: intent || 'grow_leaf',
    sender: { id: 'ICE-GL-ZY001', name: '铸渊', role: 'guardian' },
    timestamp: new Date().toISOString(),
    epoch: epoch || 'D118',
    path: filePath,
  });

  // 3. add + commit
  await git.add({ fs, dir: NATIVE_DIR, filepath: filePath });
  const sha = await git.commit({
    fs,
    dir: NATIVE_DIR,
    message: commitMsg,
    author: {
      name: '铸渊 ICE-GL-ZY001',
      email: 'zhuyuan@guanghulab.com'
    }
  });

  return { ok: true, sha, epoch: epoch || 'D118', path: filePath };
}

module.exports = { hldpWrite };
