import{ad as G,s as y,U as Z,ae as ce,e as X,af as se,J as ue,G as _e,I as pe,W as de}from"./index-DLIdDvtv.js";import{p as L}from"./product-booking-metadata-Bmib-awn.js";function D(r){return Array.isArray(r)?r.filter(t=>typeof t=="string"&&t.trim()!==""):[]}function me(r){return Array.isArray(r)?r.map(t=>{if(!t||typeof t!="object")return{time:"",title:"",description:""};const o=t;return{time:typeof o.time=="string"?o.time:"",title:typeof o.title=="string"?o.title:"",description:typeof o.description=="string"?o.description:""}}).filter(t=>t.time||t.title||t.description):[]}function Y(r){if(r==null||typeof r!="string")return null;const t=r.trim();return t===""?null:t}function U(r){return r&&typeof r=="object"&&!Array.isArray(r)?r:{}}const ge=["languages","included","to_bring","what_well_do","age_requirement","activity_level","accessibility"];function j(r,t,o){const s=U(r),l=U(s.experience),e={...U(t)};for(const d of ge)Object.prototype.hasOwnProperty.call(l,d)&&(e[d]=l[d]);const p=D(e.included),i=Array.isArray(o)?o.filter(d=>typeof d=="string"):[];return{languages:D(e.languages),included:p.length>0?p:i,to_bring:D(e.to_bring),what_well_do:me(e.what_well_do),age_requirement:Y(e.age_requirement),activity_level:Y(e.activity_level),accessibility:D(e.accessibility)}}function fe(r,t){const o=r.created_at?new Date(r.created_at).getTime():0,s=t.created_at?new Date(t.created_at).getTime():0;return o-s}function ye(r){return[...r].sort((t,o)=>fe(t,o))}function P(r){return ye(r)[0]??null}async function $(r){const t=[...new Set(r.filter(Boolean))];if(t.length===0)return new Map;const{data:o,error:s}=await y.from("catalog_tags").select("id, kind, slug, label").in("id",t);if(s)throw s;const l=new Map;for(const u of o||[])l.set(u.id,u);return l}function ee(r,t){const o=String(r.label||"").trim();if(o)return o;if(r.pax_to!=null&&Number(r.pax_to)!==Number(r.pax_from))return`${r.pax_from}-${r.pax_to} ${pe(t)}`;const s=Number(r.pax_from)||1;return de(s,t)}function be(r,t,o){const l=[...r].sort((e,p)=>e.pax_from-p.pax_from).map(e=>({label:ee(e,t),price:Number(e.price)||0,pax_from:e.pax_from,pax_to:e.pax_to??null}));return o?l.map(e=>({...e,type:"group_flat"})):l.length>=2&&l.every(e=>/^\d/.test(e.label))?l.map(e=>({...e,type:"group_bracket"})):l.length===1?[{...l[0],type:"per_person"}]:l.map(e=>({...e,type:"per_person"}))}function he(r,t){return[...r].sort((s,l)=>s.pax_from-l.pax_from).map((s,l)=>({tier_number:l+1,label:ee(s,t),retail:Number(s.price)||0}))}function H(r,t,o){let s=be(t,o,!!r.price_by_group),l=he(t,o);const u=Number(r.price)||0,e=String(r.price_type||"");let p=r.adult_price!=null?Number(r.adult_price):null,i=r.child_price!=null?Number(r.child_price):null;if(p!=null&&!Number.isFinite(p)&&(p=null),i!=null&&!Number.isFinite(i)&&(i=null),e==="per_pax"&&(!p||p<=0)&&(!i||i<=0)&&u>0&&(p=u,i=u),s.length===0&&u>0&&(e==="tiered"||e==="per_item")){const d=_e(o);s=[{label:d,price:u,type:"per_person"}],l=[{tier_number:1,label:d,retail:u}]}return{price_tiers:s,relational_preview_tiers:l,adult_price:p,child_price:i}}function V(r,t,o,s,l,u){if((r||"")==="per_pax"){if(u&&u.length>0){const n=u.filter(_=>_.is_primary&&_.price>0),b=n.length>0?n:u.filter(_=>_.price>0);if(b.length)return Math.min(...b.map(_=>_.price))}const p=Number(t)||0,i=Number(o)||0,d=[p,i].filter(n=>n>0);if(d.length)return Math.min(...d)}if(l.length>0){const p=l.filter(i=>i.price>0);if(p.length)return Math.min(...p.map(i=>i.price))}return Number(s)||0}function ve(){return G({queryKey:["experiences"],staleTime:5*60*1e3,queryFn:async()=>{const{data:r,error:t}=await y.from("product_groups").select("*").eq("category","experience").eq("published",!0).order("updated_at",{ascending:!1});if(t)throw t;const o=(r||[]).map(i=>i.id).filter(Boolean),{data:s,error:l}=o.length?await y.from("product").select("*").eq("product_type","experience").in("product_group_id",o).eq("is_active",!0).order("created_at",{ascending:!0}):{data:[],error:null};if(l)throw l;const u=new Map;for(const i of s||[]){const d=i.product_group_id;if(!d)continue;const n=u.get(d)||[];n.push(i),u.set(d,n)}const e=[];for(const i of r||[])i.price_unit_tag_id&&e.push(i.price_unit_tag_id),i.compliance_tag_id&&e.push(i.compliance_tag_id),i.destination_tag_id&&e.push(i.destination_tag_id);for(const i of s||[])i.subcategory_tag_id&&e.push(i.subcategory_tag_id);const p=await $(e);return(r||[]).map(i=>{const d=u.get(i.id)||[],n=P(d),b=Array.isArray(i.images)?i.images:[],_=i.map_location&&typeof i.map_location=="object"?i.map_location:null,v=i.price_unit_tag_id?p.get(i.price_unit_tag_id):void 0,N=i.compliance_tag_id?p.get(i.compliance_tag_id):void 0,c=i.destination_tag_id?p.get(i.destination_tag_id):void 0,m=n!=null&&n.subcategory_tag_id?p.get(n.subcategory_tag_id):void 0,g=(m==null?void 0:m.slug)??null,q=(m==null?void 0:m.label)??"",h=j(i.metadata,n==null?void 0:n.metadata,i.amenities),x=L(n==null?void 0:n.metadata),M=Number(n==null?void 0:n.max_pax)||8,T=Z(M,(n==null?void 0:n.quantity)??null)??M;return{id:i.id,default_product_id:n==null?void 0:n.id,title:i.name||"",image_url:b[0]||null,slug:i.slug||"",category_slug:g,category:q,compliance_label:(N==null?void 0:N.label)??null,price_unit_label:(v==null?void 0:v.label)??null,description:i.full_description||i.description||null,short_description:i.description||null,images:b,duration_hours:x.duration!=null?x.duration:2,price:Number(i.from_price)||Number(n==null?void 0:n.price)||0,currency:"USD",location_city:(c==null?void 0:c.label)??(i.destination&&String(i.destination).replace(/,\s*Cuba$/i,"").trim()||null),location_country:"Cuba",location_address:i.address||null,location_lat:(_==null?void 0:_.lat)!=null?Number(_.lat):null,location_lng:(_==null?void 0:_.lng)!=null?Number(_.lng):null,max_guests:T,min_guests:Number(n==null?void 0:n.min_pax)||1,languages:h.languages,included:h.included,to_bring:h.to_bring,what_well_do:h.what_well_do,age_requirement:h.age_requirement,activity_level:h.activity_level,accessibility:h.accessibility,available_days:x.available_days,time_slots:x.time_slots,cancellation_policy:null,booking_status:n!=null&&n.is_active?"CONFIRMED":"REQUEST_TO_BOOK",is_instant_book:!1,rating:0,review_count:0,price_tiers:[],host:null,inventory_quantity:(n==null?void 0:n.quantity)!=null?Number(n.quantity):null,cutoff_hours:(n==null?void 0:n.cutoff)!=null?Number(n.cutoff):null}})}})}function qe(r){return G({queryKey:["experience",r],staleTime:5*60*1e3,queryFn:async()=>{var W;const{data:t,error:o}=await y.from("product_groups").select("*").eq("category","experience").eq("published",!0).eq("slug",r).maybeSingle();if(o)throw o;if(!t)return null;const{data:s,error:l}=await y.from("product").select("*").eq("product_type","experience").eq("product_group_id",t.id).eq("is_active",!0).order("created_at",{ascending:!0});if(l)throw l;const u=s||[],e=P(u)||null,{data:p,error:i}=await y.from("product_group_cancellations").select("cancellation_id, sort_order").eq("product_group_id",t.id).order("sort_order",{ascending:!0});if(i)throw i;const d=[],n=[...new Set((p||[]).map(a=>a.cancellation_id).filter(a=>!!a))];if(n.length>0){const{data:a,error:f}=await y.from("cancellation").select("id, name, is_active").in("id",n);if(f)throw f;const F=new Map((a||[]).map(w=>[w.id,w]));for(const w of p||[]){const A=w.cancellation_id;if(!A)continue;const S=F.get(A);if(!S||S.is_active===!1)continue;const R=String(S.name??"").trim();R&&d.push(R)}}const b=[];t.price_unit_tag_id&&b.push(t.price_unit_tag_id),t.compliance_tag_id&&b.push(t.compliance_tag_id),e!=null&&e.subcategory_tag_id&&b.push(e.subcategory_tag_id);const _=await $(b),v=t.price_unit_tag_id&&((W=_.get(t.price_unit_tag_id))==null?void 0:W.label)!=null&&String(_.get(t.price_unit_tag_id).label).trim()||null,N=await ce(y),c=se("experience"),m=c==null?0:Number(N[c]??0),g=u.map(a=>a.id).filter(Boolean),{data:q,error:h}=g.length?await y.from("price_tiers").select("*").in("product_id",g).order("pax_from",{ascending:!0}):{data:[],error:null};if(h)throw h;const x=new Map;for(const a of q||[]){const f=a.product_id;f&&(x.has(f)||x.set(f,[]),x.get(f).push({label:String(a.label??""),pax_from:Number(a.pax_from)||0,pax_to:a.pax_to!=null?Number(a.pax_to):null,price:Number(a.price)||0}))}const{data:M,error:T}=g.length?await y.from("product_pax_types").select("*").in("product_id",g).order("sort_order",{ascending:!0}):{data:[],error:null};if(T)throw T;const O=new Map;for(const a of M||[]){const f=a.product_id;f&&(O.has(f)||O.set(f,[]),O.get(f).push({id:String(a.id),label:String(a.label??""),min_qty:Number(a.min_qty)||0,max_qty:a.max_qty!=null?Number(a.max_qty):null,price:Number(a.price)||0,sort_order:Number(a.sort_order)||0,is_primary:!!a.is_primary}))}const Q=Array.isArray(t.images)?t.images:[],E=t.map_location&&typeof t.map_location=="object"?t.map_location:null,te=e!=null&&e.id?x.get(e.id)||[]:[],k=e?H(e,te,v):{price_tiers:[],adult_price:null,child_price:null},re=k.price_tiers,ie=e!=null&&e.id?O.get(e.id)||[]:[],z=e?V(e.price_type,k.adult_price,k.child_price,e.price,k.price_tiers,ie):0,ne=u.length>0?u.map(a=>{const f=x.get(a.id)||[],F=O.get(a.id)||[],w=H(a,f,v),A=j(t.metadata,a.metadata,t.amenities),S=L(a.metadata),R=V(a.price_type,w.adult_price,w.child_price,a.price,w.price_tiers,F);return{id:a.id,name:String(a.name||a.sku||"Option").trim()||"Option",duration_hours:S.duration!=null?S.duration:2,min_guests:Number(a.min_pax)||1,max_guests:Number(a.max_pax)||8,max_adults:a.max_adults??null,max_children:a.max_children??null,price_type:a.price_type??null,adult_price:w.adult_price,child_price:w.child_price,available_days:S.available_days,time_slots:S.time_slots,price_tiers:w.price_tiers,age_requirement:A.age_requirement,activity_level:A.activity_level,languages:A.languages,relational_preview_tiers:w.relational_preview_tiers,pax_types:F,preview_price:R>0?X(R,m):0,inventory_quantity:a.quantity!=null?Number(a.quantity):null,cutoff_hours:a.cutoff!=null?Number(a.cutoff):null,price_by_group:!!a.price_by_group}}):void 0,K=t.compliance_tag_id?_.get(t.compliance_tag_id):void 0,I=e!=null&&e.subcategory_tag_id?_.get(e.subcategory_tag_id):void 0,ae=(I==null?void 0:I.slug)??null,oe=(I==null?void 0:I.label)??"",B=j(t.metadata,e==null?void 0:e.metadata,t.amenities),C=L(e==null?void 0:e.metadata),J=Number(e==null?void 0:e.max_pax)||8,le=Z(J,(e==null?void 0:e.quantity)??null)??J;return{id:t.id,default_product_id:e==null?void 0:e.id,price_type:(e==null?void 0:e.price_type)??null,adult_price:k.adult_price,child_price:k.child_price,max_adults:(e==null?void 0:e.max_adults)??null,max_children:(e==null?void 0:e.max_children)??null,title:t.name||"",image_url:Q[0]||null,slug:t.slug||r,category_slug:ae,category:oe,compliance_label:(K==null?void 0:K.label)??null,price_unit_label:v,description:t.full_description||t.description||null,short_description:t.description||null,images:Q,duration_hours:C.duration!=null?C.duration:2,price:Number(t.from_price)||(z>0?X(z,m):0),currency:"USD",location_city:t.destination||null,location_country:"Cuba",location_address:t.address||null,location_lat:(E==null?void 0:E.lat)!=null?Number(E.lat):null,location_lng:(E==null?void 0:E.lng)!=null?Number(E.lng):null,max_guests:le,min_guests:Number(e==null?void 0:e.min_pax)||1,languages:B.languages,included:B.included,to_bring:B.to_bring,what_well_do:B.what_well_do,age_requirement:B.age_requirement,activity_level:B.activity_level,accessibility:B.accessibility,available_days:C.available_days,time_slots:C.time_slots,cancellation_policy:null,cancellation_policies:d,booking_status:"REQUEST_TO_BOOK",is_instant_book:!1,rating:0,review_count:0,price_tiers:re,host:null,booking_products:ne,inventory_quantity:(e==null?void 0:e.quantity)!=null?Number(e.quantity):null,cutoff_hours:(e==null?void 0:e.cutoff)!=null?Number(e.cutoff):null}},enabled:!!r})}function Ne(){return G({queryKey:["experience-relational-tiers"],staleTime:5*60*1e3,queryFn:async()=>{var N;const{data:r,error:t}=await y.from("product").select("id, product_group_id").eq("product_type","experience").eq("is_active",!0);if(t)throw t;const o=(r||[]).map(c=>c.id).filter(Boolean),s=[...new Set((r||[]).map(c=>c.product_group_id).filter(Boolean))],{data:l,error:u}=s.length?await y.from("product_groups").select("id, price_unit_tag_id").in("id",s):{data:[],error:null};if(u)throw u;const e=[...new Set((l||[]).map(c=>c.price_unit_tag_id).filter(Boolean))],p=await $(e),i=new Map;for(const c of l||[]){const m=c.id,g=c.price_unit_tag_id,q=g?(N=p.get(g))==null?void 0:N.label:null;i.set(m,q!=null&&String(q).trim()!==""?String(q).trim():null)}const{data:d,error:n}=o.length?await y.from("price_tiers").select("product_id, label, price, pax_from, pax_to").in("product_id",o):{data:[],error:null};if(n)throw n;const b=new Map;for(const c of r||[])c.id&&c.product_group_id&&b.set(c.id,c.product_group_id);const _={},v=new Map;for(const c of d||[]){const m=b.get(c.product_id);if(!m)continue;const g=i.get(m),q=String(c.label||"").trim()||ue(c.pax_from,c.pax_to,g),h=Number(c.price)||0,x=`${m}::${q}`,M=v.get(x);(M==null||h<M)&&v.set(x,h)}for(const[c,m]of v.entries()){const[g,q]=c.split("::");_[g]||(_[g]=[]),_[g].push({tier_number:_[g].length+1,label:q,retail:m})}for(const c of Object.keys(_))_[c].sort((m,g)=>(m.tier_number||0)-(g.tier_number||0));return _}})}function Ee(r){return G({queryKey:["experience-reviews",r],staleTime:5*60*1e3,queryFn:async()=>{const{data:t,error:o}=await y.from("experience_reviews").select("*").eq("experience_id",r).order("created_at",{ascending:!1});return o?(console.warn("Experience reviews unavailable:",o.message||o),[]):t||[]},enabled:!!r})}export{qe as a,Ee as b,Ne as c,ve as u};