'use strict'; const fs = require('fs'); const path = require('path'); const crypto = require('crypto'); const logPath = path.join(__dirname, '..', 'data', 'zup-actions.json'); function readLog() { try { const parsed = JSON.parse(fs.readFileSync(logPath, 'utf8')); return Array.isArray(parsed) ? parsed : []; } catch (err) { return []; } } function writeLog(entries) { fs.mkdirSync(path.dirname(logPath), { recursive: true }); fs.writeFileSync(logPath, JSON.stringify(entries, null, 2), 'utf8'); } function add({ actor, target, targetFio, action }) { const entry = { id: crypto.randomBytes(8).toString('hex'), ts: Date.now(), actor: String(actor || ''), target: String(target || ''), targetFio: String(targetFio || ''), action: action === 'unblock' ? 'unblock' : 'block' }; const entries = readLog(); entries.push(entry); writeLog(entries); return entry; } function forTarget(login) { const needle = String(login || '').toLowerCase(); return readLog() .filter((e) => String(e.target).toLowerCase() === needle) .sort((a, b) => (b.ts || 0) - (a.ts || 0)); } module.exports = { add, forTarget, logPath };