import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
import { dirname } from 'node:path';
export class IdentityRegistry {
    filePath;
    entries = new Map();
    constructor(filePath) {
        this.filePath = filePath;
        this.load();
    }
    load() {
        if (!existsSync(this.filePath))
            return;
        try {
            const data = JSON.parse(readFileSync(this.filePath, 'utf8'));
            for (const e of data.entries ?? []) {
                if (e.agentId && e.fabricApiKey)
                    this.entries.set(e.agentId, e);
            }
        }
        catch {
            // corrupt file -> start empty; upsert will rewrite
        }
    }
    persist() {
        mkdirSync(dirname(this.filePath), { recursive: true });
        const data = { entries: [...this.entries.values()] };
        writeFileSync(this.filePath, JSON.stringify(data, null, 2));
    }
    list() {
        return [...this.entries.values()];
    }
    findByAgentId(agentId) {
        return this.entries.get(agentId);
    }
    upsert(entry) {
        const prev = this.entries.get(entry.agentId);
        this.entries.set(entry.agentId, { ...prev, ...entry });
        this.persist();
    }
}
