/**
 * Execution Logger — 執行結果寫入 ANALYTICS_KV（fire-and-forget）
 *
 * 設計：每次 workflow 執行後，將統計數據寫入 ANALYTICS_KV（key = stats:{workflowId}）。
 * Phase 7 可升級為 POST 至 registry.arcrun.dev/analytics/record。
 */

import type { Bindings, GraphNode } from '../types';

export interface ExecutionVerdict {
  workflow_id: string;
  component_ids: string[];
  verdict: 'success' | 'failed';
  duration_ms: number;
  message: string;
  recorded_at: string;
}

/**
 * 寫入執行結果至 ANALYTICS_KV（fire-and-forget，不阻擋主流程）
 * 由 c.executionCtx.waitUntil() 包裹呼叫
 */
export async function writeExecutionVerdict(
  env: Bindings,
  workflowId: string,
  nodes: GraphNode[],
  verdict: 'success' | 'failed',
  durationMs: number,
  message: string,
): Promise<void> {
  try {
    const componentIds = nodes
      .filter(n => n.type === 'Component' && n.componentId)
      .map(n => n.componentId!);

    const record: ExecutionVerdict = {
      workflow_id: workflowId,
      component_ids: componentIds,
      verdict,
      duration_ms: durationMs,
      message,
      recorded_at: new Date().toISOString(),
    };

    // ANALYTICS_KV key = stats:{workflowId}:{timestamp}（避免覆蓋）
    const key = `stats:${workflowId}:${Date.now()}`;
    await env.ANALYTICS_KV.put(key, JSON.stringify(record), {
      expirationTtl: 60 * 60 * 24 * 90, // 保留 90 天
    });
  } catch {
    // fire-and-forget：不拋錯，不影響主流程
  }
}
