const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/seed-9C4rKf7X.js","assets/rolldown-runtime-S-ySWqyJ.js","assets/DATA_DEFAULTS-BcOucxL3.js","assets/db-D2Po16Ap.js","assets/vendor-db-laug4hUC.js"])))=>i.map(i=>d[i]); import{t as e}from"./db-D2Po16Ap.js";import{L as t,V as n,z as r}from"./Card-Cxq4Ee-X.js";import{r as i}from"./accountBalance-BmL5XsaY.js";var a=`RMSAssist`,o=`1.0.0`,s=`2026-06-11 10:36`,c=`rms.cloudLastSnapshotFingerprint`;function l(e){if(typeof e!=`object`||!e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(e=>l(e)).join(`,`)}]`;let t=e;return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${l(t[e])}`).join(`,`)}}`}function u(e){let t=5381;for(let n=0;n>>0).toString(36)}function d(e){let t={...e};return delete t.generatedAtISO,u(l(t))}function f(){if(typeof sessionStorage>`u`)return null;try{return sessionStorage.getItem(c)}catch{return null}}function p(e){if(!(typeof sessionStorage>`u`))try{sessionStorage.setItem(c,e)}catch{}}function m(){if(!(typeof sessionStorage>`u`))try{sessionStorage.removeItem(c)}catch{}}var h=[e.tasks,e.habits,e.habitLogs,e.transactions,e.settings,e.savingsGoals,e.savingsContributions,e.debts,e.debtPayments,e.foods,e.mealEntries,e.mealPlans,e.mealPlanItems,e.recipes,e.userFoodCatalog,e.pantryItems,e.trainingScheduleItems,e.trainingCompletionLogs,e.supplementPlanItems,e.supplementIntakeLogs,e.labResults,e.supplementProducts,e.supplementPlanProductLinks,e.supplementProductTemplates,e.supplementReminders,e.subscriptions,e.subscriptionReminders,e.holidays,e.chatThreads,e.chatMessages],g=10*1024*1024,_=5e3,v=`tasks.habits.habitLogs.transactions.savingsGoals.savingsContributions.debts.debtPayments.foods.mealEntries.mealPlans.mealPlanItems.recipes.userFoodCatalog.pantryItems.trainingScheduleItems.trainingCompletionLogs.supplementPlanItems.supplementIntakeLogs.labResults.supplementProducts.supplementPlanProductLinks.supplementProductTemplates.supplementReminders.subscriptions.subscriptionReminders.holidays.chatThreads.chatMessages`.split(`.`);async function y(){let[t,n,r,i,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M]=await Promise.all([e.tasks.toArray(),e.habits.toArray(),e.habitLogs.toArray(),e.transactions.toArray(),e.settings.toArray(),e.savingsGoals.toArray(),e.savingsContributions.toArray(),e.debts.toArray(),e.debtPayments.toArray(),e.foods.toArray(),e.mealEntries.toArray(),e.mealPlans.toArray(),e.mealPlanItems.toArray(),e.recipes.toArray(),e.userFoodCatalog.toArray(),e.pantryItems.toArray(),e.trainingScheduleItems.toArray(),e.trainingCompletionLogs.toArray(),e.supplementPlanItems.toArray(),e.supplementIntakeLogs.toArray(),e.labResults.toArray(),e.supplementProducts.toArray(),e.supplementPlanProductLinks.toArray(),e.supplementProductTemplates.toArray(),e.supplementReminders.toArray(),e.subscriptions.toArray(),e.subscriptionReminders.toArray(),e.holidays.toArray(),e.chatThreads.toArray(),e.chatMessages.toArray()]),N=s.find(e=>e.id===`singleton`)??null;return{meta:{appName:a,version:o,exportedAt:new Date().toISOString()},data:{tasks:t,habits:n,habitLogs:r,transactions:i,settings:N,savingsGoals:c,savingsContributions:l,debts:u,debtPayments:d,foods:f,mealEntries:p,mealPlans:m,mealPlanItems:h,recipes:g,userFoodCatalog:_,pantryItems:v,trainingScheduleItems:y,trainingCompletionLogs:b,supplementPlanItems:x,supplementIntakeLogs:S,labResults:C,supplementProducts:w,supplementPlanProductLinks:T,supplementProductTemplates:E,supplementReminders:D,subscriptions:O,subscriptionReminders:k,holidays:A,chatThreads:j,chatMessages:M}}}function b(e,n=t()){return r(`settings.backup.validate.${e}`,void 0,n)}b(`notObject`,`ru`),b(`meta`,`ru`),b(`data`,`ru`),b(`limit`,`ru`),b(`entity`,`ru`);function x(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function S(e){return Array.isArray(e)}function C(e){return e===`__proto__`||e===`constructor`||e===`prototype`}function w(e){return typeof e==`string`?e.length<=_:Array.isArray(e)?e.length<=1e4&&e.every(w):x(e)?Object.entries(e).every(([e,t])=>!C(e)&&w(t)):!0}function T(e,t,n=!1){let r=e[t];return r==null&&!n?!0:!S(r)||r.length>1e4?!1:r.every(e=>x(e))}function E(e){let t=Object.fromEntries(v.map(t=>[t,Array.isArray(e.data[t])?e.data[t]?.length??0:0])),n=Object.values(t).reduce((e,t)=>e+t,0);return{totalRecords:n,hasSettings:e.data.settings!=null,counts:t,warnings:[e.data.settings?r(`settings.backup.importPreview.settingsOverwrite`):``,n>1e3?r(`settings.backup.importPreview.manyRecords`):``].filter(Boolean)}}async function D(t){let n=E(t),i=[];for(let n of v){let r=Array.isArray(t.data[n])?t.data[n]??[]:[];if(r.length===0)continue;let a=r.map(e=>x(e)&&typeof e.id==`string`?e.id:null).filter(e=>!!e),o=r.length-a.length,s=(a.length>0?await e.table(n).bulkGet(a):[]).filter(Boolean).length;i.push({key:n,total:r.length,added:a.length-s,updated:s,missingId:o})}let a=i.reduce((e,t)=>e+t.added,0),o=i.reduce((e,t)=>e+t.updated,0),s=i.reduce((e,t)=>e+t.missingId,0);return{...n,tables:i,totalAdded:a,totalUpdated:o,totalMissingId:s,warnings:[...n.warnings,s>0?r(`settings.backup.importPreview.missingIds`):``].filter(Boolean)}}function O(e){if(!x(e))return{ok:!1,error:b(`notObject`)};if(!x(e.meta))return{ok:!1,error:b(`meta`)};let t=e.meta;if(typeof t.appName!=`string`||typeof t.version!=`string`)return{ok:!1,error:b(`meta`)};if(!x(e.data))return{ok:!1,error:b(`data`)};let n=e.data;if(!S(n.tasks)||!S(n.habits)||!S(n.habitLogs)||!S(n.transactions))return{ok:!1,error:b(`data`)};for(let e of v)if(!T(n,e,e===`tasks`||e===`habits`||e===`habitLogs`||e===`transactions`))return{ok:!1,error:e in n?b(`limit`):b(`data`)};return!w(e.meta)||!w(n)?{ok:!1,error:b(`entity`)}:n.settings!==null&&!x(n.settings)?{ok:!1,error:b(`data`)}:n.settings!==null&&!w(n.settings)?{ok:!1,error:b(`entity`)}:`savingsGoals`in n&&!S(n.savingsGoals)||`savingsContributions`in n&&!S(n.savingsContributions)||`debts`in n&&!S(n.debts)||`debtPayments`in n&&!S(n.debtPayments)||`foods`in n&&!S(n.foods)||`mealEntries`in n&&!S(n.mealEntries)||`mealPlans`in n&&!S(n.mealPlans)||`mealPlanItems`in n&&!S(n.mealPlanItems)||`recipes`in n&&!S(n.recipes)||`userFoodCatalog`in n&&!S(n.userFoodCatalog)||`pantryItems`in n&&!S(n.pantryItems)||`trainingScheduleItems`in n&&!S(n.trainingScheduleItems)||`trainingCompletionLogs`in n&&!S(n.trainingCompletionLogs)||`supplementPlanItems`in n&&!S(n.supplementPlanItems)||`supplementIntakeLogs`in n&&!S(n.supplementIntakeLogs)||`labResults`in n&&!S(n.labResults)||`supplementProducts`in n&&!S(n.supplementProducts)||`supplementPlanProductLinks`in n&&!S(n.supplementPlanProductLinks)||`supplementProductTemplates`in n&&!S(n.supplementProductTemplates)||`supplementReminders`in n&&!S(n.supplementReminders)||`subscriptions`in n&&!S(n.subscriptions)||`subscriptionReminders`in n&&!S(n.subscriptionReminders)||`holidays`in n&&!S(n.holidays)?{ok:!1,error:b(`data`)}:{ok:!0,data:e}}function k(e){return new Set(e.map(e=>typeof e.id==`string`?e.id:``).filter(Boolean))}async function A(t,n,r){let i=k(n);if(t===`replace`)return i;let a=await e.table(r).toArray();for(let e of a)typeof e.id==`string`&&e.id&&i.add(e.id);return i}function j(e,t,n,r){return e.filter(e=>{let n=r(e);return!!(n&&!t.has(n))}).slice(0,10).map(e=>`${n}:${e.id??`no-id`}`)}async function M(e,t){let n=e.savingsGoals??[],r=e.debts??[],i=e.foods??[],a=e.mealPlans??[],o=e.recipes??[],s=e.trainingScheduleItems??[],c=e.supplementPlanItems??[],l=e.supplementProducts??[],u=e.subscriptions??[],d=e.chatThreads??[],f=await A(t,e.transactions,`transactions`),p=await A(t,e.habits,`habits`),m=await A(t,n,`savingsGoals`),h=await A(t,r,`debts`),g=await A(t,i,`foods`),_=await A(t,a,`mealPlans`),v=await A(t,o,`recipes`),y=await A(t,s,`trainingScheduleItems`),b=await A(t,c,`supplementPlanItems`),x=await A(t,l,`supplementProducts`),S=await A(t,u,`subscriptions`),C=await A(t,d,`chatThreads`);return[...j(e.habitLogs,p,`habitLogs`,e=>e.habitId),...j(e.savingsContributions??[],m,`savingsContributions`,e=>e.goalId),...j(e.savingsContributions??[],f,`savingsContributions`,e=>e.linkedIncomeId),...j(e.debtPayments??[],h,`debtPayments`,e=>e.debtId),...j(e.debtPayments??[],f,`debtPayments`,e=>e.linkedIncomeId),...j(e.mealEntries??[],g,`mealEntries`,e=>e.foodId),...j(e.mealEntries??[],v,`mealEntries`,e=>e.recipeId),...j(e.mealPlanItems??[],_,`mealPlanItems`,e=>e.planId),...j(e.mealPlanItems??[],v,`mealPlanItems`,e=>e.recipeId),...j(e.pantryItems??[],g,`pantryItems`,e=>e.userProductId),...j(e.trainingCompletionLogs??[],y,`trainingCompletionLogs`,e=>e.trainingId),...j(e.supplementIntakeLogs??[],b,`supplementIntakeLogs`,e=>e.planItemId),...j(e.supplementPlanProductLinks??[],b,`supplementPlanProductLinks`,e=>e.planItemId),...j(e.supplementPlanProductLinks??[],x,`supplementPlanProductLinks`,e=>e.productId),...j(e.supplementReminders??[],b,`supplementReminders`,e=>e.entityType===`plan_item`?e.entityId:void 0),...j(e.subscriptionReminders??[],S,`subscriptionReminders`,e=>e.subscriptionId),...j(e.chatMessages??[],C,`chatMessages`,e=>e.threadId)]}async function N(t,n){let r=O(t);if(!r.ok)throw Error(r.error);let{data:a}=t,o=a.savingsGoals??[],s=a.savingsContributions??[],c=a.debts??[],l=a.debtPayments??[],u=a.foods??[],d=a.mealEntries??[],f=a.mealPlans??[],p=a.mealPlanItems??[],g=a.recipes??[],_=a.userFoodCatalog??[],v=a.pantryItems??[],y=a.trainingScheduleItems??[],x=a.trainingCompletionLogs??[],S=a.supplementPlanItems??[],C=a.supplementIntakeLogs??[],w=a.labResults??[],T=a.supplementProducts??[],E=a.supplementPlanProductLinks??[],D=a.supplementProductTemplates??[],k=a.supplementReminders??[],A=a.subscriptions??[],j=a.subscriptionReminders??[],N=a.holidays??[],P=a.chatThreads??[],F=a.chatMessages??[],I=await M(a,n);if(I.length>0)throw Error(`${b(`entity`)} FK: ${I.slice(0,5).join(`, `)}`);if(n===`replace`){await e.transaction(`rw`,h,async()=>{await e.tasks.clear(),await e.habits.clear(),await e.habitLogs.clear(),await e.transactions.clear(),await e.settings.clear(),await e.savingsGoals.clear(),await e.savingsContributions.clear(),await e.debts.clear(),await e.debtPayments.clear(),await e.foods.clear(),await e.mealEntries.clear(),await e.mealPlans.clear(),await e.mealPlanItems.clear(),await e.recipes.clear(),await e.userFoodCatalog.clear(),await e.pantryItems.clear(),await e.trainingScheduleItems.clear(),await e.trainingCompletionLogs.clear(),await e.supplementPlanItems.clear(),await e.supplementIntakeLogs.clear(),await e.tasks.bulkAdd(a.tasks),await e.habits.bulkAdd(a.habits),await e.habitLogs.bulkAdd(a.habitLogs),await e.transactions.bulkAdd(a.transactions),a.settings&&await e.settings.add(a.settings),o.length>0&&await e.savingsGoals.bulkAdd(o),s.length>0&&await e.savingsContributions.bulkAdd(s),c.length>0&&await e.debts.bulkAdd(c),l.length>0&&await e.debtPayments.bulkAdd(l),u.length>0&&await e.foods.bulkAdd(u),d.length>0&&await e.mealEntries.bulkAdd(d),f.length>0&&await e.mealPlans.bulkAdd(f),p.length>0&&await e.mealPlanItems.bulkAdd(p),g.length>0&&await e.recipes.bulkAdd(g),_.length>0&&await e.userFoodCatalog.bulkAdd(_),v.length>0&&await e.pantryItems.bulkAdd(v),y.length>0&&await e.trainingScheduleItems.bulkAdd(y),x.length>0&&await e.trainingCompletionLogs.bulkAdd(x),S.length>0&&await e.supplementPlanItems.bulkAdd(S),C.length>0&&await e.supplementIntakeLogs.bulkAdd(C),await e.labResults.clear(),await e.supplementProducts.clear(),await e.supplementPlanProductLinks.clear(),await e.supplementProductTemplates.clear(),await e.supplementReminders.clear(),await e.subscriptions.clear(),await e.subscriptionReminders.clear(),await e.holidays.clear(),await e.chatThreads.clear(),await e.chatMessages.clear(),w.length>0&&await e.labResults.bulkAdd(w),T.length>0&&await e.supplementProducts.bulkAdd(T),E.length>0&&await e.supplementPlanProductLinks.bulkAdd(E),D.length>0&&await e.supplementProductTemplates.bulkAdd(D),k.length>0&&await e.supplementReminders.bulkAdd(k),A.length>0&&await e.subscriptions.bulkAdd(A),j.length>0&&await e.subscriptionReminders.bulkAdd(j),N.length>0&&await e.holidays.bulkAdd(N),P.length>0&&await e.chatThreads.bulkAdd(P),F.length>0&&await e.chatMessages.bulkAdd(F)}),await i(a.transactions);return}await e.transaction(`rw`,h,async()=>{a.tasks.length>0&&await e.tasks.bulkPut(a.tasks),a.habits.length>0&&await e.habits.bulkPut(a.habits),a.habitLogs.length>0&&await e.habitLogs.bulkPut(a.habitLogs),a.transactions.length>0&&await e.transactions.bulkPut(a.transactions),a.settings&&await e.settings.put(a.settings),o.length>0&&await e.savingsGoals.bulkPut(o),s.length>0&&await e.savingsContributions.bulkPut(s),c.length>0&&await e.debts.bulkPut(c),l.length>0&&await e.debtPayments.bulkPut(l),u.length>0&&await e.foods.bulkPut(u),d.length>0&&await e.mealEntries.bulkPut(d),f.length>0&&await e.mealPlans.bulkPut(f),p.length>0&&await e.mealPlanItems.bulkPut(p),g.length>0&&await e.recipes.bulkPut(g),_.length>0&&await e.userFoodCatalog.bulkPut(_),v.length>0&&await e.pantryItems.bulkPut(v),y.length>0&&await e.trainingScheduleItems.bulkPut(y),x.length>0&&await e.trainingCompletionLogs.bulkPut(x),S.length>0&&await e.supplementPlanItems.bulkPut(S),C.length>0&&await e.supplementIntakeLogs.bulkPut(C),w.length>0&&await e.labResults.bulkPut(w),T.length>0&&await e.supplementProducts.bulkPut(T),E.length>0&&await e.supplementPlanProductLinks.bulkPut(E),D.length>0&&await e.supplementProductTemplates.bulkPut(D),k.length>0&&await e.supplementReminders.bulkPut(k),A.length>0&&await e.subscriptions.bulkPut(A),j.length>0&&await e.subscriptionReminders.bulkPut(j),N.length>0&&await e.holidays.bulkPut(N),P.length>0&&await e.chatThreads.bulkPut(P),F.length>0&&await e.chatMessages.bulkPut(F)}),await i(a.transactions),m()}async function P(){await e.transaction(`rw`,e.tables.map(e=>e.name),async()=>{for(let t of e.tables)await t.clear()});let{seedFromDefaults:t}=await n(async()=>{let{seedFromDefaults:e}=await import(`./seed-9C4rKf7X.js`).then(e=>e.n);return{seedFromDefaults:e}},__vite__mapDeps([0,1,2,3,4]));await t()}var F=`rms-backup-encrypted-v1`,I=25e4;function L(e,t,n=`ru`){return r(`settings.backup.${e}`,t,n)}r(`settings.backup.passwordTooShort`,{min:8},`ru`),L(`passwordMismatch`);var R=r(`settings.backup.encryption.decryptNeedsPassword`,void 0,`ru`),z=r(`settings.backup.encryption.decryptWrongPassword`,void 0,`ru`);function B(){let e=globalThis.crypto?.subtle;if(!e)throw Error(r(`settings.backup.encryption.webCryptoUnavailable`));return e}function V(e){let t=``;for(let n=0;n`u`)return null;try{let e=localStorage.getItem(Y);return e&&e.length>0?e:null}catch{return null}}function Z(e){if(!(typeof localStorage>`u`))try{localStorage.setItem(Y,e)}catch{}}function Q(){if(!(typeof localStorage>`u`))try{localStorage.removeItem(Y)}catch{}}function $(){return X()!==null}async function ee(){let e=await y(),t=X();return t?K(e,t):e}async function te(e,t){if(W(e)){let n=t?.trim()||X();if(!n)return{ok:!1,error:r(`cloudSyncApi.backupPasswordRequired`),errorCode:`backup_password_required`};let i=await J(e,n);return i.ok?{ok:!0,data:i.data}:{ok:!1,error:r(`cloudSyncApi.backupPasswordInvalid`),errorCode:`backup_password_invalid`}}let n=await J(e);return n.ok?{ok:!0,data:n.data}:{ok:!1,error:n.error,errorCode:`invalid_backup`}}export{o as S,d as _,Z as a,s as b,J as c,E as d,y as f,m as g,P as h,$ as i,g as l,O as m,Q as n,K as o,N as p,te as r,W as s,ee as t,D as u,f as v,a as x,p as y};