import { app, adminApp } from "@/firebase"; import { AgentUser } from "@/interfaces/user"; import { sessionOptions } from "@/lib/session"; import { collection, getDocs, getFirestore, query, where, } from "firebase/firestore"; import { getAuth } from "firebase-admin/auth"; import { withIronSessionApiRoute } from "iron-session/next"; import { NextApiRequest, NextApiResponse } from "next"; import countryCodes from "country-codes-list"; const db = getFirestore(app); const auth = getAuth(adminApp); export default withIronSessionApiRoute(user, sessionOptions); interface Contact { name: string; email: string; number: string; } async function get(req: NextApiRequest, res: NextApiResponse) { const { language = 'en' } = req.query as { language: string }; const usersQuery = query( collection(db, "users"), where("type", "==", "agent") ); const docsUser = await getDocs(usersQuery); const docs = docsUser.docs.map((doc) => doc.data() as AgentUser); const data = docs.reduce( (acc: Record, user: AgentUser) => { const countryCode = user.demographicInformation?.country as string; const currentValues = acc[countryCode] || ([] as Contact[]); const newUser = { name: user.agentInformation.companyName, email: user.email, number: user.demographicInformation?.phone as string, } as Contact; return { ...acc, [countryCode]: [...currentValues, newUser], }; }, {} ) as Record; const result = Object.keys(data).map((code) => { const country = countryCodes.findOne("countryCode" as any, code.toUpperCase()); const key = language === 'ar' ? 'countryNameLocal' : 'countryNameEn'; return { label: country[key], key: code, entries: data[code], }; }); res.json(result); } async function user(req: NextApiRequest, res: NextApiResponse) { if (req.method === "GET") return get(req, res); }