import { systemConfig } from '@/server/db/schema';
import { captureCaught } from '@/server/observability/capture.server';
import type { KnowledgeAdapter, KnowledgeChunk } from './types';
import type { AdapterContext } from '@/server/support/types';

function parseIncidents(raw: string): unknown[] {
  try {
    const parsed = JSON.parse(raw) as unknown;
    return Array.isArray(parsed) ? parsed : [parsed];
  } catch (err) {
    captureCaught(err, { scope: 'support.adapters.platform-status.parseIncidents' });
    return [{ raw }];
  }
}

const LABEL = 'סטטוס פלטפורמה';

export const platformStatusAdapter: KnowledgeAdapter = {
  id: 'platform-status',
  label: LABEL,
  description: 'תקלות וסטטוס תפעולי של הפלטפורמה',
  async fetch(ctx: AdapterContext): Promise<KnowledgeChunk> {
    const base: KnowledgeChunk = {
      adapterId: 'platform-status',
      label: LABEL,
      data: {},
      summary: '',
    };

    try {
      const statusRows = await ctx.db
        .select({ key: systemConfig.key, value: systemConfig.value })
        .from(systemConfig);

      const incidents = statusRows.find((r) => r.key === 'platform_incidents')?.value ?? null;
      const status = statusRows.find((r) => r.key === 'platform_status')?.value ?? null;

      const parsedIncidents = incidents ? parseIncidents(incidents) : [];

      const summary =
        parsedIncidents.length > 0
          ? `${parsedIncidents.length} אירועים פעילים/אחרונים`
          : status
            ? `סטטוס: ${status}`
            : 'אין תקלות מדווחות';

      return {
        ...base,
        data: {
          status,
          incidents: parsedIncidents,
          incidentCount: parsedIncidents.length,
        },
        summary,
      };
    } catch (err) {
      return { ...base, error: String(err) };
    }
  },
};
