import type { Supplier } from "@/lib/mpc-types";
import prelaunchPublicSupplierIds from "@/data/prelaunch-public-supplier-ids.json";

const prelaunchPublicSupplierIdSet = new Set<string>(prelaunchPublicSupplierIds);

const safeString = (value: unknown) => (typeof value === "string" ? value : "");

export function isRetiredPublicSupplier(listing: Pick<Supplier, "id" | "name" | "slug" | "description" | "subcategory">) {
  const text = `${listing.id || ""} ${listing.name || ""} ${listing.slug || ""} ${listing.description || ""} ${listing.subcategory || ""}`.toLowerCase();
  return /(^|\s)william($|\s)|business listing request for william|wood,? ice & braai · marloth|mpc local listing william/.test(text);
}

export function publicSupplierIsVisible(listing: Supplier) {
  return listing.status === "live" && prelaunchPublicSupplierIdSet.has(listing.id) && !isRetiredPublicSupplier(listing);
}

export function publicSupplierForRender(listing: Supplier): Supplier {
  const safe = {
    id: listing.id,
    name: listing.name,
    slug: listing.slug,
    category: listing.category,
    subcategory: listing.subcategory,
    package: listing.package,
    status: listing.status,
    mpcCode: listing.mpcCode,
    description: listing.description,
    serviceArea: listing.serviceArea,
    services: Array.isArray(listing.services) ? listing.services.slice(0, 20) : [],
    openLabel: listing.openLabel,
    deliveryLabel: safeString(listing.deliveryLabel),
    paymentOptions: listing.paymentOptions,
    whatsappNumber: listing.whatsappNumber,
    phoneNumber: listing.phoneNumber,
    email: safeString(listing.email),
    websiteUrl: safeString((listing as any).websiteUrl),
    bookingUrl: safeString((listing as any).bookingUrl),
    seoTitle: safeString((listing as any).seoTitle),
    seoDescription: safeString((listing as any).seoDescription),
    mapUrl: listing.mapUrl,
    imageSrc: listing.imageSrc,
    lastVerified: listing.lastVerified,
    supplierResponsibilityAccepted: Boolean(listing.supplierResponsibilityAccepted),
    sortOrder: Number.isFinite(listing.sortOrder) ? listing.sortOrder : 999,
    contactName: safeString((listing as any).contactName),
    contactEmail: safeString((listing as any).contactEmail),
    contactWhatsapp: safeString((listing as any).contactWhatsapp),
    internalNotes: safeString((listing as any).internalNotes),
  } as Supplier;
  delete (safe as any).lastVerified;
  return safe;
}

export function publicSuppliersForRender(listings: Supplier[]): Supplier[] {
  return (listings || []).filter(publicSupplierIsVisible).map(publicSupplierForRender);
}
