import PocketBase from "pocketbase"; // ── Singleton Client (Server + Client) ──────────────────────────────────────── const PB_URL = typeof window === "undefined" ? (process.env.PB_INTERNAL_URL ?? "http://pocketbase:8090") : (process.env.NEXT_PUBLIC_PB_URL ?? "http://localhost:8090"); export const pb = new PocketBase(PB_URL); pb.autoCancellation(false); // ── Typen ───────────────────────────────────────────────────────────────────── export interface Kennzeichen { id: string; code: string; name: string; derivation: string; region: string; note: string; active: boolean; country: string; lat: number | null; lon: number | null; population: number | null; points: number | null; alt_code: string; } export interface Diplomatenkennzeichen { id: string; code: string; country: string; organisation: string; type: "embassy" | "consulate" | "io"; city: string; note: string; base_country: string; } export interface BlogPost { id: string; slug: string; titel: string; inhalt: string; date: string; tags: string[]; } export interface Gesehen { id: string; kennzeichen_code: string; kennzeichen_name: string; land: string; datum: string; } // ── Hilfsfunktionen ─────────────────────────────────────────────────────────── export const COUNTRY_LABELS: Record = { germany: "Deutschland", austria: "Österreich", switzerland: "Schweiz", luxembourg: "Luxemburg", poland: "Polen", norway: "Norwegen", uk: "Vereinigtes Königreich", italy: "Italien", france: "Frankreich", greece: "Griechenland", slovakia: "Slowakei", croatia: "Kroatien", ukraine: "Ukraine", serbia: "Serbien", russia: "Russland", belarus: "Belarus", montenegro: "Montenegro", northmacedonia: "Nordmazedonien", ireland: "Irland", bulgaria: "Bulgarien", romania: "Rumänien", moldova: "Moldawien", czechia: "Tschechien", turkey: "Türkei", kosovo: "Kosovo", slovenia: "Slowenien", }; export const COUNTRY_FLAGS: Record = { germany: "🇩🇪", austria: "🇦🇹", switzerland: "🇨🇭", luxembourg: "🇱🇺", poland: "🇵🇱", norway: "🇳🇴", uk: "🇬🇧", italy: "🇮🇹", france: "🇫🇷", greece: "🇬🇷", slovakia: "🇸🇰", croatia: "🇭🇷", ukraine: "🇺🇦", serbia: "🇷🇸", russia: "🇷🇺", belarus: "🇧🇾", montenegro: "🇲🇪", northmacedonia: "🇲🇰", ireland: "🇮🇪", bulgaria: "🇧🇬", romania: "🇷🇴", moldova: "🇲🇩", czechia: "🇨🇿", turkey: "🇹🇷", kosovo: "🇽🇰", slovenia: "🇸🇮", }; export async function getKennzeichen(opts?: { country?: string; search?: string; page?: number; perPage?: number; activeOnly?: boolean; }) { const { country, search, page = 1, perPage = 50, activeOnly = true, } = opts ?? {}; const filters: string[] = []; if (country) filters.push(`country="${country}"`); if (activeOnly) filters.push(`active=true`); if (search) { const s = search.replace(/["\\]/g, ""); filters.push(`(code~"${s}" || name~"${s}" || region~"${s}")`); } return pb.collection("kennzeichen").getList(page, perPage, { filter: filters.join(" && ") || undefined, sort: "country,code", }); } export async function getKennzeichenByCode(code: string) { return pb.collection("kennzeichen").getFirstListItem( `code="${code.toUpperCase()}"`, ); } export async function getDiplomatenkennzeichen(baseCountry = "germany") { return pb.collection("diplomatenkennzeichen").getFullList({ filter: `base_country="${baseCountry}"`, sort: "code", }); } export async function getBlogPosts() { return pb.collection("blog_posts").getList(1, 20, { sort: "-created", }); } export async function getGesehen() { return pb.collection("gesehen").getFullList({ sort: "-datum", }); }