/**
 * src/analytics/reports.ts
 * مولد التقارير — Report generator (daily/weekly summaries in markdown)
 */
import { getDailyUsage, getTenantAnalytics } from './tracker.js';
import { formatHijri } from '../arabic/hijri.js';
import { supabase } from '../utils/supabase.js';
import { createChildLogger } from '../utils/logger.js';
const log = createChildLogger('analytics:reports');
// ─── Daily Report ───────────────────────────────────────────────────
export async function generateDailyReport(tenantId) {
    const today = new Date();
    const dateStr = today.toISOString().slice(0, 10);
    const hijriStr = formatHijri(today, 'ar');
    const usage = await getDailyUsage(tenantId, dateStr);
    // Get tenant name
    const { data: tenant } = await supabase
        .from('tenants')
        .select('name')
        .eq('id', tenantId)
        .single();
    const tenantName = tenant?.name ?? tenantId;
    // New customers today
    const { count: newCustomers } = await supabase
        .from('customers')
        .select('*', { count: 'exact', head: true })
        .eq('tenant_id', tenantId)
        .gte('created_at', `${dateStr}T00:00:00`);
    if (!usage) {
        return [
            `# 📊 التقرير اليومي — ${tenantName}`,
            `**${dateStr}** | ${hijriStr}`,
            '',
            '> لا توجد بيانات لهذا اليوم.',
        ].join('\n');
    }
    const totalMessages = usage.messagesIn + usage.messagesOut;
    return [
        `# 📊 التقرير اليومي — ${tenantName}`,
        `**${dateStr}** | ${hijriStr}`,
        '',
        '## الرسائل',
        `| البند | القيمة |`,
        `|-------|--------|`,
        `| الواردة | ${usage.messagesIn} |`,
        `| الصادرة | ${usage.messagesOut} |`,
        `| الإجمالي | ${totalMessages} |`,
        '',
        '## العملاء',
        `- عملاء جدد اليوم: **${newCustomers ?? 0}**`,
        `- عملاء نشطون: **${usage.uniqueCustomers}**`,
        '',
        '## التكاليف',
        `| البند | القيمة |`,
        `|-------|--------|`,
        `| التوكنز (إدخال) | ${usage.tokensIn.toLocaleString()} |`,
        `| التوكنز (إخراج) | ${usage.tokensOut.toLocaleString()} |`,
        `| التكلفة الإجمالية | $${usage.costUsd.toFixed(4)} |`,
        '',
        '## الأداء',
        `- متوسط وقت الاستجابة: **${usage.avgResponseTimeMs}ms**`,
        '',
        '---',
        `_تم إنشاء التقرير تلقائياً بواسطة المؤسس_`,
    ].join('\n');
}
// ─── Weekly Report ──────────────────────────────────────────────────
export async function generateWeeklyReport(tenantId) {
    const today = new Date();
    const weekAgo = new Date(today);
    weekAgo.setDate(weekAgo.getDate() - 7);
    const fromDate = weekAgo.toISOString().slice(0, 10);
    const toDate = today.toISOString().slice(0, 10);
    // Get tenant name
    const { data: tenant } = await supabase
        .from('tenants')
        .select('name')
        .eq('id', tenantId)
        .single();
    const tenantName = tenant?.name ?? tenantId;
    const analytics = await getTenantAnalytics(tenantId, fromDate, toDate);
    // Previous week for comparison
    const twoWeeksAgo = new Date(weekAgo);
    twoWeeksAgo.setDate(twoWeeksAgo.getDate() - 7);
    const prevFrom = twoWeeksAgo.toISOString().slice(0, 10);
    const prevTo = weekAgo.toISOString().slice(0, 10);
    const prevAnalytics = await getTenantAnalytics(tenantId, prevFrom, prevTo);
    // Trends
    const msgTrend = calcTrend(analytics.totalMessages, prevAnalytics.totalMessages);
    const costTrend = calcTrend(analytics.totalCostUsd, prevAnalytics.totalCostUsd);
    const rtTrend = calcTrend(analytics.avgResponseTimeMs, prevAnalytics.avgResponseTimeMs);
    // Daily chart (text-based)
    const maxMsg = Math.max(...analytics.dailyBreakdown.map(d => d.messagesIn + d.messagesOut), 1);
    const chart = analytics.dailyBreakdown.map(d => {
        const total = d.messagesIn + d.messagesOut;
        const bar = '█'.repeat(Math.round((total / maxMsg) * 20));
        const dayName = new Date(d.date).toLocaleDateString('ar-SA', { weekday: 'short' });
        return `${dayName} ${d.date.slice(5)} | ${bar} ${total}`;
    }).join('\n');
    return [
        `# 📈 التقرير الأسبوعي — ${tenantName}`,
        `**${fromDate}** → **${toDate}**`,
        '',
        '## ملخص الأسبوع',
        `| البند | هذا الأسبوع | الأسبوع الماضي | التغيير |`,
        `|-------|-------------|----------------|---------|`,
        `| الرسائل | ${analytics.totalMessages} | ${prevAnalytics.totalMessages} | ${msgTrend} |`,
        `| التكلفة | $${analytics.totalCostUsd.toFixed(2)} | $${prevAnalytics.totalCostUsd.toFixed(2)} | ${costTrend} |`,
        `| وقت الاستجابة | ${analytics.avgResponseTimeMs}ms | ${prevAnalytics.avgResponseTimeMs}ms | ${rtTrend} |`,
        `| العملاء | ${analytics.uniqueCustomers} | ${prevAnalytics.uniqueCustomers} | — |`,
        '',
        '## النشاط اليومي',
        '```',
        chart || 'لا توجد بيانات',
        '```',
        '',
        '## النماذج المستخدمة',
        ...(analytics.topModels.length > 0
            ? [
                `| النموذج | عدد الاستخدام | التكلفة |`,
                `|---------|--------------|---------|`,
                ...analytics.topModels.map(m => `| ${m.model} | ${m.count} | $${m.cost.toFixed(4)} |`),
            ]
            : ['_لا توجد بيانات_']),
        '',
        '## تفصيل الرسائل',
        `- واردة: **${analytics.totalInbound}**`,
        `- صادرة: **${analytics.totalOutbound}**`,
        `- التوكنز: **${(analytics.totalTokensIn + analytics.totalTokensOut).toLocaleString()}**`,
        '',
        '---',
        `_تم إنشاء التقرير تلقائياً بواسطة المؤسس_`,
    ].join('\n');
}
// ─── Helpers ────────────────────────────────────────────────────────
function calcTrend(current, previous) {
    if (previous === 0)
        return current > 0 ? '🆕 جديد' : '—';
    const pct = Math.round(((current - previous) / previous) * 100);
    if (pct > 0)
        return `📈 +${pct}%`;
    if (pct < 0)
        return `📉 ${pct}%`;
    return '➡️ ثابت';
}
//# sourceMappingURL=reports.js.map