1import{r,j as e,e8 as ue,ay as pe,s as xe,W as ge,L,aw as G,b0 as he,a6 as te,au as ve,M as je,U as be,cH as Ne,o as fe}from"./ui-vendor-Cm2ZkKHv.js";import{r as Ce,X as C,aF as ye,S as X,k as K,l as Q,m as J,o as T,c as Z,j as E,B as p,D as Ae,A as Se,E as we,F as qe,aB as Ie,L as Le,C as Te,I as ee,aJ as Ee,aH as y}from"./index-DVu_w4ho.js";import{C as ae,d as se}from"./card-CyibmazC.js";import{T as De}from"./textarea-gQKtTFwB.js";import{c as D,E as $,f as re}from"./crmActividadService-ZylHwBqj.js";import{T as $e}from"./TourButton-BlXtTvkT.js";import{u as ke}from"./useModuleVisibility-DphhNa_g.js";import{L as k}from"./react-vendor-DVzxkp4A.js";import"./radix-vendor-CtEXKD-D.js";import"./chart-vendor-b_bTPWgQ.js";import"./table-vendor-C2kIG4hh.js";import"./popover-QQzRiqgZ.js";const Me=[{element:'[data-tour="agenda-encabezado"]',popover:{title:"1 · La pantalla con la que se abre el dÃa",description:"Responde una sola pregunta: <strong>¿a quién tengo que buscar hoy?</strong><br><br>Lo que ves aquà no se escribe en esta pantalla: sale de las acciones que agendaste desde cada negocio, contacto o empresa. Aquà solo se ejecutan y se cierran.",side:"bottom",align:"start"}},{element:'[data-tour="agenda-resumen"]',popover:{title:"2 · Vencidas es el número que importa",description:"Una actividad vencida es un cliente al que se le prometió algo y no se cumplió. Si ese número crece dÃa tras dÃa, el equipo está tomando más compromisos de los que puede atender.<br><br>La meta no es tener cero actividades: es tener <strong>cero vencidas</strong> al terminar la jornada.",side:"bottom",align:"center"}},{element:'[data-tour="agenda-vencida"]',popover:{title:"3 · Lo vencido va primero, y en rojo",description:"No está escondido detrás de un filtro a propósito: es lo primero que hay que resolver.<br><br>Cada lÃnea dice de qué negocio se trata y lleva directo a él, para no tener que ir a buscarlo antes de levantar el teléfono.",side:"bottom",align:"start"}},{element:'[data-tour="agenda-encabezado"]',popover:{title:"4 · Cerrar una actividad es agendar la siguiente",description:"Al marcar <strong>Hecha</strong> se pregunta cómo salió âuna lÃnea bastaâ y se ofrece agendar la próxima acción ahà mismo, con el contexto fresco.<br><br>Ese es el hábito completo. Si se cierra sin agendar nada, el negocio se queda sin próxima acción y desaparece de la agenda: avanza solo si alguien se acuerda.",side:"bottom",align:"start"}},{element:'[data-tour="agenda-encabezado"]',popover:{title:"5 · Y quien dirige ve la del equipo",description:"El selector cambia entre <strong>mis actividades</strong> y las de <strong>todo el equipo</strong>. La segunda vista sirve para lo que no se ve en un reporte: quién está saturado, qué cliente lleva dos semanas sin que nadie lo toque.",side:"bottom",align:"end"}}],Re={LLAMADA:Ne,REUNION:be,CORREO:je,VISITA:ve,TAREA:te},M=g=>re(g),Oe=g=>{const v=new Date(`${String(g).slice(0,10)}T00:00:00`),c=new Date;c.setHours(0,0,0,0);const o=Math.round((v.getTime()-c.getTime())/864e5);return o===0?"hoy":o===1?"mañana":o===-1?"ayer":o<0?`hace ${Math.abs(o)} dÃas`:o<7?`en ${o} dÃas`:v.toLocaleDateString("es-GT",{day:"2-digit",month:"short"})},Ke=()=>{const{startTour:g,hasSeenTour:v}=Ce("crm-agenda",Me),{isChatAgentActive:c}=ke(),[o,ne]=r.useState([]),[A,oe]=r.useState({vencidas:0,hoy:0,proximas:0}),[ie,R]=r.useState(!0),[j,le]=r.useState(!1),[b,O]=r.useState([]),[z,P]=r.useState(!1),[_,V]=r.useState(null),[t,N]=r.useState(null),[H,S]=r.useState(""),[w,W]=r.useState(!0),[m,h]=r.useState({tipo:"LLAMADA",titulo:"",vence:M(3)}),[B,U]=r.useState(!1),q=r.useCallback(async()=>{var a;if(c){P(!0);try{const n=localStorage.getItem(C.STORAGE_KEYS.AUTH_TOKEN)||C.AUTH_TOKEN,i=await ye.get(`${C.BASE_URL}/${C.API_PREFIX}/chatagent-appointments`,{params:{sort:"start_datetime:asc",pagination:{limit:50},populate:["service","customer","agent","branch"],"filters[status][$ne]":"cancelled"},headers:{Authorization:`Bearer ${n}`}});O(((a=i.data)==null?void 0:a.data)||[])}catch{O([])}finally{P(!1)}}},[c]),f=r.useCallback(async()=>{R(!0);const a=[D.agenda({todas:j,dias:60})];c&&a.push(q());const[n]=await Promise.all(a);ne(n.data),oe(n.resumen),R(!1)},[j,q,c]),ce=async a=>{var n,i,d;V(a.id);try{const l=a.start_datetime?a.start_datetime.split("T")[0]:re(),s=a.start_datetime&&a.start_datetime.includes("T")?a.start_datetime.split("T")[1].slice(0,5):void 0,x=((n=a.customer)==null?void 0:n.name)||"Cliente WhatsApp",u=((i=a.service)==null?void 0:i.name)||a.title||"Cita Agendada";await D.crear({tipo:"REUNION",titulo:`[WhatsApp] ${u} â ${x}`,nota:`Cita reservada por ChatAgent WhatsApp. 2Cliente: ${x} 3Tel: ${((d=a.customer)==null?void 0:d.phone)||"N/A"} 4Servicio: ${u} 5Notas: ${a.notes||"Ninguna"}`,vence:l,hora:s}),y({title:"Cita sincronizada con CRM",description:`Agendada en tu calendario para el ${l}${s?` a las ${s}`:""}`}),await f()}catch{y({title:"Error al sincronizar cita con CRM",variant:"destructive"})}finally{V(null)}};r.useEffect(()=>{f()},[f]);const de=r.useMemo(()=>({VENCIDA:o.filter(a=>a.urgencia==="VENCIDA"),HOY:o.filter(a=>a.urgencia==="HOY"),PROXIMA:o.filter(a=>a.urgencia==="PROXIMA")}),[o]),me=async()=>{var a,n,i,d;if(t!=null&&t.documentId){U(!0);try{const l=t.negocio?"negocio":t.cliente?"cliente":t.empresa?"empresa":t.proyecto?"proyecto":null,s=((a=t.negocio)==null?void 0:a.id)??((n=t.cliente)==null?void 0:n.id)??((i=t.empresa)==null?void 0:i.id)??((d=t.proyecto)==null?void 0:d.id),x=await D.completar(t.documentId,{resultado:H.trim()||void 0,siguiente:w&&m.titulo.trim()&&l&&s?{...m,titulo:m.titulo.trim(),[l]:s}:null});y({title:"Actividad cerrada",description:x.siguiente?"Y quedó agendada la siguiente.":void 0}),N(null),S(""),h({tipo:"LLAMADA",titulo:"",vence:M(3)}),await f()}catch{y({title:"No se pudo cerrar",variant:"destructive"})}finally{U(!1)}}},I=({clave:a,titulo:n,descripcion:i,tono:d})=>{const l=de[a];return l.length?e.jsxs("div",{className:"space-y-2","data-tour":`agenda-${a.toLowerCase()}`,children:[e.jsxs("div",{className:"flex items-baseline gap-2",children:[e.jsx("h2",{className:"text-lg font-semibold",children:n}),e.jsx(E,{variant:"secondary",children:l.length}),e.jsx("span",{className:"text-xs text-muted-foreground",children:i})]}),e.jsx("ul",{className:"space-y-2",children:l.map(s=>{var Y;const x=Re[s.tipo]||te,u=s.negocio||s.cliente||s.empresa||s.proyecto,F=(Y=s.negocio)!=null&&Y.documentId?`/crm/sale/${s.negocio.documentId}`:null;return e.jsxs("li",{className:`rounded-lg border p-3 flex items-start gap-3 ${d}`,children:[e.jsx(x,{className:"h-4 w-4 mt-0.5 shrink-0"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("p",{className:"font-medium text-sm text-foreground",children:s.titulo}),e.jsxs("p",{className:"text-xs mt-0.5",children:[$[s.tipo]," · ",Oe(s.vence),s.hora?` · ${String(s.hora).slice(0,5)}`:"",j&&s.responsable?` · ${s.responsable.nombres||s.responsable.username}`:""]}),(u==null?void 0:u.Nombre)&&e.jsxs("p",{className:"text-xs mt-1 text-muted-foreground truncate",children:["Sobre:"," ",F?e.jsx(k,{to:F,className:"text-primary hover:underline",children:u.Nombre}):u.Nombre]})]}),e.jsxs(p,{size:"sm",variant:"ghost",className:"h-8 gap-1 text-xs shrink-0",onClick:()=>{N(s),S(""),W(!0),h({tipo:"LLAMADA",titulo:"",vence:M(3)})},children:[e.jsx(fe,{className:"h-3.5 w-3.5"})," Hecha"]})]},s.documentId||s.id)})})]}):null};return e.jsxs("div",{className:"p-4 md:p-6 space-y-6",children:[e.jsx($e,{onClick:g,hasSeenTour:v}),e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-3","data-tour":"agenda-encabezado",children:[e.jsxs("div",{children:[e.jsxs("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[e.jsx(ue,{className:"h-6 w-6 text-primary"}),"Mi agenda"]}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"A quién hay que buscar hoy"})]}),e.jsx("div",{className:"flex items-center gap-2",children:e.jsxs(X,{value:j?"todas":"mias",onValueChange:a=>le(a==="todas"),children:[e.jsx(K,{className:"w-[190px]",children:e.jsx(Q,{})}),e.jsxs(J,{children:[e.jsx(T,{value:"mias",children:"Mis actividades"}),e.jsx(T,{value:"todas",children:"Las de todo el equipo"})]})]})})]}),e.jsx("div",{className:Z("grid gap-3",c?"grid-cols-2 sm:grid-cols-4":"grid-cols-1 sm:grid-cols-3"),"data-tour":"agenda-resumen",children:[{n:A.vencidas,t:"Vencidas",c:"text-destructive"}
5,{n:A.hoy,t:"Para hoy",c:"text-amber-600 dark:text-amber-400"},{n:A.proximas,t:"Próximas",c:"text-muted-foreground"},...c?[{n:b.length,t:"Citas WhatsApp (Bot)",c:"text-emerald-600 dark:text-emerald-400"}]:[]].map(a=>e.jsx(ae,{children:e.jsxs(se,{className:"p-4",children:[e.jsx("p",{className:`text-3xl font-bold ${a.c}`,children:a.n}),e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:a.t})]})},a.t))}),c&&b.length>0&&e.jsx(ae,{className:"border-emerald-500/30 bg-emerald-500/[0.02]",children:e.jsxs(se,{className:"p-4 space-y-3",children:[e.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center justify-between gap-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"p-1.5 rounded-md bg-emerald-500/10 text-emerald-600",children:e.jsx(pe,{className:"h-4 w-4"})}),e.jsxs("div",{children:[e.jsxs("h3",{className:"text-sm font-semibold flex items-center gap-2",children:["Citas Agendadas por WhatsApp (ChatAgent)",e.jsxs(E,{variant:"secondary",className:"bg-emerald-500/10 text-emerald-700 text-xs",children:[b.length," citas"]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Reservadas por el bot de WhatsApp listas para sincronizar con la agenda comercial"})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(p,{variant:"ghost",size:"sm",onClick:q,disabled:z,className:"h-8 text-xs gap-1",children:[e.jsx(xe,{className:Z("h-3.5 w-3.5",z&&"animate-spin")}),"Refrescar"]}),e.jsx(p,{asChild:!0,variant:"outline",size:"sm",className:"h-8 text-xs gap-1 border-emerald-500/30 text-emerald-700 hover:bg-emerald-500/10",children:e.jsxs(k,{to:"/chatagent/appointments",children:["Ver en ChatAgent ",e.jsx(ge,{className:"h-3 w-3"})]})})]})]}),e.jsx("div",{className:"grid gap-2 sm:grid-cols-2 lg:grid-cols-3",children:b.map(a=>{var i,d,l;const n=a.start_datetime?new Date(a.start_datetime).toLocaleDateString("es-GT",{day:"2-digit",month:"short",hour:"2-digit",minute:"2-digit"}):"Fecha a convenir";return e.jsxs("div",{className:"p-3 rounded-lg border border-border/80 bg-background/80 hover:border-emerald-500/50 transition-all flex flex-col justify-between gap-2",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-start justify-between gap-2",children:[e.jsx("p",{className:"font-medium text-xs truncate",children:((i=a.customer)==null?void 0:i.name)||"Cliente WhatsApp"}),e.jsx(E,{variant:"outline",className:"text-[10px] uppercase font-mono px-1 py-0",children:a.status})]}),e.jsxs("p",{className:"text-[11px] text-muted-foreground mt-0.5",children:[((d=a.service)==null?void 0:d.name)||a.title||"Servicio"," · ",n]}),((l=a.customer)==null?void 0:l.phone)&&e.jsxs("p",{className:"text-[11px] text-emerald-600 font-mono mt-0.5",children:["ð± ",a.customer.phone]}),a.notes&&e.jsxs("p",{className:"text-[11px] text-muted-foreground italic mt-1 line-clamp-2",children:['"',a.notes,'"']})]}),e.jsxs(p,{size:"sm",variant:"outline",className:"w-full text-xs h-7 gap-1 border-emerald-500/40 text-emerald-700 hover:bg-emerald-500/10",onClick:()=>ce(a),disabled:_===a.id,children:[_===a.id?e.jsx(L,{className:"h-3 w-3 animate-spin"}):e.jsx(G,{className:"h-3 w-3"}),"Sincronizar a Mi Agenda CRM"]})]},a.id)})})]})}),ie?e.jsxs("div",{className:"flex items-center justify-center gap-2 py-16 text-muted-foreground",children:[e.jsx(L,{className:"h-5 w-5 animate-spin"})," Cargando tu agendaâ¦"]}):o.length===0?e.jsxs("div",{className:"text-center py-16 space-y-3",children:[e.jsx(he,{className:"h-10 w-10 mx-auto text-muted-foreground/40"}),e.jsx("p",{className:"font-medium",children:"No tienes nada agendado"}),e.jsx("p",{className:"text-sm text-muted-foreground max-w-md mx-auto",children:"Las actividades se agendan desde cada negocio, contacto o empresa. Abre un negocio y agenda la llamada o la visita que sigue: aparecerá aquà el dÃa que toque."}),e.jsx(p,{asChild:!0,variant:"outline",className:"gap-1.5 mt-1",children:e.jsxs(k,{to:"/crm/sale",children:[e.jsx(G,{className:"h-4 w-4"})," Ir a Negocios"]})})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsx(I,{clave:"VENCIDA",titulo:"Vencidas",descripcion:"deberÃan haberse hecho ya",tono:"bg-destructive/10 text-destructive border-destructive/30"}),e.jsx(I,{clave:"HOY",titulo:"Para hoy",descripcion:"lo de la jornada",tono:"bg-amber-500/10 text-amber-700 dark:text-amber-400 border-amber-500/30"}),e.jsx(I,{clave:"PROXIMA",titulo:"Lo que viene",descripcion:"los próximos dÃas",tono:"bg-card border-border"})]}),e.jsx(Ae,{open:!!t,onOpenChange:a=>!a&&N(null),children:e.jsxs(Se,{size:"md",children:[e.jsxs(we,{children:[e.jsx(qe,{children:"¿Cómo salió?"}
5),e.jsx(Ie,{children:t==null?void 0:t.titulo})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(Le,{children:"Qué pasó"}),e.jsx(De,{rows:3,value:H,onChange:a=>S(a.target.value),placeholder:"No contestó · Pidió la propuesta · Quedamos el juevesâ¦"})]}),e.jsxs("div",{className:"rounded-lg border border-border p-3 space-y-3",children:[e.jsxs("label",{className:"flex items-center gap-2 cursor-pointer",children:[e.jsx(Te,{checked:w,onCheckedChange:a=>W(!!a)}),e.jsx("span",{className:"text-sm font-medium",children:"Agendar la siguiente"})]}),w&&e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-3",children:[e.jsxs(X,{value:m.tipo,onValueChange:a=>h({...m,tipo:a}),children:[e.jsx(K,{children:e.jsx(Q,{})}),e.jsx(J,{children:Object.keys($).map(a=>e.jsx(T,{value:a,children:$[a]},a))})]}),e.jsx(ee,{type:"date",value:m.vence,onChange:a=>h({...m,vence:a.target.value})})]}),e.jsx(ee,{value:m.titulo,onChange:a=>h({...m,titulo:a.target.value}),placeholder:"Llamar para confirmar el precio"})]})]})]}),e.jsxs(Ee,{children:[e.jsx(p,{variant:"outline",onClick:()=>N(null),children:"Cancelar"}),e.jsxs(p,{onClick:me,disabled:B,children:[B&&e.jsx(L,{className:"h-4 w-4 mr-2 animate-spin"}),"Cerrar actividad"]})]})]})})]})};export{Ke as default};
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.