/**
 * Catalog shared predicates — single source of truth for deal-visibility states
 * and reusable WHERE-clause builders across catalog slices.
 */

import { type SQL, eq, exists, inArray, sql } from 'drizzle-orm';
import { deals, vendors } from '@/server/db/schema.js';

/**
 * Vendor account states whose deals are publicly visible.
 * Consolidates duplicates across db/queries — import from here, not from individual query files.
 */
export const PUBLIC_VENDOR_STATES = ['ACTIVE', 'VETERAN'] as const;
export type PublicVendorState = (typeof PUBLIC_VENDOR_STATES)[number];

/** Builds the public-facing visibility predicate (active vendor account state). */
export function dealsVisibleWhere(): SQL {
  return exists(
    sql`SELECT 1 FROM ${vendors} WHERE ${eq(vendors.id, deals.vendorId)} AND ${inArray(vendors.accountState, [...PUBLIC_VENDOR_STATES])}`,
  );
}

/** No-op predicate for admin queries (all deals visible). */
export function adminAllWhere(): SQL {
  return sql`true`;
}

/** Filters to deals owned by a specific vendor. */
export function vendorOwnedWhere(vendorId: string): SQL {
  return sql`${deals.vendorId} = ${vendorId}`;
}
