import{f as e,l as t,p as n,s as r,u as i}from"./db-D2Po16Ap.js";import{B as a,L as o,x as s,z as c}from"./Card-Cxq4Ee-X.js";import{t as l}from"./now-Ds5hQLtP.js";import{t as u}from"./DATA_DEFAULTS-BcOucxL3.js";import{t as d}from"./DATA_DEFAULTS.en-DirRsuKh.js";var f={danger:0,warning:1,info:2};function p(e,t){return!Number.isFinite(t)||t<=0?1:!Number.isFinite(e)||e<=0?0:Math.min(1,Math.max(0,e/t))}function m(e){let t=e.targetMl!=null&&e.targetMl>0?Math.round(e.targetMl):0,n=Number.isFinite(e.currentMl)?Math.max(0,Math.round(e.currentMl)):0;return{currentMl:n,targetMl:t,remainingMl:Math.max(0,t-n),progressRatio:t>0?Math.min(1,Math.max(0,n/t)):0,quickAddMl:e.quickAddMl!=null&&e.quickAddMl>0?Math.round(e.quickAddMl):250}}function h(e,t){return e.find(e=>e.habitId===t)}function g(e,t,r){let i=e.filter(e=>e.active&&(e.type===`daily`||e.type===`weekly`||e.type===`monthly`)&&n(e,r)),a=i.filter(e=>h(t,e.id)?.value===!0).length,o=i.length;return{total:o,done:a,pending:Math.max(0,o-a),completionRatio:p(a,o)}}function _(e){if(!e.habit.active||e.habit.type!==`daily`)return;let t=e.lookbackDays??30,r=0;for(let i=0;i>-t;--i){let t=l(e.dateISO,i);if(n(e.habit,t)){if(h(e.logsByDate[t]??[],e.habit.id)?.value===!0){r+=1;continue}break}}return r}function v(e){return e.habits.filter(t=>n(t,e.dateISO)).map(t=>{let n=h(e.logs,t.id),r=n?.value,i=t.active?t.type===`daily_numeric`?`numeric`:r===!0?`completed`:`pending`:`inactive`;return{habitId:t.id,name:t.name,type:t.type,group:t.group,active:t.active,appliesToday:!0,status:i,...r===void 0?{}:{value:r},...t.target==null?{}:{target:t.target},...n?.note?{note:n.note}:{},...t.notes?{habitNotes:t.notes}:{},...t.preferredTimeHHMM?{preferredTimeHHMM:t.preferredTimeHHMM}:{},...e.streaksByHabitId!=null&&e.streaksByHabitId[t.id]!==void 0?{streakDays:e.streaksByHabitId[t.id]}:{},...e.weeklyDoneByHabitId?.[t.id]==null?{}:{weeklyDoneCount:e.weeklyDoneByHabitId[t.id]},...e.weeklyTargetCountByHabitId?.[t.id]==null?{}:{weeklyTargetCount:e.weeklyTargetCountByHabitId[t.id]},...e.monthlyDoneByHabitId?.[t.id]==null?{}:{monthlyDoneCount:e.monthlyDoneByHabitId[t.id]},...e.monthlyTargetCountByHabitId?.[t.id]==null?{}:{monthlyTargetCount:e.monthlyTargetCountByHabitId[t.id]}}})}function y(e){let t=e.dateRange.map(t=>{let n=g(e.habitsByDate[t]??[],e.logsByDate[t]??[],t);return{dateISO:t,done:n.done,total:n.total,completionRatio:n.completionRatio}}),n=t.reduce((e,t)=>e+t.done,0),r=t.reduce((e,t)=>e+t.total,0);return{dateRange:e.dateRange,totalDone:n,totalPossible:r,completionRatio:p(n,r),days:t}}function b(e){let t=new Map;for(let n of e){if(!n.active||n.type!==`daily`||!n.appliesToday)continue;let e=n.group?.trim()||`__no_group__`;t.set(e,[...t.get(e)??[],n])}return[...t.entries()].map(([e,t])=>{let n=t.filter(e=>e.status===`completed`).length,r=t.length;return{group:e,total:r,done:n,pending:Math.max(0,r-n),completionRatio:p(n,r)}}).sort((e,t)=>t.pending-e.pending||e.group.localeCompare(t.group,`ru-RU`))}function x(e){let t=[];return e.today.pending>=5&&t.push({id:`habits:pending-many`,severity:`warning`,title:c(`habits.actions.pendingMany`),description:c(`habits.actions.pendingLeft`,{count:e.today.pending}),href:`/habits`}),e.today.pending>0&&t.push({id:`habits:pending`,severity:`info`,title:c(`habits.actions.pending`,{count:e.today.pending}),href:`/habits`}),e.water.remainingMl>0&&t.push({id:`water:remaining`,severity:`info`,title:c(`habits.actions.waterRemaining`,{ml:e.water.remainingMl}),href:`/habits`}),t.sort((e,t)=>f[e.severity]-f[t.severity]||e.id.localeCompare(t.id)).slice(0,6)}function S(e){let[t,n]=e.split(`-`),r=Number(t),i=Number(n);if(!Number.isFinite(r)||!Number.isFinite(i)||i<1||i>12)return[e];let a=new Date(r,i,0).getDate();return Array.from({length:a},(e,t)=>{let n=String(t+1).padStart(2,`0`);return`${r}-${String(i).padStart(2,`0`)}-${n}`})}function C(e,t,r){let i={},a={};for(let o of e){if(!o.active||o.type!==`monthly`)continue;let e=Math.max(1,o.targetMonthlyCount??1);a[o.id]=e;let s=0;for(let e of t)n(o,e)&&h(r[e]??[],o.id)?.value===!0&&(s+=1);i[o.id]=s}return{doneByHabitId:i,targetByHabitId:a}}function w(e){let{doneByHabitId:t,targetByHabitId:n}=C(e.habits,e.dateRange,e.logsByDate),r=e.habits.filter(e=>e.active&&e.type===`monthly`).map(e=>({habitId:e.id,name:e.name,done:t[e.id]??0,target:n[e.id]??Math.max(1,e.targetMonthlyCount??1)})),i=r.reduce((e,t)=>e+t.done,0),a=r.reduce((e,t)=>e+t.target,0);return{totalDone:i,totalTarget:a,completionRatio:p(i,a),habits:r}}function T(e,t){return Array.from({length:t},(n,r)=>l(e,r-t+1))}function E(e,t,r){let i={},a={};for(let o of e)if(!(!o.active||o.type!==`daily`))for(let e of t)n(o,e)&&(a[o.id]=(a[o.id]??0)+1,h(r[e]??[],o.id)?.value===!0&&(i[o.id]=(i[o.id]??0)+1));return{doneByHabitId:i,targetByHabitId:a}}async function D(n){let a=T(n.dateISO,7),o=S(n.dateISO),c=T(n.dateISO,30),[l,u,d,f,h]=await Promise.all([s(),i(n.dateISO),r(n.dateISO),e(n.dateISO),t(n.dateISO)]),g=await Promise.all(a.map(async e=>{let[t,n]=await Promise.all([i(e),r(e)]);return[e,t,n]})),D=await Promise.all(c.map(async e=>[e,await r(e)])),O=u.some(e=>e.active&&e.type===`monthly`)?await Promise.all(o.map(async e=>[e,await r(e)])):[],k=Object.fromEntries(g.map(([e,t])=>[e,t])),A=Object.fromEntries(g.map(([e,,t])=>[e,t])),j=Object.fromEntries(D),M=Object.fromEntries(O),N={...j,...A,...M,[n.dateISO]:d},P={total:h.total,done:h.done,pending:Math.max(0,h.total-h.done),completionRatio:p(h.done,h.total)},F=m({currentMl:f,targetMl:l?.app.waterTargetMl,quickAddMl:l?.app.waterQuickAddMl}),I=y({dateRange:a,habitsByDate:k,logsByDate:A}),L=w({habits:u,dateRange:o,logsByDate:M}),{doneByHabitId:R,targetByHabitId:z}=E(u,a,A),{doneByHabitId:B,targetByHabitId:V}=C(u,o,M),H=Object.fromEntries(u.map(e=>[e.id,_({habit:e,dateISO:n.dateISO,logsByDate:N,lookbackDays:30})])),U=v({habits:u,logs:d,dateISO:n.dateISO,streaksByHabitId:H,weeklyDoneByHabitId:R,weeklyTargetCountByHabitId:z,monthlyDoneByHabitId:B,monthlyTargetCountByHabitId:V}),W=b(U),G=x({today:P,water:F});return{dateISO:n.dateISO,today:P,water:F,habits:U,weekly:I,monthly:L,groups:W,actionRequired:G}}var O=u.dictionaries?.budgetCategories??[],k=d.dictionaries?.budgetCategories??[],A=Object.fromEntries(O.map((e,t)=>[e,k[t]??e])),j={"Развлечения / подписки":`Отдых/досуг`},M={"Развлечения / подписки":`Rest / leisure`};function N(e){return j[e]??e}var P=u.defaultHabits??[],F=d.defaultHabits??[],I=Object.fromEntries(P.map((e,t)=>[e.name,F[t]?.name??e.name])),L={"Без группы":`No group`,Прочее:`Other`,Здоровье:`Health`,Спорт:`Sport`,Питание:`Nutrition`,Сон:`Sleep`,Движение:`Movement`,Фокус:`Focus`,Личное:`Personal`};function R(e,t=o()){let n=N(e);return t===`ru`?n:A[n]??A[e]??M[e]??n}function z(e,t=o()){if(e===`__no_group__`)return a(`habits.noGroup`,void 0,t);let n=e.trim();return t===`ru`?n||a(`habits.noGroup`,void 0,t):n?L[n]??n:a(`habits.noGroup`,void 0,t)}var B={"Вода (мл)":`Water (ml)`,"Зарядка 30 мин":`Exercise 30 min`,"Прогулка / спорт":`Walk / sport`,"Медитация 30 мин":`Meditation 30 min`,"Чтение / обучение":`Reading / learning`,"Белок 120 г":`Protein 120 g`,Завтрак:`Breakfast`,Обед:`Lunch`,Ужин:`Dinner`,"Сон до 00:00":`Sleep by 00:00`,"Подъём 08:00":`Wake up 08:00`},V=/^Сон до (.+)$/,H=/^Подъём (.+)$/,U=/^Белок (\d+)\s*г$/,W=/^Зарядка (\d+)\s*мин$/,G=/^Медитация (\d+)\s*мин$/;function K(e,t=o()){if(t===`ru`)return e;let n=I[e];if(n&&n!==e)return n;let r=B[e];if(r)return r;let i=V.exec(e);if(i)return a(`habits.storedNames.sleepUntil`,{time:i[1].trim()},t);let s=H.exec(e);if(s)return a(`habits.storedNames.wakeUp`,{time:s[1].trim()},t);let c=U.exec(e);if(c)return a(`habits.storedNames.proteinGrams`,{grams:c[1]},t);let l=W.exec(e);if(l)return a(`habits.storedNames.exerciseMinutes`,{minutes:l[1]},t);let u=G.exec(e);return u?a(`habits.storedNames.meditationMinutes`,{minutes:u[1]},t):e}var q={"Общий долг":`General debt`},J={Переезд:`Move`};function Y(e,t=o()){return t===`ru`?e:q[e]??e}function X(e,t=o()){return t===`ru`?e:J[e]??e}export{X as a,g as c,K as i,Y as n,N as o,z as r,D as s,R as t};