"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[6275],{6275:function(e,t,n){n.d(t,{Ij:function(){return C},Sn:function(){return y},cn:function(){return r},dM:function(){return f},f4:function(){return s},gT:function(){return d},hz:function(){return v},ok:function(){return l},ui:function(){return m}});var a=n(41121);console.log("City service core module loaded");let o={allCities:null,citiesByRegion:{},citySearch:{},timestamps:{allCities:0}},i=e=>Date.now()-o.timestamps[e]<36e5,c=["region","country"];function r(e){return(e||"").toLowerCase().trim()}function s(e){return c.includes(r(e))}let l={"Western Europe":["Paris","Amsterdam","Brussels","Vienna","Berlin","Geneva","Zurich"],"Eastern Europe":["Prague","Warsaw","Budapest","Krakow","Bucharest"],"Southern Europe":["Rome","Barcelona","Madrid","Lisbon","Athens"],"Northern Europe":["Stockholm","Oslo","Copenhagen","Helsinki","Reykjavik"],Balkans:["Zagreb","Belgrade","Sarajevo","Podgorica","Tirana","Skopje"]},u={Trending:["Barcelona","Athens","Lisbon","Prague","Dubrovnik"]};function g(e){var t,n;return{id:e.id.toString(),name:e.name,slug:e.slug,region:e.region,country_name:e.country?e.country.toString():"",description:e.short_description,recommendedStay:null!==(t=e.recommended_stay_length)&&void 0!==t?t:void 0,rating:void 0,image:null!==(n=e.image)&&void 0!==n?n:void 0,tags:e.tags?e.tags.map(e=>({id:e.id.toString(),name:e.name})):[],featured:!!e.tags&&e.tags.some(e=>"Featured"===e.name),type:"city"}}let d=async()=>{if(console.log("fetchCities called"),console.debug("\uD83C\uDF06 Fetching all cities"),o.allCities&&i("allCities"))return console.log("Using cached cities data"),o.allCities;console.log("Cache miss for cities - making API call");try{console.log("Making API request to /trip/cities/");let e=await a.Z.get("/trip/cities/");console.log("API response received:",e.status);let t=Array.isArray(e.data)?e.data:e.data.results?e.data.results:[];console.log("Received ".concat(t.length," cities from API")),console.debug("✅ Fetched ".concat(t.length," cities successfully"));let n=t.map(g);return o.allCities=n,o.timestamps.allCities=Date.now(),console.log("Cities data cached"),n}catch(t){console.error("Failed to fetch cities:",t),console.log("Falling back to generated data");let e=function(){let e=[];return Object.entries(l).forEach(t=>{let[n,a]=t;a.forEach((t,a)=>{a<3&&e.push({id:"fallback-".concat(t.toLowerCase().replace(/\s+/g,"-")),name:t,slug:t.toLowerCase().replace(/\s+/g,"-"),region:n,country_name:"Unknown",description:"".concat(t," is a city in ").concat(n,"."),recommendedStay:3,rating:4.5,image:"",tags:[{id:n.toLowerCase(),name:n}],featured:u.Trending.includes(t),type:"city"})})}),e}();return console.log("Using ".concat(e.length," fallback cities")),o.allCities||(o.allCities=e,o.timestamps.allCities=Date.now(),console.log("Fallback cities data cached")),e}},m=async e=>{if(!e||""===e.trim())return h();console.debug('\uD83D\uDD0D Searching cities with query: "'.concat(e,'"'));let t="search:".concat(e.toLowerCase().trim());if(o.citySearch[t]&&i(t))return console.log('Using cached search results for "'.concat(e,'"')),p(o.citySearch[t]);try{let n=await a.Z.get("/trip/cities/?search=".concat(encodeURIComponent(e))),i=Array.isArray(n.data)?n.data:n.data.results?n.data.results:[];console.debug("✅ Found ".concat(i.length," cities matching search query"));let c=i.map(g);return o.citySearch[t]=c,o.timestamps[t]=Date.now(),p(c)}catch(a){console.error('Failed to search cities with query "'.concat(e,'":'),a);let n=(await d()).filter(t=>t.name.toLowerCase().includes(e.toLowerCase())||t.description&&t.description.toLowerCase().includes(e.toLowerCase())||t.region&&t.region.toLowerCase().includes(e.toLowerCase()));return o.citySearch[t]=n,o.timestamps[t]=Date.now(),p(n)}},h=async()=>p(await d()),p=e=>e.map(e=>({id:parseInt(e.id.toString(),10)||0,name:e.name,slug:e.slug,image_url:e.image||"",short_description:e.description||"",recommended_stay_length:e.recommendedStay||3,tags:(e.tags||[]).map(e=>({id:parseInt(e.id.toString(),10)||0,name:e.name,type:"default"})),latitude:void 0!==e.latitude?parseFloat(e.latitude.toString()):0,longitude:void 0!==e.longitude?parseFloat(e.longitude.toString()):0,image:e.image||"",population:void 0!==e.population?parseInt(e.population.toString(),10):0,country_name:e.country_name||"Unknown",type:"city"})),y=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return console.debug("⭐ Fetching featured cities"),C("tag","Featured",e,t)},f=async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:5;return console.debug("\uD83D\uDD25 Fetching trending cities"),C("tag","Trending",e,t)},v=async function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:5;console.debug('\uD83C\uDFD9️ Fetching cities by region: "'.concat(e,'"'));let c="region:".concat(e);if(o.citiesByRegion[e]&&i(c))return console.log("Using cached cities for region ".concat(e)),o.citiesByRegion[e];try{let i="/trip/cities/?region=".concat(encodeURIComponent(e),"&page=").concat(t,"&page_size=").concat(n);console.debug("\uD83D\uDCE4 API Request: GET ".concat(i));let r=await a.Z.get(i),s=Array.isArray(r.data)?r.data:r.data.results?r.data.results:[];console.debug("✅ Fetched ".concat(s.length," cities in region ").concat(e));let u=s.map(g),d=u.filter(t=>t.region===e||l[e]&&l[e].includes(t.name)),m=d.length>0?d:u;return o.citiesByRegion[e]=m,o.timestamps[c]=Date.now(),m}catch(n){console.error('❌ Error fetching cities by region "'.concat(e,'":'),n);let t=(await d()).filter(t=>t.region===e||l[e]&&l[e].includes(t.name));return console.debug("✅ Found ".concat(t.length," cities in region ").concat(e," via fallback")),o.citiesByRegion[e]=t,o.timestamps[c]=Date.now(),t}},C=async function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,c=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5;if(!e||!t)return console.debug("\uD83D\uDD0D Missing type or value, fetching all cities"),d();console.debug("\uD83D\uDD0D Fetching cities by tag: ".concat(e,"/").concat(t));let r="tag:".concat(e,":").concat(t);if(o.citySearch[r]&&i(r))return console.log("Using cached cities for tag ".concat(e,"/").concat(t)),o.citySearch[r];try{let i="";i=s(e)?"/trip/cities/?".concat(e,"=").concat(encodeURIComponent(t),"&page=").concat(n,"&page_size=").concat(c):"/trip/cities/?tag=".concat(encodeURIComponent(t),"&tag_type=").concat(encodeURIComponent(e),"&page=").concat(n,"&page_size=").concat(c),console.debug("\uD83D\uDCE4 API Request: GET ".concat(i));let u=await a.Z.get(i),d=Array.isArray(u.data)?u.data:u.data.results?u.data.results:[];console.debug("✅ Fetched ".concat(d.length," cities for tag ").concat(e,"/").concat(t));let m=d.map(g),h=m.filter(n=>{if("category"===e){var a;return null===(a=n.tags)||void 0===a?void 0:a.some(e=>e.name===t&&("category"===e.type||!e.type))}return"region"!==e||n.region===t||l[t]&&l[t].includes(n.name)}),p=h.length>0?h:m;return o.citySearch[r]=p,o.timestamps[r]=Date.now(),p}catch(i){console.error("❌ Error fetching cities by tag ".concat(e,"/").concat(t,":"),i);let n=await d(),a=[];return a="category"===e?n.filter(e=>{var n;return null===(n=e.tags)||void 0===n?void 0:n.some(e=>e.name===t)}):"region"===e?n.filter(e=>e.region===t||l[t]&&l[t].includes(e.name)):n.filter(e=>{var n;return null===(n=e.tags)||void 0===n?void 0:n.some(e=>e.name===t)}),o.citySearch[r]=a,o.timestamps[r]=Date.now(),a}}},41121:function(e,t,n){var a,o=n(83464),i=n(40257);let c=o.default.create({baseURL:i.env.NEXT_PUBLIC_API_URL||"https://backend.nomadstravelguides.com/api",withCredentials:!0,headers:{"Content-Type":"application/json",Accept:"application/json","X-CSRFToken":(null===(a=document.cookie.match(/csrftoken=([\w-]+)/))||void 0===a?void 0:a[1])||""}});t.Z=c}}]);