import { and, eq, ilike, or, type SQL } from "drizzle-orm";
import { db } from "@/db";
import { brigades } from "@/db/schema/brigades";
import type { BrigadeHit } from "./types";

/**
 * Wehren-Suche über Name / Ort / PLZ. Nur aktive Wehren. Liefert eine
 * UNGEORDNETE Liste (ETA-Sortierung optional über den Geo-Adapter, falls
 * Standort gesetzt).
 */
export async function searchBrigades(q?: string): Promise<BrigadeHit[]> {
  const conds: SQL[] = [eq(brigades.aktiv, true)];

  if (q && q.trim() !== "") {
    const pattern = `%${q.trim()}%`;
    const textCond = or(
      ilike(brigades.name, pattern),
      ilike(brigades.ort, pattern),
      ilike(brigades.plz, pattern),
    );
    if (textCond) conds.push(textCond);
  }

  const rows = await db
    .select({
      brigadeId: brigades.id,
      name: brigades.name,
      ort: brigades.ort,
      plz: brigades.plz,
    })
    .from(brigades)
    .where(and(...conds));

  return rows.map((r) => ({
    brigadeId: r.brigadeId,
    name: r.name,
    ort: r.ort,
    plz: r.plz,
  }));
}
