1import{u as W,b as Y,a as J,h as K,r as h,i as z,j as r,B as G,l as c,t as T}from"./index-BJ_cpA-m.js";import{u as X}from"./useQuery-BReEIV68.js";import{c as Z}from"./carnet-Dn2pqE5Y.js";import{u as ee}from"./useCompleteness-s4Ahqcgh.js";import{S as _}from"./skeleton-jvWPOIA0.js";import{H as te}from"./HomeDashboard-DZEnQlhY.js";import"./normalizeDates-_jLPl24R.js";import"./differenceInMonths-DeO8uAzn.js";import"./endOfMonth-DCxWFKoc.js";import"./SectionHeader-DUm-tYw-.js";import"./scan-line-gWyN5UUv.js";import"./syringe-BLfBXpCq.js";import"./sparkles-HzW5rcqc.js";import"./shield-check-BOzNhUaF.js";import"./bell-off-DcL9rdz_.js";function ne(e,u){const a=new Date().getHours(),g=a<6?"night":a<12?"morning":a<20?"afternoon":"evening";return u(`home.greeting.${g}`,{name:e??""})}function ae(){const e=new Date().getHours();return e<6?"ð":e<12?"âï¸":e<20?"ð¤ï¸":"ð"}function f(e){const u=Date.UTC(new Date(e).getUTCFullYear(),new Date(e).getUTCMonth(),new Date(e).getUTCDate()),a=new Date,g=Date.UTC(a.getUTCFullYear(),a.getUTCMonth(),a.getUTCDate());return Math.round((u-g)/864e5)}function be(){const{t:e,i18n:u}=W(),{user:a,profile:g,loading:b}=Y(),v=J(),{activePetId:m,setActivePetId:y,setActivePet:D}=K(),[q,x]=h.useState("default");h.useEffect(()=>{typeof window>"u"||(z()||!("Notification"in window)?x("unsupported"):x(Notification.permission))},[]);const o=X({queryKey:["home-dash",a?.id,m],enabled:!!a,queryFn:async()=>{const{data:t}=await c.from("pets").select("id,name,breed,species,photo_url,birth_date,chip_number").eq("owner_id",a.id).is("archived_at",null).order("created_at",{ascending:!0});if(!t||t.length===0)return null;const i=t.find(s=>s.id===m)??t[0],[P,E,l,M,L,Q]=await Promise.all([c.from("vaccines").select("id,name,next_due,given_at").eq("pet_id",i.id).order("given_at",{ascending:!1}),c.from("challenges").select("id,title,icon,cadence").eq("is_active",!0).eq("cadence","daily").limit(1).maybeSingle(),c.from("triages").select("id,level,started_at").eq("owner_id",a.id).order("started_at",{ascending:!1}).limit(1).maybeSingle(),c.from("reminders").select("id,title,due_date,type").eq("user_id",a.id).is("dismissed_at",null).gte("due_date",new Date().toISOString().slice(0,10)).order("due_date",{ascending:!0}).limit(3),c.from("medical_records").select("id",{count:"exact",head:!0}).eq("pet_id",i.id),c.from("triages").select("id",{count:"exact",head:!0}).eq("owner_id",a.id)]),k=P.data??[],$=k.filter(s=>s.next_due).map(s=>({name:s.name,next_due:s.next_due})).filter(s=>f(s.next_due)>=0&&f(s.next_due)<=30).sort((s,O)=>s.next_due.localeCompare(O.next_due))[0]??null,B=l.data&&f(l.data.started_at)>=-7?l.data:null;return{pet:i,nextVaccine:$,challenge:E.data??null,lastTriage:B,upcomingReminders:M.data??[],stats:{vaccines:k.length,triages:Q.count??0,records:L.count??0}}}}),n=o.data??null,R=o.isPending&&!n;h.useEffect(()=>{n?.pet&&((!m||m!==n.pet.id)&&y(n.pet.id),D({id:n.pet.id,name:n.pet.name,species:n.pet.species,breed:n.pet.breed,photo_url:n.pet.photo_url,birth_date:n.pet.birth_date}))},[n?.pet,m,y,D]),h.useEffect(()=>{o.isFetched&&!o.isError&&n===null&&v({to:"/onboarding"})},[o.isFetched,o.isError,n,v]);const j=ee(n?.pet.id??m??null).data??0;async function S(){if(!(!("Notification"in window)||!("serviceWorker"in navigator)||!a))try{const t=await Notification.requestPermission();if(x(t),t!=="granted")return;const i=await navigator.serviceWorker.getRegistration("/")??await navigator.serviceWorker.register("/sw.js"),l=(await i.pushManager.getSubscription()??await i.pushManager.subscribe({userVisibleOnly:!0})).toJSON();await c.from("push_subscriptions").upsert({user_id:a.id,endpoint:l.endpoint,p256dh:l.keys?.p256dh??"",auth:l.keys?.auth??"",user_agent:navigator.userAgent},{onConflict:"endpoint"}),T.success(e("home.push.enabled"))}catch(t){console.error(t),T.error(e("home.push.error"))}}if(!b&&o.isError&&!n)return r.jsxs("div",{className:"flex min-h-[60vh] flex-col items-center justify-center gap-3 p-6 text-center",children:[r.jsx("p",{className:"text-sm text-muted-foreground",children:e("home.error.load",{defaultValue:"No se pudieron cargar tus datos."})}),r.jsx(G,{onClick:()=>o.refetch(),variant:"outline",className:"rounded-2xl",children:e("common.retry",{defaultValue:"Reintentar"})})]});if(b||R||!n)return r.jsxs("div",{className:"space-y-4 p-4",children:[r.jsx(_,{className:"h-8 w-1/2"}),r.jsx(_,{className:"aspect-[4/5] w-full rounded-3xl"}),r.jsx(_,{className:"h-16 w-full rounded-3xl"}),r.jsx(_,{className:"h-20 w-full rounded-2xl"})]});const{pet:d,nextVaccine:p,upcomingReminders:U,stats:A}=n,F=j===100&&q==="default",N=new Intl.DateTimeFormat(u.language,{day:"numeric",month:"short"}),V=new Intl.DateTimeFormat(u.language,{weekday:"long",day:"numeric",month:"long"}).format(new Date),C=t=>{const i=f(t);return i<0?e("home.timing.overdue",{defaultValue:"Atrasado"}):i===0?e("home.timing.today",{defaultValue:"Hoy"}):e("home.timing.inDays",{defaultValue:`En ${i} dÃas · ${N.format(new Date(t))}`,days:i,date:N.format(new Date(t))})},w=[];p&&w.push({id:`vac-${p.next_due}
1`,title:p.name,timingLabel:C(p.next_due),kind:"vaccine",tone:f(p.next_due)<=7?"warning":"default",active:!0}),U.filter(t=>!p||t.type!=="vaccine").slice(0,3).forEach(t=>{w.push({id:t.id,title:t.title,timingLabel:C(t.due_date),kind:"reminder",tone:"default",active:!0})});const H=[d.species==="cat"?e("onboarding.step2.cat"):e("onboarding.step2.dog"),d.breed,Z(d.birth_date,u.language)].filter(Boolean).join(" · "),I={greeting:ne(g?.full_name?.split(" ")[0]??null,e),greetingEmoji:ae(),dateLabel:V,pet:{id:d.id,name:d.name,species:d.species,breedAgeLabel:H,photo_url:d.photo_url,chip_number:d.chip_number},completeness:j,stats:A,reminders:w};return r.jsx(te,{data:I,pushPrompt:F?{title:e("home.push.title"),subtitle:e("home.push.subtitle"),onEnable:S}:void 0})}export{be as component};
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.