(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3185],{46309:function(e,t,n){Promise.resolve().then(n.bind(n,66563))},41980:function(e,t,n){"use strict";n.d(t,{H:function(){return h},a:function(){return f}});var r=n(57437),a=n(2265),o=n(3141),s=n(41121),l=n(57685),i=n.n(l),c=n(50309),u=n.n(c);let d=(0,a.createContext)({isAuthenticated:!1,isVerifying:!0,username:null,firstName:null,login:()=>{},logout:()=>{}}),f=()=>(0,a.useContext)(d),h=e=>{let{children:t}=e,[n,l]=(0,a.useState)(!1),[c,f]=(0,a.useState)(!0),[h,p]=(0,a.useState)(null),[g,m]=(0,a.useState)(null),y=(0,a.useRef)(!1),w=(0,a.useRef)(!1),k=(0,a.useCallback)(async()=>{if(!y.current){y.current=!0,f(!0);try{console.log("Checking authentication status...");let e=await (0,o.WX)();e&&(p(e.username),m(i()(u()(e.first_name))||null),l(!0),console.log("✅ User authenticated:",e.username))}catch(e){console.error("❌ Token verification failed:",e),l(!1),p(null),m(null)}finally{f(!1),y.current=!1}}},[]);(0,a.useEffect)(()=>{k()},[k]);let v=(0,a.useCallback)(async()=>{try{await s.Z.post("/auth/logout/")}catch(e){console.error("❌ Logout failed:",e)}finally{p(null),m(null),l(!1)}},[]);(0,a.useEffect)(()=>{let e=setInterval(async()=>{if(n&&!w.current){w.current=!0;try{await (0,o.g$)(),console.log("\uD83D\uDD04 Token refreshed successfully.")}catch(e){console.error("❌ Auto token refresh failed:",e),v()}finally{w.current=!1}}},6e5);return()=>clearInterval(e)},[n,v]),(0,a.useEffect)(()=>{console.log("Auth state updated:",{username:h,firstName:g})},[h,g]);let x=(0,a.useCallback)((e,t)=>{p(e),m(i()(u()(t))),l(!0)},[]);return(0,r.jsxs)(d.Provider,{value:{isAuthenticated:n,isVerifying:c,username:h,firstName:g,login:x,logout:v},children:[!c&&t," "]})}},66563:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return d}});var r=n(57437);n(2778);var a=n(30166),o=n(86484),s=n(94242);n(2648);var l=n(41980);n(61582),n(3479);let i=(0,a.default)(()=>Promise.all([n.e(5183),n.e(7648),n.e(4838),n.e(4645)]).then(n.bind(n,34645)),{loadableGenerated:{webpack:()=>[34645]},ssr:!1}),c=(0,a.default)(()=>Promise.all([n.e(7648),n.e(4303)]).then(n.bind(n,34303)),{loadableGenerated:{webpack:()=>[34303]},ssr:!1}),u=new o.QueryClient;function d(e){let{children:t}=e;return(0,r.jsxs)("html",{lang:"en",children:[(0,r.jsxs)("head",{children:[(0,r.jsx)("link",{href:"https://api.mapbox.com/mapbox-gl-js/v2.15.0/mapbox-gl.css",rel:"stylesheet"}),(0,r.jsx)("link",{href:"https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap",rel:"stylesheet"}),(0,r.jsx)("title",{children:"Nomad Travel Planner"}),(0,r.jsx)("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"})]}),(0,r.jsx)("body",{className:"pt-16 font-inter",children:(0,r.jsx)(l.H,{children:(0,r.jsxs)(o.QueryClientProvider,{client:u,children:[(0,r.jsx)(i,{}),(0,r.jsx)("main",{children:t}),(0,r.jsx)(c,{}),(0,r.jsx)(s.Ix,{position:"top-right",autoClose:3e3,hideProgressBar:!1,newestOnTop:!0,closeOnClick:!0,pauseOnHover:!0,draggable:!0})]})})})]})}},3141:function(e,t,n){"use strict";n.d(t,{WX:function(){return i},a$:function(){return u},g$:function(){return s},pH:function(){return c}});var r=n(41121),a=n(43577);let o=(e,t)=>{if(e instanceof a.d7){if("ECONNABORTED"===e.code)throw Error("Connection timeout. Please check your network");if(!e.response)throw Error("Network error. Please check your connection");throw Error(e.response.data.detail||e.response.data.error||t)}throw Error(t)},s=async()=>{try{let e=await r.Z.post("/auth/token/refresh/",{refresh:localStorage.getItem("refreshToken")});return localStorage.setItem("accessToken",e.data.access),r.Z.defaults.headers.common.Authorization="Bearer ".concat(e.data.access),e.data}catch(e){return o(e,"Session expired. Please log in again.")}},l=0,i=async()=>{try{let e=await r.Z.get("/auth/verify/");return l=0,e.data}catch(t){var e;if(t instanceof a.d7&&(null===(e=t.response)||void 0===e?void 0:e.status)===401&&l<2)return l++,await s(),i();return o(t,"Authentication failed")}},c=async(e,t)=>{try{console.log("Sending login request with:",{username:e,password:t});let n=await r.Z.post("/auth/login/",{username:e,password:t});return console.log("Login response:",n.data),n.data}catch(e){return console.error("Login error:",e),o(e,"Login failed")}},u=async(e,t,n,a,s)=>{try{return(await r.Z.post("/auth/register/",{username:e,email:t,password:n,first_name:a,last_name:s})).data}catch(e){return o(e,"Registration failed")}}},41121:function(e,t,n){"use strict";var r,a=n(83464),o=n(40257);let s=a.default.create({baseURL:o.env.NEXT_PUBLIC_API_URL||"https://backend.nomadstravelguides.com/api",withCredentials:!0,headers:{"Content-Type":"application/json",Accept:"application/json","X-CSRFToken":(null===(r=document.cookie.match(/csrftoken=([\w-]+)/))||void 0===r?void 0:r[1])||""}});t.Z=s},61582:function(){},2778:function(){}},function(e){e.O(0,[2461,5676,7110,9237,3464,156,6484,2263,2971,2117,1744],function(){return e(e.s=46309)}),_N_E=e.O()}]);