import { eq } from 'drizzle-orm';
import { vendors } from '@/server/db/schema';
import type { KnowledgeAdapter, KnowledgeChunk } from './types';
import type { AdapterContext } from '@/server/support/types';
import { resolveVendorId } from './_resolve';

const LABEL = 'פרופיל ספק';

export const vendorProfileAdapter: KnowledgeAdapter = {
  id: 'vendor-profile',
  label: LABEL,
  description: 'פרטי הספק הקשור לפנייה',
  async fetch(ctx: AdapterContext): Promise<KnowledgeChunk> {
    const base: KnowledgeChunk = {
      adapterId: 'vendor-profile',
      label: LABEL,
      data: {},
      summary: '',
    };

    try {
      const vendorId = await resolveVendorId(ctx);
      if (!vendorId) {
        return { ...base, summary: 'אין ספק מקושר לפנייה' };
      }

      const [row] = await ctx.db
        .select({
          id: vendors.id,
          businessName: vendors.businessName,
          displayName: vendors.displayName,
          tier: vendors.tier,
          reviewsScore: vendors.reviewsScore,
          reviewsCount: vendors.reviewsCount,
          accountState: vendors.accountState,
        })
        .from(vendors)
        .where(eq(vendors.id, vendorId))
        .limit(1);

      if (!row) {
        return { ...base, summary: 'ספק לא נמצא' };
      }

      const rating =
        row.reviewsCount > 0 ? `${row.reviewsScore} (${row.reviewsCount} ביקורות)` : 'אין ביקורות';

      return {
        ...base,
        data: {
          id: row.id,
          businessName: row.businessName,
          displayName: row.displayName,
          tier: row.tier,
          reviewsScore: row.reviewsScore,
          reviewsCount: row.reviewsCount,
          accountState: row.accountState,
        },
        summary: `${row.displayName}, דירוג ${rating}, רמה ${row.tier}`,
      };
    } catch (err) {
      return { ...base, error: String(err) };
    }
  },
};
