import { BuildingTypeKeys, PropertyStatusKeys, extractCity } from "../enums"; export function mapApiProperty(t, item, index) { const info = item.propertyInformation || {}; const dailyPrice = item.dailyRent ?? 0; const monthlyPrice = item.monthlyRent ?? 0; const salePrice = item.price ?? 0; const isRentListing = Boolean(item.dailyRent != null || item.monthlyRent != null); const price = isRentListing ? dailyPrice || monthlyPrice || 0 : salePrice; const priceUnit = isRentListing ? (monthlyPrice ? "monthly" : "daily") : "sale"; const propType = BuildingTypeKeys[info.buildingType] ?? BuildingTypeKeys[item.type] ?? (item.type || "apartment"); const status = PropertyStatusKeys[info.status] ?? PropertyStatusKeys[item.status] ?? "available"; const features = []; if (item.isSmokeAllow) features.push(t("smoke-allowed")); if (item.isVisitorAllow) features.push(t("visitors-allowed")); if (item.specializedFor) features.push(t("specialized")); if (info.numberOfBedRooms) features.push(`${info.numberOfBedRooms} ${t("rooms")}`); if (info.numberOfBathRooms) features.push(`${info.numberOfBathRooms} ${t("bathrooms")}`); const apiBase = typeof window !== "undefined" ? process.env.NEXT_PUBLIC_API_URL || "https://45.93.137.91.nip.io/api" : ""; const rawImages = Array.isArray(info.images) ? info.images : []; const images = rawImages.length > 0 ? rawImages.map((img) => (img.startsWith("http") ? img : `${apiBase}${img.startsWith("/") ? "" : "/Pictures/"}${img}`)) : ["/property-placeholder.jpg"]; const ownerSource = info.ownerType == null && item.ownerType == null ? "all" : [info.ownerType, item.ownerType].find((value) => value != null) === 1 ? "agency" : "owner"; return { id: item.id ?? index + 1, title: info.address || t("propertyWithId", { id: item.id || index + 1 }), description: info.description || "", type: propType, price: price, priceUSD: price, priceUnit, listingType: isRentListing ? "rent" : "sale", location: { city: extractCity(info.address) || "damascus", district: info.address || "", address: info.address || "", lat: parseFloat(info.cordsX) || 0, lng: parseFloat(info.cordsY) || 0, }, bedrooms: info.numberOfBedRooms || 0, bathrooms: info.numberOfBathRooms || 0, area: info.space || 0, features, images, status, rating: item.rating || 4.5, isNew: false, allowedIdentities: ["syrian", "passport"], priceDisplay: { daily: dailyPrice, monthly: monthlyPrice, sale: salePrice, }, ownerSource, bookings: [], _raw: item, }; }