import { createChildLogger } from '../utils/logger.js';
import { verifyChain } from './journal.js';
import { getFact } from './identity.js';
import { deliverMessage } from '../delivery/delivery.js';
import { record as journalRecord } from './journal.js';
const log = createChildLogger('autonomy:audit-verify');
export async function runAuditVerify(tenantId) {
    try {
        const result = await verifyChain(tenantId);
        const valid = result.ok;
        const checked = result.totalEntries;
        const firstBadEntryId = result.brokenAt;
        const reason = result.ok ? undefined : `chain broken at entry ${result.brokenAt}`;
        if (!valid) {
            log.error({ tenantId, firstBadEntryId, reason }, '🛑 AUDIT VERIFY: hash chain broken — possible tampering');
            // Journal the breach itself so it's discoverable in the dashboard
            try {
                await journalRecord({
                    tenantId,
                    kind: 'audit_breach',
                    action: 'hash_chain_invalid',
                    target: firstBadEntryId ?? null,
                    outcome: 'failure',
                    reason: reason ?? 'chain verification failed',
                    metadata: { checked, firstBadEntryId },
                });
            }
            catch { /* non-fatal */ }
            // Alert owner via WhatsApp if configured
            try {
                const ownerPhoneFact = await getFact(tenantId, 'owner.whatsapp');
                if (ownerPhoneFact?.fact_value) {
                    await deliverMessage({
                        tenantId,
                        to: ownerPhoneFact.fact_value,
                        channel: 'whatsapp',
                        message: `🛑 تنبيه أمني: تم اكتشاف تلاعب محتمل في سجل المؤسس.\n\n` +
                            `سلسلة الـ hash تكسرت عند الإدخال ${firstBadEntryId?.slice(0, 8) ?? '?'} — ` +
                            `هذا يعني أن أحدهم ربما عدّل سجلاً قديماً يدوياً في قاعدة البيانات.\n\n` +
                            `الخدمة تستمر طبيعي بس أوصي تتأكد إيش صار. ارجع للوحة العمليات لمراجعة السجل.`,
                    }).catch(() => undefined);
                }
            }
            catch { /* non-fatal */ }
        }
        else {
            // Quiet success — only journal at debug level
            log.debug({ tenantId, checked }, 'audit verify clean');
        }
        return { valid, checked, firstBadEntryId, reason };
    }
    catch (err) {
        const errMsg = err.message;
        log.warn({ tenantId, err: errMsg }, 'audit verify threw');
        return { valid: false, checked: 0, reason: `verify threw: ${errMsg}` };
    }
}
//# sourceMappingURL=audit-verify.js.map