{"version":3,"file":"ReceiptLabelComponent.CoMC7DHA.mjs","names":["transitionStyle","c","primaryDiscountedPrice","secondaryDiscountedPrice","React.useState","FadeIn","useMemo"],"sources":["https:/framerusercontent.com/modules/OM3DCPQsxhCoiGUHGyyF/DWNIDoVFboSSlPAr2Pfp/CheckAuth.js","https:/framerusercontent.com/modules/EIVOVFb6xjz6Fvh11iJi/aVX0H5aDaI42Kqao4p3w/VacationDisplay.js","https:/framerusercontent.com/modules/jTRIrvvdhM8hGc8tF4E7/ZCyp1o7IV63uf86HyteE/EvaluateCoupons.js","https:/framerusercontent.com/modules/k847LPNIMdkhfIs0ouwF/zZcxUVwpGbqqXUtyuYdM/AdditionalService.js","https:/framerusercontent.com/modules/t32tReeHmrCTzbf5rVbb/knSGzr9CgEPGu2eKytEM/PriceDisplay.js","https:/framerusercontent.com/modules/VB0CUTtrSV4ToCjcWKaC/of00drRi6N13tGLuHcfM/ReceiptLabelComponent.js"],"sourcesContent":["import{jsx as _jsx}from\"react/jsx-runtime\";import{useEffect,useState}from\"react\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";import{useStore}from\"https://framerusercontent.com/modules/r9TbzE6j44OxXp6KiYut/76RwL1AAv8XI9yZuFC7J/MonthDisplay.js\";import{isReservationPairValid}from\"https://framerusercontent.com/modules/LzxMy0FNdnlR5hkoagxA/tvWueCbtNFHIaEpeFUsm/WeekComponent.js\";import{createReservationMessage}from\"https://framerusercontent.com/modules/cc8dQZibFTGkGc1c3gcs/kb1jPFWq6sM7b3hZANQF/messages.js\";import{sendSMS,sendEmail}from\"https://framerusercontent.com/modules/eDrJcddZ1hupSaFjnFha/jRxRo7543ALk5DJ5WdKS/notify.js\";import{ADMIN_PHONES,ADMIN_EMAILS}from\"https://framerusercontent.com/modules/7m7uk25602Uk07oVuukZ/6elDV7iDa6daOtmu4Zi5/adminContacts.js\";function getKSTDate(baseDate=new Date){const utc=baseDate.getTime()+baseDate.getTimezoneOffset()*6e4;return new Date(utc+9*60*60*1e3);}function getKSTISOString(date=new Date){const kstDate=getKSTDate(date);const pad=n=>String(n).padStart(2,\"0\");const year=kstDate.getFullYear();const month=pad(kstDate.getMonth()+1);const day=pad(kstDate.getDate());const hours=pad(kstDate.getHours());const minutes=pad(kstDate.getMinutes());const seconds=pad(kstDate.getSeconds());return`${year}-${month}-${day}T${hours}:${minutes}:${seconds}+09:00`;}const useAuthStore=createStore({temp_id:null,temp_password:null});export function formatDate({year,month,day}){const paddedMonth=String(month+1).padStart(2,\"0\")// month는 0-based\n;const paddedDay=String(day).padStart(2,\"0\");return`${year}-${paddedMonth}-${paddedDay}`;}export function parseDate(dateStr){const[yearStr,monthStr,dayStr]=dateStr.split(\"-\");const year=parseInt(yearStr);const month=parseInt(monthStr)-1// zero-based\n;const day=parseInt(dayStr);if(isNaN(year)||isNaN(month)||isNaN(day))return null;return{year,month,day};}function safeParseDate(input){const date=new Date(input);return isNaN(date.getTime())?null:date;}export function toggleID(Component){return props=>{const[store,setStore]=useAuthStore();const handleChange=event=>{const inputValue=event.target.value;setStore({temp_id:inputValue});};return /*#__PURE__*/_jsx(Component,{...props,onChange:handleChange});};}export function togglePassword(Component){return props=>{const[store,setStore]=useAuthStore();const handleChange=event=>{const inputValue=event.target.value;setStore({temp_password:inputValue});};return /*#__PURE__*/_jsx(Component,{...props,type:\"password\",onChange:handleChange});};}export function unsafeRequestLogin(Component){return props=>{const[authStore]=useAuthStore();const[_,setStore]=useStore();const handleClick=async()=>{try{const response=await fetch(\"https://terene-db-server.onrender.com/api/customers\");const data=await response.json();const matchedUser=data.find(user=>user.id===authStore.temp_id&&user.password===authStore.temp_password);if(matchedUser){const encodedMembershipNumber=btoa(matchedUser.membership_number);if(matchedUser.membership_number===\"A-00000001\"){window.location.href=`/admin-table?mn=${encodedMembershipNumber}`;}else{window.location.href=`/reservation-2?mn=${encodedMembershipNumber}`;}}else{alert(\"로그인 실패: 계정 ID 또는 비밀번호가 틀렸습니다.\");}}catch(error){alert(\"로그인 요청 중 오류가 발생하였습니다.\");window.location.href=\"/reservation-1\";}};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick});};}export function unsafeKeep2Login(Component){return props=>{const[decodedMembershipNumber,setDecodedMembershipNumber]=useState(null);const[store,setStore]=useStore();useEffect(()=>{const verifyMembershipNumber=async()=>{const queryParams=new URLSearchParams(window.location.search);const encodedMembershipNumber=queryParams.get(\"mn\");// mn이 유효한지 체크하는 로직\nif(!encodedMembershipNumber){return;}try{const decoded=atob(encodedMembershipNumber);const response=await fetch(\"https://terene-db-server.onrender.com/api/customers\");const data=await response.json();const matchedUser=data.find(user=>user.membership_number===decoded);if(matchedUser){setStore({membership_number:matchedUser.membership_number,membership:matchedUser.membership_grade,remarks:matchedUser.remarks});}else{if(encodedMembershipNumber){alert(\"회원 정보가 데이터베이스에서 확인되지 않았습니다.\");window.location.href=\"/reservation-1\";}else{setStore({membership_number:null,membership:\"Non-Member\"});}}}catch(error){if(encodedMembershipNumber){alert(\"회원 정보가 데이터베이스에서 확인되지 않았습니다.\");window.location.href=\"/reservation-1\";}else{setStore({membership_number:null,membership:\"Non-Member\"});}}};verifyMembershipNumber();},[]);const isLoggedIn=!!decodedMembershipNumber;return /*#__PURE__*/_jsx(Component,{...props});};}export function unsafe2to3(Component){return props=>{const[authStore]=useAuthStore();const[store]=useStore();const handleClick=async()=>{const queryParams=new URLSearchParams(window.location.search);const encodedMembershipNumber=queryParams.get(\"mn\");const decoded=atob(encodedMembershipNumber);const firstDate=store.firstDate;const secondDate=store.secondDate;// first와 second 값이 둘 다 있어야만 URL에 추가하도록 조건을 설정\nif(!firstDate||!secondDate){alert(\"일정을 선택해주세요\");return;}const first=formatDate(firstDate);const second=formatDate(secondDate);const baseUrl=\"/reservation-4\";const params=new URLSearchParams;//////////////////////////////\nif(encodedMembershipNumber){params.set(\"mn\",encodedMembershipNumber);}params.set(\"first\",first);params.set(\"second\",second);window.location.href=`${baseUrl}?${params.toString()}`;return;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick});};}export function unsafe2to3toss(Component){return props=>{const[authStore]=useAuthStore();const[store]=useStore();const handleClick=async()=>{const queryParams=new URLSearchParams(window.location.search);const encodedMembershipNumber=queryParams.get(\"mn\");const decoded=atob(encodedMembershipNumber);const firstDate=store.firstDate;const secondDate=store.secondDate;// first와 second 값이 둘 다 있어야만 URL에 추가하도록 조건을 설정\nif(!firstDate||!secondDate){alert(\"일정을 선택해주세요\");return;}const first=formatDate(firstDate);const second=formatDate(secondDate);// Toss Payments 심사를 위한 코드\nconst baseUrl=decoded&&decoded===\"U-99999999\"?\"/reservation-3-toss\":\"/reservation-3\";const params=new URLSearchParams;//////////////////////////////\nif(encodedMembershipNumber){params.set(\"mn\",encodedMembershipNumber);}params.set(\"first\",first);params.set(\"second\",second);window.location.href=`${baseUrl}?${params.toString()}`;return;};return /*#__PURE__*/_jsx(Component,{...props,onClick:handleClick});};}export function unsafeKeep3Login(Component){return props=>{const[decodedMembershipNumber,setDecodedMembershipNumber]=useState(null);const[store,setStore]=useStore();useEffect(()=>{const verifyMembershipNumber=async()=>{const queryParams=new URLSearchParams(window.location.search);const encodedMembershipNumber=queryParams.get(\"mn\");const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;if(!firstDate||!secondDate){alert(\"날짜가 선택되지 않은 채로 넘어와 오류가 발생했습니다. 로그인 화면으로 돌아갑니다.\");window.location.href=`/reservation-1`;return;}try{const decoded=atob(encodedMembershipNumber);// 고객 정보 가져오기\nconst response=await fetch(\"https://terene-db-server.onrender.com/api/customers\");const data=await response.json();const matchedUser=data.find(user=>user.membership_number===decoded);// 날짜 점유 정보 가져오기\nconst dayRes=await fetch(\"https://terene-db-server.onrender.com/api/days\");const dayData=await dayRes.json();const dayInfoMap=new Map;dayData.forEach(item=>{dayInfoMap.set(item.date,{isHoliday:item.is_holiday,checkin:item.checkin,checkout:item.checkout});});const dateToString=({year,month,day})=>`${year}-${String(month+1).padStart(2,\"0\")}-${String(day).padStart(2,\"0\")}`;const dateToTime=({year,month,day})=>new Date(year,month,day).getTime();const today=getKSTDate();today.setHours(0,0,0,0);const firstTime=new Date(firstDate.year,firstDate.month,firstDate.day);const secondTime=new Date(secondDate.year,secondDate.month,secondDate.day);const diffDays=Math.abs((secondTime.getTime()-firstTime.getTime())/(1e3*60*60*24));if(diffDays>=4){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}if(firstTime.getTime()<today.getTime()){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}const firstStr=dateToString(firstDate);const secondStr=dateToString(secondDate);const firstInfo=dayInfoMap.get(firstStr);const secondInfo=dayInfoMap.get(secondStr);if(firstInfo?.checkin?.is_occupied){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}if(secondInfo?.checkout?.is_occupied){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}// 사이 날짜 점유 여부 확인\nfor(let d=new Date(firstTime.getTime()+864e5);d<secondTime;d.setDate(d.getDate()+1)){const key=`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,\"0\")}-${String(d.getDate()).padStart(2,\"0\")}`;const info=dayInfoMap.get(key);if(info?.checkin?.is_occupied||info?.checkout?.is_occupied){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}}if(matchedUser){const membership=matchedUser.membership_grade;if(!isReservationPairValid(today,firstTime,secondTime,membership)){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}setStore({membership_number:matchedUser.membership_number,name:matchedUser.name_kor,birthdate:matchedUser.birthdate,phone:matchedUser.phone,email:matchedUser.email,membership:matchedUser.membership_grade,remarks:matchedUser.remarks,ownedMileage:Number(matchedUser.owned_mileage),expiredCoupons:matchedUser.used_coupons});}else{if(encodedMembershipNumber){alert(\"회원 정보가 데이터베이스에서 확인되지 않았습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}else{const membership=\"Non-Member\";if(!isReservationPairValid(today,firstTime,secondTime,membership)){alert(\"예약이 불가능한 날짜가 선택된 채로 넘어왔습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}setStore({// firstDate: null,\n// secondDate: null,\nmembership_number:null,membership:\"Non-Member\"});}}}catch(error){if(encodedMembershipNumber){alert(\"회원 정보가 데이터베이스에서 확인되지 않았습니다. 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;}else{alert(\"데이터베이스에서 일시적인 오류가 발생하여 로그인 화면으로 돌아갑니다.\");window.location.href=\"/reservation-1\";return;setStore({// firstDate: firstDate,\n// secondDate: secondDate,\nmembership_number:null,membership:\"Non-Member\"});}}};verifyMembershipNumber();},[]);const isLoggedIn=!!decodedMembershipNumber;return /*#__PURE__*/_jsx(Component,{...props});};}export function unsafeKeepAdminLogin(Component){return props=>{const[decodedMembershipNumber,setDecodedMembershipNumber]=useState(null);// const [store, setStore] = useStore()\nuseEffect(()=>{const verifyMembershipNumber=async()=>{const queryParams=new URLSearchParams(window.location.search);const encodedMembershipNumber=queryParams.get(\"mn\");if(!encodedMembershipNumber){window.location.href=\"/reservation-1\";return;}const decoded=atob(encodedMembershipNumber);if(decoded!==\"A-00000001\"){window.location.href=\"/reservation-1\";return;}};verifyMembershipNumber();},[]);return /*#__PURE__*/_jsx(Component,{...props});};}export function showFinalPrice(Component){return props=>{const[finalPrice,setFinalPrice]=useState(null);useEffect(()=>{const findFinalPrice=async()=>{const queryParams=new URLSearchParams(window.location.search);const orderId=queryParams.get(\"tereneOrderId\");if(!orderId){window.location.href=\"/reservation-1\";return;}try{const response=await fetch(\"https://terene-db-server.onrender.com/api/orders\");if(!response.ok){throw new Error(\"Failed to fetch orders\");}const orders=await response.json();const order=orders.find(o=>o.order_id===orderId);if(!order){setFinalPrice(0);alert(\"orderId가 유효하지 않습니다\");window.location.href=\"/reservation-1\";return;}setFinalPrice(order.final_price);}catch(error){setFinalPrice(0);alert(`orderId가 유효하지 않습니다\n에러메시지: ${error}`);window.location.href=\"/reservation-1\";return;}};findFinalPrice();},[]);return /*#__PURE__*/_jsx(Component,{...props,text:`입금금액 : ${Number(finalPrice).toLocaleString()}`});};}export function acceptPayment(Component){return props=>{const[finalPrice,setFinalPrice]=useState(null);useEffect(()=>{const updatePaymentStatus=async()=>{const queryParams=new URLSearchParams(window.location.search);const orderId=queryParams.get(\"tereneOrderId\");if(!orderId){window.location.href=\"/reservation-1\";return;}try{const response=await fetch(\"https://terene-db-server.onrender.com/api/orders\");if(!response.ok){throw new Error(\"Failed to fetch orders\");}const orders=await response.json();const order=orders.find(o=>o.order_id===orderId);if(!order){alert(\"orderId가 유효하지 않습니다\");window.location.href=\"/reservation-1\";return;}order[\"payment_status\"]=\"accepted\";order[\"payment_timeline\"][\"approval_datetime\"]=getKSTISOString();const status_response=await fetch(`https://terene-db-server.onrender.com/api/orders/${orderId}`,{method:\"PUT\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(order)});if(!status_response.ok){const errorText=await status_response.text();throw new Error(`HTTP ${status_response.status} - ${errorText}`);}let client_title=null;let client_message=null;let admin_title=null;let admin_message=null;if(order[\"payment_status\"]===\"accepted\"){const row=order;({client_title,client_message,admin_title,admin_message}=createReservationMessage(\"confirmed\",row));if(client_title&&client_message&&admin_title&&admin_message){try{for(const phone of ADMIN_PHONES){await sendSMS(phone,admin_message);}for(const email of ADMIN_EMAILS){await sendEmail(email,admin_title,admin_message);}await sendSMS(row[\"reserver_contact\"],client_message);if(row[\"refund_info\"]?.[\"refund_phone\"]&&row[\"reserver_contact\"].replace(/[^0-9]/g,\"\")!==row[\"refund_info\"][\"refund_phone\"].replace(/[^0-9]/g,\"\")){await sendSMS(row[\"refund_info\"][\"refund_phone\"],client_message);}await sendEmail(row[\"reserver_email\"],client_title,client_message);}catch(notifyError){console.error(\"알림 전송 중 오류:\",notifyError);alert(\"예약은 처리되었으나 알림 전송에 실패했습니다.\\n관리자에게 별도 확인을 부탁드립니다.\");}}}setFinalPrice(order.final_price);}catch(error){alert(`orderId가 유효하지 않습니다\n에러메시지: ${error}`);window.location.href=\"/reservation-1\";}};updatePaymentStatus();},[]);return /*#__PURE__*/_jsx(Component,{...props});};}export function declinePayment(Component){return props=>{useEffect(()=>{const updateCancellationStatus=async()=>{const queryParams=new URLSearchParams(window.location.search);const orderId=queryParams.get(\"tereneOrderId\");if(!orderId){window.location.href=\"/reservation-1\";return;}try{const response=await fetch(\"https://terene-db-server.onrender.com/api/orders\");if(!response.ok){throw new Error(\"Failed to fetch orders\");}const orders=await response.json();const order=orders.find(o=>o.order_id===orderId);if(!order){alert(\"orderId가 유효하지 않습니다\");window.location.href=\"/reservation-1\";return;}// 결제 취소 처리\norder[\"payment_status\"]=\"cancelled\";order[\"payment_timeline\"][\"cancellation_datetime\"]=getKSTISOString();const cancelRes=await fetch(`https://terene-db-server.onrender.com/api/orders/${orderId}`,{method:\"PUT\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(order)});if(!cancelRes.ok){const errorText=await cancelRes.text();throw new Error(`HTTP ${cancelRes.status} - ${errorText}`);}// 날짜 점유 해제\nconst getAllDaysRes=await fetch(`https://terene-db-server.onrender.com/api/days`);if(!getAllDaysRes.ok){const errorText=await getAllDaysRes.text();throw new Error(`HTTP ${getAllDaysRes.status} - ${errorText}`);}const allDays=await getAllDaysRes.json();const dateRange=[];let current=new Date(order[\"start_date\"]);const end=new Date(order[\"end_date\"]);while(current<=end){const yyyyMMdd=current.toISOString().split(\"T\")[0];dateRange.push(yyyyMMdd);current.setDate(current.getDate()+1);}const targetDays=allDays.filter(day=>dateRange.includes(day.date)&&(day.checkin?.occupied_order_id===orderId||day.checkout?.occupied_order_id===orderId));for(const day of targetDays){const updatedDay={...day};const isFirstDate=day.date===order[\"start_date\"];const isLastDate=day.date===order[\"end_date\"];if(isFirstDate){updatedDay.checkin={is_occupied:false,occupied_order_id:null};}else if(isLastDate){updatedDay.checkout={is_occupied:false,occupied_order_id:null};}else{updatedDay.checkin={is_occupied:false,occupied_order_id:null};updatedDay.checkout={is_occupied:false,occupied_order_id:null};}const res=await fetch(`https://terene-db-server.onrender.com/api/days/${day.date}`,{method:\"PUT\",headers:{\"Content-Type\":\"application/json\"},body:JSON.stringify(updatedDay)});if(!res.ok){const errText=await res.text();throw new Error(`Failed to release occupancy for ${day.date}: HTTP ${res.status} - ${errText}`);}}// 모든 작업 완료 후 리디렉션\nwindow.location.href=\"/reservation-1\";}catch(error){alert(`예약 취소 중 오류 발생\n에러메시지: ${error}`);window.location.href=\"/reservation-1\";}};updateCancellationStatus();},[]);return /*#__PURE__*/_jsx(Component,{...props});};}\nexport const __FramerMetadata__ = {\"exports\":{\"unsafeKeepAdminLogin\":{\"type\":\"reactHoc\",\"name\":\"unsafeKeepAdminLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"acceptPayment\":{\"type\":\"reactHoc\",\"name\":\"acceptPayment\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toggleID\":{\"type\":\"reactHoc\",\"name\":\"toggleID\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"showFinalPrice\":{\"type\":\"reactHoc\",\"name\":\"showFinalPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unsafeRequestLogin\":{\"type\":\"reactHoc\",\"name\":\"unsafeRequestLogin\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unsafe2to3\":{\"type\":\"reactHoc\",\"name\":\"unsafe2to3\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unsafeKeep2Login\":{\"type\":\"reactHoc\",\"name\":\"unsafeKeep2Login\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"declinePayment\":{\"type\":\"reactHoc\",\"name\":\"declinePayment\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unsafeKeep3Login\":{\"type\":\"reactHoc\",\"name\":\"unsafeKeep3Login\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"formatDate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"parseDate\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"togglePassword\":{\"type\":\"reactHoc\",\"name\":\"togglePassword\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"unsafe2to3toss\":{\"type\":\"reactHoc\",\"name\":\"unsafe2to3toss\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// VacationDisplay.tsx\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{useStore,MONTH_NAMES}from\"https://framerusercontent.com/modules/r9TbzE6j44OxXp6KiYut/76RwL1AAv8XI9yZuFC7J/MonthDisplay.js\";import{parseDate}from\"https://framerusercontent.com/modules/OM3DCPQsxhCoiGUHGyyF/DWNIDoVFboSSlPAr2Pfp/CheckAuth.js\";const transitionStyle=visible=>({opacity:visible?1:0,color:\"inherit\",transition:\"opacity 0.3s ease-in-out\",display:\"inline-block\"});const WEEKDAYS=[\"일\",\"월\",\"화\",\"수\",\"목\",\"금\",\"토\"];function formatFullDate(date){const d=new Date(date.year,date.month,date.day);const weekday=WEEKDAYS[d.getDay()];return`${d.getFullYear()}.${String(d.getMonth()+1).padStart(2,\"0\")}.${String(d.getDate()).padStart(2,\"0\")} (${weekday})`;}function calculatePeriod(start,end){const msPerDay=1e3*60*60*24;const days=Math.round((end.getTime()-start.getTime())/msPerDay);const nights=days;const fullDays=days+1;return`${nights}박 ${fullDays}일`;}export function displayStartMonth(Component){return props=>{const[store]=useStore();const start=store.firstDate;const end=store.secondDate;const show=!!start;const showYear=start&&end&&start.year!==end.year;const text=start?`${showYear?`${start.year}`:`${start.year}`}. ${MONTH_NAMES[start.month]}`:\"\";return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayStartDay(Component){return props=>{const[store]=useStore();const start=store.firstDate;const text=start?String(start.day).padStart(2,\"0\"):\"\";const show=!!start;return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayEndMonth(Component){return props=>{const[store]=useStore();const start=store.firstDate;const end=store.secondDate;const show=!!end;const showYear=start&&end&&start.year!==end.year;const text=end?`${showYear?`${end.year}`:`${end.year}`}. ${MONTH_NAMES[end.month]}`:\"\";return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayEndDay(Component){return props=>{const[store]=useStore();const end=store.secondDate;const text=end?String(end.day).padStart(2,\"0\"):\"\";const show=!!end;return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayStartDate(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const start=store.firstDate||firstDate;const end=store.secondDate||secondDate;const show=!!start&&!!end;const text=show?formatFullDate(start):\"\";return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayEndDate(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const start=store.firstDate||firstDate;const end=store.secondDate||secondDate;const show=!!start&&!!end;const text=show?formatFullDate(end):\"\";return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}export function displayTilde(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const start=store.firstDate||firstDate;const end=store.secondDate||secondDate;const show=!!start&&!!end;return /*#__PURE__*/_jsx(Component,{...props,text:show?\" ~ \":\"\",style:transitionStyle(show)});};}export function displayPeriod(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const start=store.firstDate||firstDate;const end=store.secondDate||secondDate;const show=!!start&&!!end;const text=show?calculatePeriod(new Date(start.year,start.month,start.day),new Date(end.year,end.month,end.day)):\"\";return /*#__PURE__*/_jsx(Component,{...props,text:text,style:transitionStyle(show)});};}\nexport const __FramerMetadata__ = {\"exports\":{\"displayEndDate\":{\"type\":\"reactHoc\",\"name\":\"displayEndDate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayTilde\":{\"type\":\"reactHoc\",\"name\":\"displayTilde\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayPeriod\":{\"type\":\"reactHoc\",\"name\":\"displayPeriod\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayStartDay\":{\"type\":\"reactHoc\",\"name\":\"displayStartDay\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayStartDate\":{\"type\":\"reactHoc\",\"name\":\"displayStartDate\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayStartMonth\":{\"type\":\"reactHoc\",\"name\":\"displayStartMonth\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayEndDay\":{\"type\":\"reactHoc\",\"name\":\"displayEndDay\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayEndMonth\":{\"type\":\"reactHoc\",\"name\":\"displayEndMonth\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// EvaluateCoupons.ts\n// UNDER CONSTRUCTION /////////////////////////////////////\nimport{membershipPrices,unmuDayLimits}from\"https://framerusercontent.com/modules/eNYxylYRmdtVvI7ZdKLb/B76l0V3z6kPntL8kWsyI/UnmuMembership.js\";function getKSTDate(baseDate=new Date){const utc=baseDate.getTime()+baseDate.getTimezoneOffset()*6e4;return new Date(utc+9*60*60*1e3);}function toDate(obj){return new Date(obj.year,obj.month,obj.day);}function getKey(d){return`${d.getFullYear()}-${String(d.getMonth()+1).padStart(2,\"0\")}-${String(d.getDate()).padStart(2,\"0\")}`;}// Step 1: Initial price 계산\nexport function calculateInitialPrices(store,categoryMap,firstDate,secondDate){let first=null;let second=null;if(firstDate&&secondDate){first=toDate(firstDate);second=new Date(toDate(secondDate));}else{first=toDate(store.firstDate);second=new Date(toDate(store.secondDate));}second.setDate(second.getDate()-1)// 퇴실일은 계산에 포함 X\n;const dailyItems=[];const basePrices=[];const categoryCount={Weekday:0,Weekend:0,Peak:0};// UNDER CONSTRUCTION /////////////////////////////////////\nconst isUnmu=[\"UNMU 6\",\"UNMU 9\",\"UNMU 12\",\"UNMU 24\",\"TERENE 6\",\"TERENE 9\",\"TERENE 12\",\"TERENE 24\"].includes(store.membership);for(let d=new Date(first);d<=second;d.setDate(d.getDate()+1)){const key=getKey(d);const category=categoryMap[key]??\"Weekday\";const basePrice=membershipPrices[\"Non-Member\"][category];basePrices.push(basePrice);let price;if(store.membership===\"Non-Member\"){price=basePrice;}else if(isUnmu){const limits=unmuDayLimits[store.membership];let categoryKey=\"Weekday\";if(category===\"Weekend\")categoryKey=\"Weekend\";else if(category===\"Peak-Weekday\"||category===\"Peak-Weekend\")categoryKey=\"Peak\";const current=categoryCount[categoryKey];const allowed=limits[categoryKey];if(current<allowed){price=Math.round(basePrice*1);}else{price=Math.round(basePrice*1)// 1.4였는데, 멤버쉽이 쿠폰화되면서 이부분은 아얘 폐지되는게 맞다고 생각함\n;}categoryCount[categoryKey]+=1;}else{// 'All-Free' case\nprice=0;}dailyItems.push({date:key,price,category});}// initialPrice는 basePrice만 더해서 계산\nconst initialPrice=basePrices.reduce((acc,val)=>acc+val,0);return{initialPrice,dailyItems};}/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport function filterCoupons(coupons,store,dailyItems){const{enteredCouponCode,signupDate}=store;const totalPrice=dailyItems.reduce((acc,i)=>acc+i.price,0);const stayLength=dailyItems.length;const stayDates=dailyItems.map(i=>i.date);const allCategories=new Set(dailyItems.map(i=>i.category));const now=getKSTDate();function kstEndOfDayFromYMD(ymd){const[y,m,d]=ymd.split(\"-\").map(v=>Number(v));return new Date(Date.UTC(y,m-1,d,14,59,59,999))// KST(UTC+9) 23:59:59.999\n;}// const codes = coupons\n//     .filter((c) => c.coupon_code && c.coupon_code[0] == \"H\") // code 필드가 존재하는 쿠폰만\n//     .map((c) => c.coupon_code as string) // 문자열로 추출\nconst passedCoupons=coupons.filter(c=>{if(!c.enabled)return false;if(c.type===\"code\"&&(!enteredCouponCode||!enteredCouponCode.includes(c.coupon_code))){// if (enteredCouponCode.length > 0 && c.coupon_code.includes(\"H8\"))\n//     alert(\n//         `A-1) entered: ${JSON.stringify(enteredCouponCode)}\\nc.coupon_code: ${c.coupon_code}\\n일치여부: ${enteredCouponCode.includes(c.coupon_code)}`\n//     )\nreturn false;}// // Check if validity_value (YYYY-MM-DD) is expired\n// if (c.validity_value) {\n//     const validityDate = new Date(`${c.validity_value}T00:00:00+09:00`) // KST\n//     // console.log(JSON.stringify(validityDate))\n//     // console.log(now)\n//     // console.log(validityDate < now)\n//     if (validityDate < now) {\n//         if (\n//             enteredCouponCode.length > 0 &&\n//             c.coupon_code.includes(\"H8\")\n//         )\n//             alert(`A-3`)\n//         return false\n//     }\n// }\nif(c.validity_value){const validityDate=kstEndOfDayFromYMD(c.validity_value);if(now.getTime()>validityDate.getTime()){// if (\n//     (enteredCouponCode?.length ?? 0) > 0 &&\n//     c.coupon_code?.includes(\"H8\")\n// )\n//     alert(`A-3`)\nreturn false;}}// Check if coupon_due (full ISO datetime) is expired\nif(c.coupon_due){const dueDate=new Date(c.coupon_due);if(dueDate<now){// if (\n//     enteredCouponCode.length > 0 &&\n//     c.coupon_code.includes(\"H8\")\n// )\n//     alert(`A-4`)\nreturn false;}}const conditions=Array.isArray(c.conditions_json)?c.conditions_json:[];for(const cond of conditions){if(cond.type===\"membership\"&&!cond.members.includes(store.membership)){return false;}if(cond.type===\"phase\"){// 1단계: phase 조건이 맞는지 확인\nif(!cond.phases.includes(store.phase)){return false;}}if(cond.type===\"revisit\"&&!cond.days.includes(store.revisit)){return false;}if(cond.type===\"minimum_price\"&&totalPrice<Number(cond.min??0)){return false;}if(cond.type===\"relay\"){if(stayLength<(Number(cond.min)??0))return false;if(cond.max&&stayLength>Number(cond.max))return false;}if(cond.type===\"date\"){const start=cond.startDate?getKSTDate(new Date(cond.startDate)):null;const end=cond.endDate?getKSTDate(new Date(cond.endDate)):null;const matched=stayDates.some(d=>{const date=getKSTDate(new Date(d));return(!start||date>=start)&&(!end||date<=end);});if(!matched){return false;}}if(cond.type===\"seasonal\"){const allowed=new Set(cond.allowedCategories||[]);const matched=[...allCategories].some(c=>allowed.has(c));if(!matched)return false;}}return true;});// if (enteredCouponCode && enteredCouponCode.length > 0)\n//     alert(\n//         `A-2) entered: ${enteredCouponCode}\\nexisting: ${codes}\\npassed: ${JSON.stringify(passedCoupons)}`\n//     )\nreturn{passedPrimaryCoupons:passedCoupons.filter(c=>c.discount_type===\"percentage\"&&c.type===\"global\"),passedSecondaryCoupons:passedCoupons.filter(c=>c.discount_type===\"percentage\"&&c.type===\"code\"||c.discount_type===\"fixed\")};}/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\n/////////////////////////////////////////////////////////////////////////////////////////////////////////\nexport function evaluateCoupons(primaryCoupons,secondaryCoupons,dailyItems,store){const totalPrice=dailyItems.reduce((sum,d)=>sum+d.price,0);// console.log(`total price: ${totalPrice}`)\nconst ignoredCodeCoupons=[];if(store?.membership===\"All-Free\"){const id=\"all-free\";const baseCoupon={id,name:id,description:id,amount:totalPrice};return{primaryDiscountedPrice:0,secondaryDiscountedPrice:0,primaryDetails:[baseCoupon],secondaryDetails:[]};}let primaryTotalDiscount=0;let secondaryTotalDiscount=0;const primaryDetailsMap1=new Map// Step 1\n;const primaryDetailsMap2=new Map// Step 2\n;const secondaryDetailsMap=new Map;const couponRemainingScope=new Map;for(const c of[...primaryCoupons,...secondaryCoupons]){const scope=c.scope??-1;couponRemainingScope.set(c.coupon_instance_id||c.coupon_definition_id,scope);}for(let i=0;i<dailyItems.length;i++){const day=dailyItems[i];// console.log(JSON.stringify(day))\nconst originalPrice=day.price;let primaryDiscountedPrice=originalPrice;const dateStr=day.date;// === Step 1: Primary Coupons ===\nfor(const coupon of primaryCoupons){if(coupon.discount_type!==\"percentage\")continue;const couponId=coupon.coupon_instance_id||coupon.coupon_definition_id;const remainingScope=couponRemainingScope.get(couponId);if(remainingScope===0)continue;const conditions=Array.isArray(coupon.conditions_json)?coupon.conditions_json:[];let skipCoupon=false;for(const cond of conditions){// Phase 조건 로직\nif(cond.type===\"phase\"){if(!cond.phases.includes(store?.phase)){skipCoupon=true;break;}// Phase-1이면 signup_date로부터 1년 지난 경우 skip\nif(store?.phase===\"Phase-1\"&&store.signup_date&&day.date// 현재 날짜 문자열\n){const signupDate=new Date(`${store.signup_date}T00:00:00+09:00`);const oneYearLater=new Date(signupDate);oneYearLater.setFullYear(oneYearLater.getFullYear()+1);const currentDate=getKSTDate(new Date(day.date));if(currentDate>oneYearLater){skipCoupon=true;break;}}}if(cond.type===\"relay\"&&i===0){skipCoupon=true;break;}if(cond.type===\"seasonal\"){const allowed=new Set(cond.allowedCategories||[]);if(!allowed.has(day.category)){skipCoupon=true;break;}}if(cond.type===\"date\"){const start=cond.startDate?getKSTDate(new Date(cond.startDate)):null;const end=cond.endDate?getKSTDate(new Date(cond.endDate)):null;const current=getKSTDate(new Date(dateStr));if(start&&current<start||end&&current>end){skipCoupon=true;break;}}}if(skipCoupon)continue;const discountValue=Number(coupon.discount_value);let max_amount=Infinity;for(const cond of conditions){if(cond.type===\"applied_discount\"&&cond.max){max_amount=Number(cond.max);}}let amount=Math.min(Math.round(originalPrice*(discountValue/100)),max_amount);// console.log(\n//     `[Primary][${dateStr}] Coupon: ${coupon.name} (${couponId}), Original Price: ${originalPrice}, Discount Value: ${discountValue}, Max Amount: ${max_amount}, Amount: ${amount}`\n// )\nif(primaryDiscountedPrice<amount)amount=primaryDiscountedPrice;if(amount>0){primaryDiscountedPrice-=amount;primaryTotalDiscount+=amount;const existing=primaryDetailsMap1.get(couponId);if(existing)existing.amount+=amount;else{primaryDetailsMap1.set(couponId,{id:couponId,name:coupon.name,description:coupon.description,amount});}if(remainingScope>0){couponRemainingScope.set(couponId,remainingScope-1);}}}// === Step 2: Membership Coupon ===\nconst membershipCoupon=store?.membershipCouponByDate?.[dateStr];const def=membershipCoupon?.definition;if(membershipCoupon&&def){const discountValue=Number(def.discount_value);let amount=0;if(def.discount_type===\"percentage\"){amount=Math.round(primaryDiscountedPrice*(discountValue/100));}else if(def.discount_type===\"fixed\"){amount=discountValue;}if(primaryDiscountedPrice<amount)amount=primaryDiscountedPrice;if(amount>0){primaryDiscountedPrice-=amount;primaryTotalDiscount+=amount;const id=membershipCoupon.coupon_instance_id;const existing=primaryDetailsMap2.get(id);if(existing)existing.amount+=amount;else{primaryDetailsMap2.set(id,{id,name:membershipCoupon.name??id,description:def.description??\"\",amount});}}}let secondaryDiscountedPrice=primaryDiscountedPrice;// === Step 3: Secondary Coupons (percentage only) ===\nfor(const coupon of secondaryCoupons){if(coupon.discount_type!==\"percentage\")continue;const couponId=coupon.coupon_instance_id||coupon.coupon_definition_id;const remainingScope=couponRemainingScope.get(couponId);if(remainingScope===0)continue;const conditions=Array.isArray(coupon.conditions_json)?coupon.conditions_json:[];let skipCoupon=false;for(const cond of conditions){// Phase 조건 로직\nif(cond.type===\"phase\"){if(!cond.phases.includes(store?.phase)){skipCoupon=true;break;}// Phase-1이면 signup_date로부터 1년 지난 경우 skip\nif(store?.phase===\"Phase-1\"&&store.signup_date&&day.date// 현재 날짜 문자열\n){const signupDate=new Date(`${store.signup_date}T00:00:00+09:00`);const oneYearLater=new Date(signupDate);oneYearLater.setFullYear(oneYearLater.getFullYear()+1);const currentDate=getKSTDate(new Date(day.date));if(currentDate>oneYearLater){skipCoupon=true;break;}}}if(cond.type===\"relay\"&&i===0){skipCoupon=true;break;}if(cond.type===\"seasonal\"){const allowed=new Set(cond.allowedCategories||[]);if(!allowed.has(day.category)){skipCoupon=true;break;}}if(cond.type===\"date\"){const start=cond.startDate?getKSTDate(new Date(cond.startDate)):null;const end=cond.endDate?getKSTDate(new Date(cond.endDate)):null;const current=getKSTDate(new Date(dateStr));if(start&&current<start||end&&current>end){skipCoupon=true;break;}}}if(skipCoupon)continue;const discountValue=Number(coupon.discount_value);let max_amount=Infinity;for(const cond of conditions){if(cond.type===\"applied_discount\"&&cond.max){max_amount=Number(cond.max);}}let amount=Math.min(Math.round(primaryDiscountedPrice*(discountValue/100)),max_amount);if(secondaryDiscountedPrice<amount)amount=secondaryDiscountedPrice;if(amount>0){secondaryDiscountedPrice-=amount;secondaryTotalDiscount+=amount;const existing=secondaryDetailsMap.get(couponId);if(existing)existing.amount+=amount;else{secondaryDetailsMap.set(couponId,{id:couponId,name:coupon.name,description:coupon.description,amount});}if(remainingScope>0){couponRemainingScope.set(couponId,remainingScope-1);}}}}const primaryDiscountedPrice=totalPrice-primaryTotalDiscount;// === Step 4: Remaining secondary coupons ===\nfor(const coupon of secondaryCoupons){if(coupon.discount_type!==\"fixed\")continue;const couponId=coupon.coupon_instance_id||coupon.coupon_definition_id;if(secondaryDetailsMap.has(couponId))continue;const discountValue=Number(coupon.discount_value);const amount=Math.min(discountValue,primaryDiscountedPrice-secondaryTotalDiscount);secondaryTotalDiscount+=amount;secondaryDetailsMap.set(couponId,{id:couponId,name:coupon.name,description:coupon.description,amount});}{const mileage=Math.max(0,Math.floor(Number(store?.usedMileage??0)));if(mileage>0){const remaining=Math.max(0,primaryDiscountedPrice-secondaryTotalDiscount);const applied=Math.min(mileage,remaining);if(applied>0){secondaryTotalDiscount+=applied;secondaryDetailsMap.set(`MI-${mileage}`,{id:`MI-${mileage}`,name:`마일리지 ${mileage.toLocaleString()}p`,description:`마일리지 ${mileage.toLocaleString()}p`,amount:applied});}}}const primaryDetails=[...primaryDetailsMap1.values(),...primaryDetailsMap2.values()];// console.log(JSON.stringify(primaryDetails))\nconst secondaryDiscountedPrice=primaryDiscountedPrice-secondaryTotalDiscount;return{primaryDiscountedPrice,secondaryDiscountedPrice,primaryDetails:primaryDetails,secondaryDetails:Array.from(secondaryDetailsMap.values())};}\nexport const __FramerMetadata__ = {\"exports\":{\"CategoryMap\":{\"type\":\"tsType\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"calculateInitialPrices\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"evaluateCoupons\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"filterCoupons\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./EvaluateCoupons.map","// AdditionalService.tsx\nimport{jsx as _jsx}from\"react/jsx-runtime\";import{createStore}from\"https://framer.com/m/framer/store.js@^1.0.0\";const useAdditionalServiceStore=createStore({adult:1,teenager:0,child:0,// UNDER CONSTRUCTION /////////////////////////////////////\ncheckedBBQGrill:false,checkedBBQFood:false,checkedStretch:false,checkedCatering:false,BBQGrillValue:\"0회\",BBQFoodValue:\"인원수\",StretchValue:\"인원수\",CateringValue:\"인원수\",BBQGrillPrice:25e3,BBQFoodPrice:2e4,StretchPrice:0,CateringPrice:0});function extractNumber(value){const match=value.match(/^(\\d+)(인|회)$/);return match?Number(match[1]):0;}export function createAdditionalServiceList(myStore,store){// UNDER CONSTRUCTION /////////////////////////////////////\nconst serviceKeys=[\"BBQGrill\",\"BBQFood\",\"Stretch\",\"Catering\"];const labels={BBQGrill:\"BBQ 용품 준비\",BBQFood:\"BBQ 식재료 준비\",Stretch:\"모닝 스트레칭 클래스\",Catering:\"케이터링 서비스\"};const excludeValues=[\"인원수\",\"횟수\",\"0회\"];if(store.membership===\"All-Free\"){return serviceKeys.filter(key=>myStore[`checked${key}`]&&!excludeValues.includes(myStore[`${key}Value`])).map(key=>({type:labels[key],amount:0}));}return serviceKeys.filter(key=>myStore[`checked${key}`]&&!excludeValues.includes(myStore[`${key}Value`])).map(key=>({type:labels[key],amount:extractNumber(myStore[`${key}Value`])*myStore[`${key}Price`]}));}const TOTAL_MAX=10;const ADULT_MIN=1;const ADULT_MAX=8;const TEENAGER_MIN=0;const TEENAGER_MAX=6;const CHILD_MIN=0;const CHILD_MAX=8;// 텍스트 표시: 성인 n명\nexport function displayAdult(Component){return props=>{const[store]=useAdditionalServiceStore();const label=`성인   ${store.adult}명`;return /*#__PURE__*/_jsx(Component,{...props,text:label});};}// 텍스트 표시: 청소년/아동 n명\nexport function displayTeenager(Component){return props=>{const[store]=useAdditionalServiceStore();const label=`청소년/아동   ${store.teenager}명`;return /*#__PURE__*/_jsx(Component,{...props,text:label});};}// 텍스트 표시: 영유아 n명\nexport function displayChild(Component){return props=>{const[store]=useAdditionalServiceStore();const label=`영유아   ${store.child}명`;return /*#__PURE__*/_jsx(Component,{...props,text:label});};}// ✅ 체크 상태 토글 버튼\nexport function toggleBBQGrill(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const toggle=()=>{setStore({checkedBBQGrill:!store.checkedBBQGrill});};return /*#__PURE__*/_jsx(Component,{...props,onClick:toggle});};}export function toggleBBQFood(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const toggle=()=>{setStore({checkedBBQFood:!store.checkedBBQFood});};return /*#__PURE__*/_jsx(Component,{...props,onClick:toggle});};}export function toggleStretch(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const toggle=()=>{setStore({checkedStretch:!store.checkedStretch});};return /*#__PURE__*/_jsx(Component,{...props,onClick:toggle});};}export function toggleCatering(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const toggle=()=>{setStore({checkedCatering:!store.checkedCatering});};return /*#__PURE__*/_jsx(Component,{...props,onClick:toggle});};}export function handleBBQGrillDropdown(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const handleChange=event=>{const selectedValue=event.target.value;setStore({BBQGrillValue:selectedValue});};return /*#__PURE__*/_jsx(Component,{...props,value:store.BBQGrillValue,onChange:handleChange});};}export function handleBBQFoodDropdown(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const handleChange=event=>{const selectedValue=event.target.value;setStore({BBQFoodValue:selectedValue});};return /*#__PURE__*/_jsx(Component,{...props,value:store.BBQFoodValue,onChange:handleChange});};}export function handleStretchDropdown(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const handleChange=event=>{const selectedValue=event.target.value;setStore({StretchValue:selectedValue});};return /*#__PURE__*/_jsx(Component,{...props,value:store.StretchValue,onChange:handleChange});};}export function handleCateringDropdown(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const handleChange=event=>{const selectedValue=event.target.value;setStore({CateringValue:selectedValue});};return /*#__PURE__*/_jsx(Component,{...props,value:store.CateringValue,onChange:handleChange});};}// 증가 버튼: 성인\nexport function incrementAdult(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const increment=()=>{const total=store.adult+store.teenager;if(store.adult<ADULT_MAX&&total<TOTAL_MAX){setStore({adult:store.adult+1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:increment});};}// 감소 버튼: 성인\nexport function decrementAdult(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const decrement=()=>{if(store.adult>ADULT_MIN){setStore({adult:store.adult-1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:decrement});};}// 증가 버튼: 청소년/아동\nexport function incrementTeenager(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const increment=()=>{const total=store.adult+store.teenager;if(store.teenager<TEENAGER_MAX&&total<TOTAL_MAX){setStore({teenager:store.teenager+1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:increment});};}// 감소 버튼: 청소년/아동\nexport function decrementTeenager(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const decrement=()=>{if(store.teenager>TEENAGER_MIN){setStore({teenager:store.teenager-1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:decrement});};}// 증가 버튼: 영유아\nexport function incrementChild(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const increment=()=>{if(store.child<CHILD_MAX){setStore({child:store.child+1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:increment});};}// 감소 버튼: 영유아\nexport function decrementChild(Component){return props=>{const[store,setStore]=useAdditionalServiceStore();const decrement=()=>{if(store.child>CHILD_MIN){setStore({child:store.child-1});}};return /*#__PURE__*/_jsx(Component,{...props,onClick:decrement});};}export{useAdditionalServiceStore};\nexport const __FramerMetadata__ = {\"exports\":{\"decrementChild\":{\"type\":\"reactHoc\",\"name\":\"decrementChild\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"createAdditionalServiceList\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"decrementTeenager\":{\"type\":\"reactHoc\",\"name\":\"decrementTeenager\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toggleStretch\":{\"type\":\"reactHoc\",\"name\":\"toggleStretch\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useAdditionalServiceStore\":{\"type\":\"variable\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"incrementAdult\":{\"type\":\"reactHoc\",\"name\":\"incrementAdult\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleCateringDropdown\":{\"type\":\"reactHoc\",\"name\":\"handleCateringDropdown\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"incrementTeenager\":{\"type\":\"reactHoc\",\"name\":\"incrementTeenager\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toggleCatering\":{\"type\":\"reactHoc\",\"name\":\"toggleCatering\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toggleBBQGrill\":{\"type\":\"reactHoc\",\"name\":\"toggleBBQGrill\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"decrementAdult\":{\"type\":\"reactHoc\",\"name\":\"decrementAdult\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleBBQGrillDropdown\":{\"type\":\"reactHoc\",\"name\":\"handleBBQGrillDropdown\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"incrementChild\":{\"type\":\"reactHoc\",\"name\":\"incrementChild\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleBBQFoodDropdown\":{\"type\":\"reactHoc\",\"name\":\"handleBBQFoodDropdown\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"toggleBBQFood\":{\"type\":\"reactHoc\",\"name\":\"toggleBBQFood\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayChild\":{\"type\":\"reactHoc\",\"name\":\"displayChild\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayAdult\":{\"type\":\"reactHoc\",\"name\":\"displayAdult\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayTeenager\":{\"type\":\"reactHoc\",\"name\":\"displayTeenager\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"handleStretchDropdown\":{\"type\":\"reactHoc\",\"name\":\"handleStretchDropdown\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}\n//# sourceMappingURL=./AdditionalService.map","// PriceDisplay.tsx\nimport{jsx as _jsx}from\"react/jsx-runtime\";import*as React from\"react\";import{useStore}from\"https://framerusercontent.com/modules/r9TbzE6j44OxXp6KiYut/76RwL1AAv8XI9yZuFC7J/MonthDisplay.js\";import{useEffect,useMemo}from\"react\";import{calculateInitialPrices,filterCoupons,evaluateCoupons}from\"https://framerusercontent.com/modules/jTRIrvvdhM8hGc8tF4E7/ZCyp1o7IV63uf86HyteE/EvaluateCoupons.js\";import{useAdditionalServiceStore,createAdditionalServiceList}from\"https://framerusercontent.com/modules/k847LPNIMdkhfIs0ouwF/zZcxUVwpGbqqXUtyuYdM/AdditionalService.js\";import{parseDate}from\"https://framerusercontent.com/modules/OM3DCPQsxhCoiGUHGyyF/DWNIDoVFboSSlPAr2Pfp/CheckAuth.js\";import{motion}from\"framer-motion\";const FadeIn=({children})=>/*#__PURE__*/_jsx(motion.div,{initial:{opacity:0,y:0},animate:{opacity:1,y:0},exit:{opacity:0,y:0},transition:{duration:.4,ease:\"easeOut\"},children:children});// ✅ 공휴일 카테고리 가져오기\nexport function useHolidayCategoryMap(){const[categories,setCategories]=React.useState({});const[isLoading,setIsLoading]=React.useState(true);React.useEffect(()=>{// UNDER CONSTRUCTION /////////////////////////////////////\nfetch(\"https://terene-db-server.onrender.com/api/days\").then(res=>res.json()).then(data=>{const map={};for(const item of data){map[item.date]=item.category;}setCategories(map);}).catch(err=>console.error(\"Holiday fetch error\",err)).finally(()=>setIsLoading(false));},[]);return{categories,isLoading};}// ✅ 문자열 → 카테고리 매핑\nexport function toCategoryMap(input){const allowed=[// UNDER CONSTRUCTION /////////////////////////////////////\n\"Weekday\",\"Weekend\",\"Peak-Weekday\",\"Peak-Weekend\"];const result={};for(const key in input){const value=input[key];result[key]=allowed.includes(value)?value:\"Weekday\";}return result;}export function useCoupons(){const[coupons,setCoupons]=React.useState([]);const[isLoading,setIsLoading]=React.useState(true);React.useEffect(()=>{async function fetchCoupons(){try{// Fetch definitions first\nconst defRes=await fetch(\"https://terene-db-server.onrender.com/api/v2/coupon-definitions\");const definitions=await defRes.json();// Separate global and code types (ignore membership)\nconst globalDefs=definitions.filter(def=>def.type===\"global\");const codeDefs=definitions.filter(def=>def.type===\"code\");// Fetch instances only if there are code definitions\nlet codeInstances=[];if(codeDefs.length>0){const instRes=await fetch(\"https://terene-db-server.onrender.com/api/v2/coupon-instances\");const instances=await instRes.json();codeInstances=instances.filter(inst=>codeDefs.some(def=>def.coupon_definition_id===inst.coupon_definition_id));}// Merge code definitions and their instances\nconst codeCoupons=codeInstances.map(inst=>{const def=codeDefs.find(d=>d.coupon_definition_id===inst.coupon_definition_id);return{...def,...inst};});// Combine global and code coupons\nconst combined=[...globalDefs,...codeCoupons];// Sort by optional priority if present\nconst sorted=combined.sort((a,b)=>(a.priority||0)-(b.priority||0));setCoupons(sorted);}catch(err){console.error(\"Coupon fetch error:\",err);}finally{setIsLoading(false);}}fetchCoupons();},[]);return{coupons,isLoading};}function useDiscountCalculation(){const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isReady=store.firstDate&&store.secondDate||firstDate&&secondDate;const result=useMemo(()=>{if(!isReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{initialPrice,dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);return{initialPrice,discountedPrice};},[store,categories,coupons,firstDate,secondDate,categoryLoading,couponLoading]);return{isLoading:!isReady||categoryLoading||couponLoading,data:result};}// ✅ 안전하게 날짜가 모두 존재할 때만 가격 계산 및 렌더링\nexport function displayInitialPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();// console.log(\"### COUPONS ###\")\n// console.log(JSON.stringify(coupons))\nconst isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{initialPrice}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);return(// <FadeIn>\n/*#__PURE__*/_jsx(Component,{...props,text:initialPrice>0?initialPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\"}));};}export function displayDiscountedPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:discountedPrice>0?discountedPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\"})});};}function transitionStyle(visible){return{opacity:visible?1:0,color:\"inherit\",transition:\"opacity 0.3s ease-in-out\",display:\"inline-block\"};}export function displayDiscountBar(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{initialPrice,dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);const show=initialPrice!==Math.max(discountedPrice,0);const baseStyle=transitionStyle(show);const width=initialPrice>=1e8?144:initialPrice>=1e7?128:112;const barStyle={...baseStyle,width,position:\"relative\",right:0,transform:`translateX(${92-width}px)`};// <Component {...props} style={barStyle} />\nreturn /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,style:baseStyle})});};}export function displaySoftInitialPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{initialPrice}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:initialPrice>0?initialPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\"})});};}export function getAdditionalPrice(){const[store]=useStore();const[additionalServiceStore]=useAdditionalServiceStore();const additionalServiceList=createAdditionalServiceList(additionalServiceStore,store);const totalAmount=additionalServiceList.reduce((sum,service)=>{return sum+service.amount;},0);return totalAmount;}export function displayIntegratedPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const additionalPrice=getAdditionalPrice();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);const integratedPrice=store.membership===\"All-Free\"?0:Math.max(discountedPrice,0)+additionalPrice;const text=integratedPrice>0?integratedPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\";return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:text})});};}export function displayVatPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const additionalPrice=getAdditionalPrice();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);const integratedPrice=Math.max(discountedPrice,0)+additionalPrice;const vatPrice=store.membership===\"All-Free\"?0:Math.round(integratedPrice*.1);const text=vatPrice>0?vatPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\";return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:text})});};}export function displayDepositPrice(Component){const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;return props=>{const[store]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;if(!isStoreReady||categoryLoading||couponLoading)return null;const depositPrice=store.membership===\"Non-Member\"?3e5:0;const text=depositPrice>0?depositPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\";return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:text})});};}export function displayFinalPrice(Component){return props=>{const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store,setStore]=useStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const additionalPrice=getAdditionalPrice();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;const priceData=useMemo(()=>{if(!isStoreReady||categoryLoading||couponLoading)return null;const categoryMap=toCategoryMap(categories);const{dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const initialPrice=dailyItems.reduce((sum,item)=>sum+item.price,0);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{secondaryDiscountedPrice:discountedPrice,primaryDetails,secondaryDetails}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);const integratedPrice=store.membership===\"All-Free\"?0:Math.max(discountedPrice,0)+additionalPrice;const vatPrice=Math.round(integratedPrice*.1);const depositPrice=store.membership===\"Non-Member\"?3e5:0;const finalPrice=store.membership===\"All-Free\"?0:integratedPrice+vatPrice+depositPrice;const text=finalPrice>0?finalPrice.toLocaleString(\"ko-KR\")+\" 원\":\"0 원\";return{initialPrice,discountedPrice,additionalPrice,integratedPrice,vatPrice,depositPrice,finalPrice,text,primaryDetails,secondaryDetails};},[isStoreReady,categoryLoading,couponLoading,store,categories,coupons,additionalPrice]);useEffect(()=>{if(!priceData)return;setStore(prev=>{const isSame=prev.finalPrice===priceData.finalPrice&&prev.initialPrice===priceData.initialPrice&&prev.discountedPrice===priceData.discountedPrice&&prev.additionalPrice===priceData.additionalPrice&&prev.integratedPrice===priceData.integratedPrice&&prev.vatPrice===priceData.vatPrice&&prev.depositPrice===priceData.depositPrice;if(isSame)return prev;return{...prev,initialPrice:priceData.initialPrice,discountedPrice:priceData.discountedPrice,additionalPrice:priceData.additionalPrice,integratedPrice:priceData.integratedPrice,vatPrice:priceData.vatPrice,depositPrice:priceData.depositPrice,finalPrice:priceData.finalPrice,couponPrimaryDetails:priceData.primaryDetails,couponSecondaryDetails:priceData.secondaryDetails};});},[priceData?.initialPrice,priceData?.discountedPrice,priceData?.additionalPrice,priceData?.integratedPrice,priceData?.vatPrice,priceData?.depositPrice,priceData?.finalPrice]);if(!priceData)return null;console.log(priceData?.finalPrice);return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsx(Component,{...props,text:priceData.text})});};}\nexport const __FramerMetadata__ = {\"exports\":{\"toCategoryMap\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayDiscountedPrice\":{\"type\":\"reactHoc\",\"name\":\"displayDiscountedPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayDepositPrice\":{\"type\":\"reactHoc\",\"name\":\"displayDepositPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayDiscountBar\":{\"type\":\"reactHoc\",\"name\":\"displayDiscountBar\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayFinalPrice\":{\"type\":\"reactHoc\",\"name\":\"displayFinalPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayInitialPrice\":{\"type\":\"reactHoc\",\"name\":\"displayInitialPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useCoupons\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"useHolidayCategoryMap\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displaySoftInitialPrice\":{\"type\":\"reactHoc\",\"name\":\"displaySoftInitialPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayVatPrice\":{\"type\":\"reactHoc\",\"name\":\"displayVatPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"getAdditionalPrice\":{\"type\":\"function\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"displayIntegratedPrice\":{\"type\":\"reactHoc\",\"name\":\"displayIntegratedPrice\",\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}","// ReceiptLabelComponent.tsx\nimport{jsx as _jsx,jsxs as _jsxs}from\"react/jsx-runtime\";import{addPropertyControls,ControlType}from\"framer\";import{useStore}from\"https://framerusercontent.com/modules/r9TbzE6j44OxXp6KiYut/76RwL1AAv8XI9yZuFC7J/MonthDisplay.js\";import{useHolidayCategoryMap,useCoupons,toCategoryMap}from\"https://framerusercontent.com/modules/t32tReeHmrCTzbf5rVbb/knSGzr9CgEPGu2eKytEM/PriceDisplay.js\";import{calculateInitialPrices,filterCoupons,evaluateCoupons}from\"https://framerusercontent.com/modules/jTRIrvvdhM8hGc8tF4E7/ZCyp1o7IV63uf86HyteE/EvaluateCoupons.js\";import{useAdditionalServiceStore,createAdditionalServiceList}from\"https://framerusercontent.com/modules/k847LPNIMdkhfIs0ouwF/zZcxUVwpGbqqXUtyuYdM/AdditionalService.js\";import{parseDate}from\"https://framerusercontent.com/modules/OM3DCPQsxhCoiGUHGyyF/DWNIDoVFboSSlPAr2Pfp/CheckAuth.js\";import{motion}from\"framer-motion\";const FadeIn=({children})=>/*#__PURE__*/_jsx(motion.div,{initial:{opacity:0,y:0},animate:{opacity:1,y:0},exit:{opacity:0,y:0},transition:{duration:.4,ease:\"easeOut\"},children:children});export function ReceiptLabelComponent({variant}){const queryParams=new URLSearchParams(window.location.search);const first=queryParams.get(\"first\");const second=queryParams.get(\"second\");const firstDate=first?parseDate(first):null;const secondDate=second?parseDate(second):null;const[store]=useStore();const[additionalServiceStore]=useAdditionalServiceStore();const{categories,isLoading:categoryLoading}=useHolidayCategoryMap();const{coupons,isLoading:couponLoading}=useCoupons();const isStoreReady=store.firstDate&&store.secondDate||firstDate&&secondDate;// v2 + Mobile 포함하도록 확장\nconst isPrimary=variant===\"Primary\"||variant===\"PrimaryMobile\";const isSecondary=variant===\"Secondary\"||variant===\"SecondaryMobile\";const isAdditional=variant.startsWith(\"Additional\");const isReceiptLike=variant.startsWith(\"Receipt\")||variant.startsWith(\"Primary\")||variant.startsWith(\"Secondary\");if(!isStoreReady||categoryLoading||couponLoading)return /*#__PURE__*/_jsxs(\"div\",{style:getRowStyle(variant),children:[/*#__PURE__*/_jsx(\"div\",{style:{...getMainLabelStyle(variant),display:\"flex\",justifyContent:\"space-between\",width:\"100%\"},children:/*#__PURE__*/_jsx(\"span\",{children:isPrimary?\"객실요금\":isSecondary?\"특별할인\":isReceiptLike?\"할인요금\":isAdditional?\"추가 서비스 이용료\":\"기본할인\"})}),/*#__PURE__*/_jsx(\"div\",{style:couponContainerStyle(variant),children:/*#__PURE__*/_jsx(\"div\",{style:getLineStyle(variant)})})]});const categoryMap=toCategoryMap(categories);const{initialPrice,dailyItems}=calculateInitialPrices(store,categoryMap,firstDate,secondDate);const{passedPrimaryCoupons,passedSecondaryCoupons}=filterCoupons(coupons,store,dailyItems);const{primaryDiscountedPrice,primaryDetails,secondaryDetails}=evaluateCoupons(passedPrimaryCoupons,passedSecondaryCoupons,dailyItems,store);const additionalServiceList=createAdditionalServiceList(additionalServiceStore,store);const couponDetailsToRender=isPrimary?primaryDetails:isSecondary?secondaryDetails:[];// ▼ 새로 추가: 헤더 우측에 표시할 합계들\nconst secondaryTotal=secondaryDetails?.reduce((sum,item)=>sum+(item?.amount||0),0);const additionalTotal=additionalServiceList?.reduce((sum,item)=>sum+(item?.amount||0),0);return /*#__PURE__*/_jsx(FadeIn,{children:/*#__PURE__*/_jsxs(\"div\",{style:getRowStyle(variant),children:[/*#__PURE__*/_jsxs(\"div\",{style:{...getMainLabelStyle(variant),display:\"flex\",justifyContent:\"space-between\",width:\"100%\"},children:[/*#__PURE__*/_jsx(\"span\",{children:isPrimary?\"객실요금\":isSecondary?\"특별할인\":isReceiptLike?\"할인요금\":isAdditional?\"추가 서비스 이용료\":\"기본할인\"}),isPrimary&&/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,true),children:[primaryDiscountedPrice.toLocaleString(\"ko-KR\"),\" 원\"]}),isSecondary&&/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,true),children:[\"-\",secondaryTotal.toLocaleString(\"ko-KR\"),\" 원\"]}),isAdditional&&/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,true),children:[\"+\",additionalTotal.toLocaleString(\"ko-KR\"),\" 원\"]})]}),isPrimary&&/*#__PURE__*/_jsx(\"div\",{style:getLineStyle(variant),children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",width:\"100%\"},children:[/*#__PURE__*/_jsx(\"span\",{style:getLeftDescriptionStyle(variant),children:\"기본요금\"}),/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,false),children:[initialPrice.toLocaleString(\"ko-KR\"),\" 원\"]})]})}),/*#__PURE__*/_jsx(\"div\",{style:couponContainerStyle(variant),children:isAdditional?additionalServiceList.map(({type,amount})=>/*#__PURE__*/_jsx(\"div\",{style:getLineStyle(variant),children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",width:\"100%\"},children:[/*#__PURE__*/_jsx(\"span\",{style:getLeftDescriptionStyle(variant),children:type}),/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,false),children:[\"+\",amount.toLocaleString(\"ko-KR\"),\" 원\"]})]})},type)):couponDetailsToRender.map(({id,name,description,amount})=>{const label=id===\"phase-1\"?`Phase-1 계정 숙박비 전액 할인`:id===\"all-free\"?\"Admin 계정 전액 할인\":description||name||id;return /*#__PURE__*/_jsx(\"div\",{style:getLineStyle(variant),children:/*#__PURE__*/_jsxs(\"div\",{style:{display:\"flex\",justifyContent:\"space-between\",width:\"100%\"},children:[/*#__PURE__*/_jsx(\"span\",{style:getLeftDescriptionStyle(variant),children:label}),isReceiptLike&&/*#__PURE__*/_jsxs(\"span\",{style:getRightPriceStyle(variant,false),children:[\"-\",amount.toLocaleString(\"ko-KR\"),\" \",\"원\"]})]})},id);})})]})});}// ===== 스타일 함수 =====\nfunction getRowStyle(variant){const base={display:\"flex\"};switch(variant){case\"Receipt\":case\"ReceiptMobile\":case\"Additional\":case\"AdditionalMobile\":case\"Primary\":case\"PrimaryMobile\":case\"Secondary\":case\"SecondaryMobile\":return{...base,flexDirection:\"column\",alignItems:\"flex-start\",width:\"100%\",gap:\"15px\"};case\"CalendarMobile\":return{...base,flexDirection:\"row\",alignItems:\"center\",gap:\"14px\"};default:return{...base,flexDirection:\"row\",alignItems:\"flex-start\",gap:\"14px\"};}}function getMainLabelStyle(variant){const base={display:\"flex\",alignItems:\"center\"};switch(variant){case\"Receipt\":case\"Primary\":case\"Secondary\":return{...base,fontFamily:\"Pretendard Regular, sans-serif\",fontSize:\"14px\",height:\"18px\",width:\"100%\",color:\"#000000\"};case\"PrimaryMobile\":case\"SecondaryMobile\":return{...base,fontFamily:\"Pretendard Regular, sans-serif\",fontSize:\"12px\",height:\"18px\",width:\"100%\",color:\"#000000\"};case\"ReceiptMobile\":return{...base,fontFamily:\"Pretendard Regular, sans-serif\",fontSize:\"12px\",height:\"18px\",width:\"100%\",color:\"#000000\"};case\"Additional\":return{...base,fontFamily:\"Pretendard Regular, sans-serif\",fontSize:\"14px\",height:\"18px\",width:\"104px\",color:\"#000000\"};case\"AdditionalMobile\":return{...base,fontFamily:\"Pretendard Regular, sans-serif\",fontSize:\"12px\",height:\"18px\",width:\"89px\",color:\"#000000\"};case\"CalendarMobile\":return{...base,fontFamily:\"Pretendard Light, sans-serif\",fontSize:\"12px\",height:\"20px\",width:\"42px\",color:\"#000000\"};case\"Calendar\":default:return{...base,fontFamily:\"Pretendard Light, sans-serif\",fontSize:\"16px\",height:\"20px\",width:\"56px\",color:\"#000000\"};}}function couponContainerStyle(variant){return{display:\"flex\",flexDirection:\"column\",gap:\"10px\",width:\"100%\",flex:1};}function getLineStyle(variant){const isReceiptOrAdditionalOrV2=variant.startsWith(\"Receipt\")||variant.startsWith(\"Additional\")||variant.startsWith(\"Primary\")||variant.startsWith(\"Secondary\");return{display:\"flex\",alignItems:\"center\",width:\"100%\",...isReceiptOrAdditionalOrV2?{height:\"18px\"}:{}};}function getLeftDescriptionStyle(variant){return{fontFamily:\"Pretendard Light, sans-serif\",fontSize:[\"ReceiptMobile\",\"AdditionalMobile\",\"PrimaryMobile\",\"SecondaryMobile\"].includes(variant)?\"9px\":\"12px\",color:\"#4D4D4D\"};}// 헬퍼: 어떤 variant가 모바일인지 체크\nfunction isMobileVariant(variant){return[\"ReceiptMobile\",\"AdditionalMobile\",\"PrimaryMobile\",\"SecondaryMobile\"].includes(variant);}// 교체 버전\nfunction getRightPriceStyle(variant,emphasized){const mobile=isMobileVariant(variant);return{fontFamily:emphasized?\"Pretendard Regular, sans-serif\":\"Pretendard Light, sans-serif\",fontWeight:300,fontSize:mobile?emphasized?\"12px\":\"9px\":emphasized?\"14px\":\"12px\",color:emphasized?\"#000000\":\"#4D4D4D\",whiteSpace:\"nowrap\"};}addPropertyControls(ReceiptLabelComponent,{variant:{type:ControlType.Enum,title:\"Variant\",options:[\"Calendar\",\"CalendarMobile\",\"Receipt\",\"ReceiptMobile\",\"Additional\",\"AdditionalMobile\",\"Primary\",\"PrimaryMobile\",\"Secondary\",\"SecondaryMobile\"],optionTitles:[\"객실요금\",\"객실요금 Mobile\",\"할인요금\",\"할인요금 Mobile\",\"추가 서비스 이용료\",\"추가 서비스 이용료 Mobile\",\"객실요금_v2\",\"객실요금_v2 Mobile\",\"특별할인_v2\",\"특별할인_v2 Mobile\"],defaultValue:\"Receipt\"}});\nexport const __FramerMetadata__ = {\"exports\":{\"ReceiptLabelComponent\":{\"type\":\"reactComponent\",\"name\":\"ReceiptLabelComponent\",\"slots\":[],\"annotations\":{\"framerContractVersion\":\"1\"}},\"__FramerMetadata__\":{\"type\":\"variable\"}}}"],"mappings":"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"}