1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9621],{19621:(e,a,r)=>{r.r(a),r.d(a,{default:()=>A});var t=r(85047),s=r(31615),i=r(82520),c=r(21410),d=r(6386),l=r(38187),n=r(41178),o=r(73521),m=r(24571),g=r(76458),x=r(15418);let p=x.Ik({id:x.Yj().min(1),rewardId:x.Yj().min(1),userId:x.Yj().min(1),redeemedAt:x.Yj().min(1),used:x.zM(),cost:x.ai().finite()});function u(){if(!g.db)throw Error("Firestore å°æªåå§å");return g.db}async function h(e){let a=u();if(!e)throw Error("ç¨æ¶ ID æªæä¾");let r=(0,m.rJ)(a,"users",e,"rewards"),t=(0,m.P)(r,(0,m.My)("redeemedAt","desc")),s=await (0,m.GG)(t),i=[];for(let e of s.docs){let a=p.safeParse({id:e.id,...e.data()});a.success&&i.push(a.data)}return i}async function y(e,a){let r=u();if(!e)throw Error("ç¨æ¶ ID æªæä¾");let t=p.parse(a);await (0,m.setDoc)((0,m.doc)(r,"users",e,"rewards",t.id),t)}var b=r(19548);let j=[{id:"feature_theme",name:"客製å主é¡",description:"è§£éæ´å¤å人å主é¡é¸é
",cost:200,category:"feature",icon:"\uD83C\uDFA8",available:!0},{id:"physical_gift_100",name:"禮åå¡ $100",description:"å¯å
æçå¼ååææå",cost:1e3,category:"physical",icon:"\uD83C\uDF81",available:!0},{id:"physical_consult",name:"å
費顧åè«®è©¢ä¹æ¬¡",description:"å°æ¥ç財顧å財åè«®è©¢ä¹æ¬¡",cost:1500,category:"physical",icon:"\uD83D\uDCBC",available:!0}],v=[{id:"stage_foundation",name:"åºç¤ç¤é»",description:"宿ãåºç¤ç¤é»ãéæ®µï¼å¸³æ¶ãæ¶æ¯ãçæ¥",cost:0,category:"badge",icon:"\uD83E\uDDED",available:!0,rarity:"common"},{id:"stage_balance_sheet",name:"è³ç¢è² åµ",description:"宿ãè³ç¢è² åµãéæ®µï¼è³ç¢èè² åµç¤é»",cost:0,category:"badge",icon:"\uD83D\uDCD2",available:!0,rarity:"common"},{id:"stage_protection",name:"ä¿éå°ä½",description:"宿ãä¿éè風éªãéæ®µï¼ä¿éªèç·æ¥é åé",cost:0,category:"badge",icon:"\uD83D\uDEE1ï¸",available:!0,rarity:"rare"},{id:"stage_planning",name:"è¦åå®å",description:"宿ãé·æè¦åãéæ®µï¼æè³ãéä¼è©¦ç®ã財åç®æ¨",cost:0,category:"badge",icon:"\uD83C\uDFAF",available:!0,rarity:"rare"},{id:"stage_legacy",name:"峿¿æåº",description:"宿ã峿¿ãéæ®µï¼å³æ¿è¦åèä¿¡è¨",cost:0,category:"badge",icon:"\uD83D\uDD4Aï¸",available:!0,rarity:"epic"},{id:"data_100",name:"å
¨æ¯è¦é",description:"è³æå®æ´åº¦é 100%",cost:0,category:"badge",icon:"\uD83C\uDFC6",available:!0,rarity:"legendary"},{id:"emergency_fund_3m",name:"å®å
¨æ°£å",description:"ç·æ¥é åé坿¯æ 3 åææ¯åº",cost:0,category:"badge",icon:"\uD83E\uDDEF",available:!0,rarity:"epic"},{id:"positive_cashflow",name:"æ¶æ¯å¥åº·",description:"æ¬ææ¶å
¥å¤§æ¼æ¯åº",cost:0,category:"badge",icon:"\uD83D\uDCA7",available:!0,rarity:"rare"},{id:"low_debt",name:"è¼è£ä¸é£",description:"è² åµæ¯ä½æ¼ 50%",cost:0,category:"badge",icon:"\uD83E\uDEB6",available:!0,rarity:"rare"},{id:"streak_7",name:"å
æä¸é±",description:"é£çºç°½å° 7 天",cost:0,category:"badge",icon:"\uD83D\uDD25",available:!0,rarity:"common"},{id:"streak_30",name:"ææå ±å°",description:"é£çºç°½å° 30 天",cost:0,category:"badge",icon:"â¡",available:!0,rarity:"rare"},{id:"streak_90",name:"ä¸å£ä¸æ·",description:"é£çºç°½å° 90 天",cost:0,category:"badge",icon:"\uD83C\uDF1F",available:!0,rarity:"epic"},{id:"streak_180",name:"åå¹´å¦ä¸",description:"é£çºç°½å° 180 天",cost:0,category:"badge",icon:"\uD83C\uDFC5",available:!0,rarity:"epic"},{id:"streak_365",name:"å
¨å¹´ç¡ä¼",description:"é£çºç°½å° 365 天",cost:0,category:"badge",icon:"\uD83D\uDC51",available:!0,rarity:"legendary"},{id:"networth_100k",name:"å°æç©è",description:"æ·¨å¼é 100,000",cost:0,category:"badge",icon:"\uD83C\uDF31",available:!0,rarity:"common"},{id:"networth_500k",name:"ç©©å¥ç´¯ç©",description:"æ·¨å¼é 500,000",cost:0,category:"badge",icon:"\uD83C\uDF3F",available:!0,rarity:"rare"},{id:"networth_1m",name:"ç¾è¬ä¿±æ¨é¨",description:"æ·¨å¼é 1,000,000",cost:0,category:"badge",icon:"\uD83C\uDF33",available:!0,rarity:"epic"},{id:"networth_5m",name:"財å¯èªç±åå¨",description:"æ·¨å¼é 5,000,000",cost:0,category:"badge",icon:"\uD83C\uDFD4ï¸",available:!0,rarity:"legendary"}],f={common:"text-gray-600 bg-gray-100 dark:bg-gray-800 dark:text-gray-300",rare:"text-blue-600 bg-blue-100 dar
1k:bg-blue-900 dark:text-blue-300",epic:"text-purple-600 bg-purple-100 dark:bg-purple-900 dark:text-purple-300",legendary:"text-yellow-600 bg-yellow-100 dark:bg-yellow-900 dark:text-yellow-300"},w={common:"æ®é",rare:"ç¨æ",epic:"å²è©©",legendary:"å³èªª"};var N=r(58462),_=r(98896),k=r(34619),E=r(68341),I=r(9807);function A(){let{toast:e}=(0,n.dj)(),{user:a}=(0,o.A)(),{achievements:r,milestones:m,totalXp:g}=(0,N.I)(),[x,p]=(0,s.useState)([]),[u,A]=(0,s.useState)(null);(0,s.useEffect)(()=>{(async()=>{if(a?.uid)try{let e=await h(a.uid);p(e)}catch(r){let e=r instanceof Error?r:Error(String(r));b.Cp(e,{level:"error",extra:{message:"[tasks/rewards] è¼å
¥å
ææ·å²å¤±æ",userId:a.uid},tags:{source:"RewardsTab.loadUserRewards"}})}})()},[a?.uid]);let $=(0,s.useMemo)(()=>{let e=new Set;return r.forEach(a=>{a.achieved&&e.add(a.id)}),m.forEach(a=>{a.reached&&e.add(a.id)}),a=>e.has(a)},[r,m]),R=v.filter(e=>$(e.id)).length,S=async r=>{if(a?.uid&&!u){if(g<r.cost)return void e({title:"ç©åä¸è¶³",description:`éè¦ ${r.cost} ç©åï¼æ¨ç®åæ ${g} ç©å`,variant:"destructive"});A(r.id);try{let t={id:`${r.id}_${Date.now()}`,rewardId:r.id,userId:a.uid,redeemedAt:new Date().toISOString(),used:!1,cost:r.cost};await y(a.uid,t),p(e=>[t,...e]),e({title:"å
ææåï¼",description:`å·²æåå
æ ${r.name}`,duration:3e3})}catch(t){let a=t instanceof Error?t:Error(String(t));b.Cp(a,{level:"error",extra:{message:"[tasks/rewards] å
æå¤±æ",rewardId:r.id},tags:{source:"RewardsTab.handleRedeem"}}),e({title:"å
æå¤±æ",description:"è«ç¨å¾å試",variant:"destructive"})}finally{A(null)}}},Z=g-x.reduce((e,a)=>e+a.cost,0);return(0,t.jsx)(d.av,{value:"rewards",className:"space-y-4",children:(0,t.jsxs)("div",{className:"space-y-6",children:[(0,t.jsxs)(i.Zp,{children:[(0,t.jsxs)(i.aR,{children:[(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)(i.ZB,{className:"flex items-center gap-2",children:[(0,t.jsx)(_.A,{className:"h-5 w-5"}),"å¾½ç« "]}),(0,t.jsxs)("span",{className:"text-sm text-muted-foreground",children:["å·²ç²å¾ ",R," / ",v.length]})]}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:"宿尿çæå°±æéç¨ç¢å³èªåç²å¾ï¼ç¡éå
æ"})]}),(0,t.jsx)(i.Wu,{children:(0,t.jsx)("div",{className:"grid grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-4",children:v.map(e=>{let a=$(e.id);return(0,t.jsxs)("div",{className:`flex flex-col items-center gap-2 rounded-lg border p-4 text-center transition-colors ${a?"bg-card":"opacity-45 grayscale"}`,children:[(0,t.jsx)("div",{className:"text-4xl",children:e.icon}),(0,t.jsx)("p",{className:"font-medium text-sm",children:e.name}),(0,t.jsx)("p",{className:"text-xs text-muted-foreground",children:e.description}),e.rarity&&(0,t.jsx)(l.E,{variant:"secondary",className:`text-xs ${f[e.rarity]}`,children:w[e.rarity]})]},e.id)})})})]}),(0,t.jsxs)(i.Zp,{children:[(0,t.jsxs)(i.aR,{children:[(0,t.jsxs)(i.ZB,{className:"flex items-center gap-2",children:[(0,t.jsx)(k.A,{className:"h-5 w-5"}),"ç©åå
æ"]}),(0,t.jsxs)("p",{className:"text-sm text-muted-foreground",children:["å¯ç¨ç©åï¼",Z,"ï¼å
æåè½å³å°éæ¾ï¼"]})]}),(0,t.jsx)(i.Wu,{children:(0,t.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:j.map(e=>{let a,r=(a=e.id,x.some(e=>e.rewardId===a)),s=Z>=e.cost&&!r;return(0,t.jsxs)(i.Zp,{className:`transition-all duration-200 hover:shadow-lg ${r?"opacity-75":""}`,children:[(0,t.jsxs)(i.aR,{className:"pb-3",children:[(0,t.jsx)("div",{className:"text-3xl",children:e.icon}),(0,t.jsx)(i.ZB,{className:"text-lg",children:e.name}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:e.description})]}),(0,t.jsx)(i.Wu,{className:"pt-0",children:(0,t.jsxs)("div",{className:"flex items-center justify-between",children:[(0,t.jsxs)("div",{className:"flex items-center gap-1",children:[(0,t.jsx)(k.A,{className:"h-4 w-4 text-yellow-500"}),(0,t.jsx)("span",{className:"font-bold text-lg",children:e.cost}),(0,t.jsx)("span",{className:"text-sm text-muted-foreground",children:"ç©å"})]}),(0,t.jsx)(c.$,{size:"sm",onClick:()=>S(e),disabled:!0,className:r?"bg-green-500 hover:bg-green-600":"",children:u===e.id?"å
æä¸...":r?(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(E.A,{className:"h-4 w-4 mr-1"}),"å·²å
æ"]}):s?"å
æ":"ç©åä¸è¶³"})]})})]},e.id)})})})]}),x.length>0&&(0,t.jsxs)(i.Zp,{children:[(0,t.jsx)(i.aR,{children:(0,t.jsxs)(i.ZB,{className:"flex items-center gap-2",children:[(0,t.jsx)(I.A,{className:"h-5 w-5"}),"å
ææ·å²"]})}),(0,t.jsx)(i.Wu,{children:(0,t.jsx)("div",{className:"space-y-3",children:x.map(e=>{let a=j.find(a=>a.id===e.rewardId);return(0,t.jsxs)("div",{className:"flex items-center justify-between p-3 rounded-lg border bg-card",children:[(0,t.jsxs)("div",{className:"flex items-center gap-3",children:[(0,t.jsx)("div",{className:"text-2xl",children:a?.icon||"\uD83C\uDF81"}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium",children:a?.name||"æªç¥çåµ"}),(0,t.jsx)("p",{className:"text-sm text-muted-foreground",children:new Date(e.redeemedAt).toLocaleDateString("zh-TW")})]})]}),(0,t.jsxs)("div",{className:"flex items-center gap-2",children:[(0,t.jsxs)(l.E,{variant:"outline",children:[e.cost," ç©å"]}),(0,t.jsx)(l.E,{variant:e.used?"default":"secondary",className:e.used?"bg-green-500":"",children:e.used?"已使ç¨":"æªä½¿ç¨"})]})]},e.id)})})})]})]})})}},98896:(e,a,r)=>{r.d(a,{A:()=>t});let t=(0,r(46775).A)("award",[["path",{d:"m15.477 12.89 1.515 8.526a.5.5 0 0 1-.81.47l-3.58-2.687a1 1 0 0 0-1.197 0l-3.586 2.686a.5.5 0 0 1-.81-.469l1.514-8.526",key:"1yiouv"}],["circle",{cx:"12",cy:"8",r:"6",key:"1vp47v"}]])}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.