/**
 * src/agent/memory.ts
 * مدير ذاكرة العملاء — حفظ واسترجاع سجلات العملاء واليوميات
 */
import { createChildLogger } from '../utils/logger.js';
import { readWorkspaceFile, writeWorkspaceFile, ensureDirectory, } from '../tenants/workspace.js';
const log = createChildLogger('agent:memory');
// ─── Customer Memory ─────────────────────────────────────────────────
/**
 * قراءة ملف ذاكرة العميل
 * المسار: CUSTOMERS/{customerId}.md
 */
export async function getCustomerMemory(tenantId, customerId) {
    try {
        const content = await readWorkspaceFile(tenantId, `CUSTOMERS/${customerId}.md`);
        return content;
    }
    catch (err) {
        log.debug({ tenantId, customerId, error: err instanceof Error ? err.message : String(err) }, 'No customer memory found');
        return null;
    }
}
/**
 * تحديث ذاكرة العميل — إضافة معلومات جديدة
 * ينشئ الملف إذا لم يكن موجوداً
 */
export async function updateCustomerMemory(tenantId, customerId, newInfo, customerName) {
    await ensureDirectory(tenantId, 'CUSTOMERS');
    const existing = await getCustomerMemory(tenantId, customerId);
    const timestamp = new Date().toISOString();
    let content;
    if (existing) {
        // إضافة المعلومات الجديدة
        content = `${existing.trimEnd()}\n\n---\n📝 ${timestamp}\n${newInfo}`;
    }
    else {
        // إنشاء ملف جديد
        content = `# عميل: ${customerName ?? customerId}\n\nتاريخ الإنشاء: ${timestamp}\n\n---\n📝 ${timestamp}\n${newInfo}`;
    }
    await writeWorkspaceFile(tenantId, `CUSTOMERS/${customerId}.md`, content);
    log.debug({ tenantId, customerId }, 'Customer memory updated');
}
// ─── Daily Logs ──────────────────────────────────────────────────────
/**
 * قراءة سجل اليوم
 * المسار: LOGS/{date}.md
 */
export async function getDailyLog(tenantId, date) {
    const dateStr = date ?? new Date().toISOString().split('T')[0];
    try {
        return await readWorkspaceFile(tenantId, `LOGS/${dateStr}.md`);
    }
    catch {
        return null;
    }
}
/**
 * إضافة سطر إلى سجل اليوم
 */
export async function appendDailyLog(tenantId, entry) {
    await ensureDirectory(tenantId, 'LOGS');
    const dateStr = new Date().toISOString().split('T')[0];
    const timestamp = new Date().toLocaleTimeString('ar-SA', { hour: '2-digit', minute: '2-digit' });
    const logLine = `- [${timestamp}] ${entry}`;
    const existing = await getDailyLog(tenantId, dateStr);
    let content;
    if (existing) {
        content = `${existing.trimEnd()}\n${logLine}`;
    }
    else {
        content = `# سجل ${dateStr}\n\n${logLine}`;
    }
    await writeWorkspaceFile(tenantId, `LOGS/${dateStr}.md`, content);
}
// ─── Memory Extraction ───────────────────────────────────────────────
/**
 * استخراج معلومات مهمة من المحادثة لحفظها في الذاكرة
 * يحلل الرد والرسالة لاستخراج: اسم، تفضيل، طلب متكرر، إلخ
 */
export function extractMemoryWorthy(customerMessage, agentResponse) {
    const memories = [];
    // استخراج الاسم إذا ذكر
    const namePatterns = [
        /(?:اسمي|أنا)\s+([^\s,.،]+(?:\s+[^\s,.،]+)?)/,
        /(?:my name is|i'm|i am)\s+([^\s,.]+(?:\s+[^\s,.]+)?)/i,
    ];
    for (const pattern of namePatterns) {
        const match = customerMessage.match(pattern);
        if (match?.[1]) {
            memories.push(`الاسم: ${match[1]}`);
        }
    }
    // استخراج رقم هاتف بديل
    const phoneMatch = customerMessage.match(/(?:رقمي|تواصل معي على|اتصل على)\s*[:.]?\s*(\+?\d[\d\s-]{8,})/);
    if (phoneMatch?.[1]) {
        memories.push(`رقم بديل: ${phoneMatch[1].trim()}`);
    }
    // إذا فيه شكوى
    const complaintKeywords = ['مشكلة', 'شكوى', 'زعلان', 'مو راضي', 'سيء', 'complaint', 'problem'];
    if (complaintKeywords.some(k => customerMessage.toLowerCase().includes(k))) {
        memories.push(`شكوى: ${customerMessage.slice(0, 100)}`);
    }
    return memories.length > 0 ? memories.join('\n') : null;
}
//# sourceMappingURL=memory.js.map