PageSourceSearch

https://studio.bizino.ai/assets/index-rSx1uJxT.js

js bizino.ai collected 2026-10-05 14:53:50 UTC 479,024 bytes, 14 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/softphone-engine-Dwa88evx.js","assets/rolldown-runtime-BYbx6iT9.js","assets/PlatformSetupPage-BlIAxTcj.js","assets/vendor-CLn3cMJe.js","assets/semi-AsoFnUsH.js","assets/semi-B4LgVdWI.css","assets/ui-libs-q3eyB8Yy.js","assets/PlatformLoginPage-CDAR8m-J.js","assets/PlatformDashboardPage-C5tH5Jhx.js","assets/client-C-zFkHyh.js","assets/format-CSKd3mNJ.js","assets/OrgsPage-BycNBRYv.js","assets/EnterCompanyDialog-Dwm1Adaz.js","assets/OrgDetailPage-Cs-t4c3t.js","assets/plan-format-B4ZBHnz4.js","assets/audit-format-Bh4bjOUK.js","assets/plans-BYKO1g36.css","assets/PlatformBrandingPage-C0-oOEQi.js","assets/PlatformEmailPage-DOGfunFl.js","assets/PlatformConfigPage-BXLarL2i.js","assets/PlansPage-CXvn98dX.js","assets/InvoicesPage-BWBt3sW-.js","assets/IpnLogPage-BAWvnQi5.js","assets/AuditLogPage-BgGe4dtq.js","assets/FinancePage-B-_O-Eu8.js","assets/AffiliatePage-CQZTyo1i.js","assets/CustomersPage-Dr1aHQpU.js","assets/platform-tyG1z9uI.js","assets/useTeam-CX53q4sG.js","assets/phone-format-CexkVXNk.js","assets/CustomersPage-DNbxjmpU.css","assets/DuplicateContactsPage--GsO4Yzk.js","assets/DuplicateContactsPage-CWV__81Y.css","assets/PhoneExtractPage-LOX0qtjw.js","assets/PhoneExtractPage-BvtMOPeG.css","assets/AnalyticsPage-B45PQlyj.js","assets/useCdpDictionary-ePhTI0Ta.js","assets/quote-status-Ba_4Ajzc.js","assets/automation-Ctt-gWDR.css","assets/AutomationPage-CKHFcd6f.js","assets/useAutomation-B5oTJTT8.js","assets/AutomationFlowPage-DJBiqArZ.js","assets/xyflow-DObOfJDe.js","assets/xyflow-CHpVij2M.css","assets/AiAgentConfig-DjH_ohwU.js","assets/types-DE1E38QZ.js","assets/plan-error-BHdsGqZe.js","assets/AutomationFlowPage-AyYLLuNu.css","assets/IntegrationsPage-EMvIZqYf.js","assets/useZaloAccess-Df4m-hFS.js","assets/media-url-BOlngq3S.js","assets/IntegrationsPage-CqjNJ32J.css","assets/SettingsPage-hPtFoGHh.js","assets/call-labels-BZEKHN1O.js","assets/SettingsPage-CrIT-5Jz.css","assets/ZnsCampaignsPage-BqJhlsay.js","assets/useZnsCampaigns-vhe7mchy.js","assets/ZnsCampaignsPage-_Nzjea23.css","assets/zns-modal-DrWP2ScL.css","assets/AiWorkspacePage-DzN_mYJm.js","assets/useProductKnowledge-BdZkEYsD.js","assets/pending-change-format-WgZxpTSR.js","assets/AiWorkspacePage-Cw2B7GFW.css","assets/FollowUpPage-CsV_nDMH.js","assets/FollowUpPage-DzGi46qG.css","assets/ProductKnowledgePage-ClnG1mqg.js","assets/QuotesPage-Cr9qmnEA.js","assets/TasksPage-Dp7gWHVq.js","assets/TasksPage-CLHgio5l.css","assets/PositionMapPage-Brv_WX1s.js","assets/PositionMapPage-yO3JhJak.css","assets/MarketingPage-B9iit_ZQ.js","assets/useMarketing-BwmrUqVy.js","assets/MarketingPage-CtPLMvLt.css","assets/PublicQuotePage-IUYdYk2n.js","assets/PublicQuotePage-C4dyMJOw.css","assets/PrivacyPage-C1QlXKkm.js","assets/LegalLayout-aa6fZCrO.js","assets/LegalLayout-bELCHQCC.css","assets/TermsPage-CeqUsynE.js","assets/DataDeletionPage-CPxSPeSp.js","assets/PublicContractPage-3j60mtS7.js","assets/PublicContractPage-gOQe5JY_.css","assets/ForgotPasswordPage-nk9CvskJ.js","assets/signup-B8RJlYqU.css","assets/ResetPasswordPage-DpjyhiYP.js","assets/SignupPage-X0aJ9OM4.js","assets/VerifyEmailPage-CpK5zTE1.js","assets/NotFoundPage-LC6nz8KG.js","assets/MobileLayout-DndKo7Au.js","assets/use-mobile-badges-BfPdt5Qs.js","assets/MobileLayout-D_iyhVlV.css","assets/MInbox-Bq-PaoyP.js","assets/MThread-H9WBQBcd.js","assets/MCustomers-HTrOZAWu.js","assets/MToday-BcXPlOUf.js","assets/MMe-DNCw5d8M.js","assets/MAddCustomer-C0PKyc6m.js","assets/MNewQuote-CnABaYRZ.js","assets/MHub-CcpOYUvm.js","assets/MDashboard-BKQobFuk.js","assets/MApprovals-gWn0Yx4R.js","assets/MAutomation-BTDhB7Wy.js","assets/MMarketing-fECFWjdz.js","assets/MCustomer360-BdxUuc43.js","assets/MProducts-CXK-a7ef.js","assets/MKnowledge-WtMpv2Sa.js","assets/MZns-CoCOIrz9.js","assets/MNotifications-BwCY9OrP.js","assets/MNewTask-DSm0Ie5u.js","assets/MQuotes-Dn0EJuaE.js"])))=>i.map(i=>d[i]);
2import{a as e,r as t}from"./rolldown-runtime-BYbx6iT9.js";import{a as n,i as r,n as i,t as a}from"./semi-AsoFnUsH.js";import{a as o,c as s,d as c,f as l,i as u,l as d,n as f,o as p,p as m,s as h,t as g}from"./vendor-CLn3cMJe.js";import{$t as _,A as v,B as y,Bn as b,Br as x,Bt as S,Cn as C,Ct as w,Dn as T,Ei as E,Er as D,Et as O,Fn as k,Ft as A,G as j,Gn as M,Gr as N,H as P,Hn as ee,Hr as te,In as ne,Ir as F,It as re,J as I,Jt as ie,Kr as ae,Kt as oe,L as se,Ln as L,Lr as ce,Lt as le,M as ue,Mr as de,Mt as fe,N as R,Nn as pe,Nt as z,O as me,On as he,Or as ge,Ot as B,Pr as _e,Pt as ve,Qn as ye,Qr as V,Qt as be,Rr as xe,S as Se,Sn as Ce,St as we,T as Te,Tn as Ee,Tr as De,Tt as Oe,Un as ke,Ur as Ae,Ut as je,V as Me,Vr as H,Wt as Ne,Xn as Pe,Xt as Fe,Y as Ie,Yn as Le,Z as Re,Zn as ze,Zr as Be,_ as Ve,_n as He,_r as Ue,_t as We,ai as Ge,ar as Ke,b as qe,bi as Je,bt as Ye,c as U,cn as Xe,cr as Ze,ct as Qe,dn as $e,ei as et,en as tt,er as nt,fi as rt,g as it,gn as at,gr as ot,gt as st,h as ct,hn as lt,in as ut,j as dt,jn as ft,jr as pt,jt as mt,kn as ht,kr as gt,lt as _t,mn as vt,mr as yt,n as bt,nn as xt,nt as St,o as Ct,on as wt,or as Tt,ot as Et,pn as Dt,pr as Ot,pt as kt,q as At,qr as jt,qt as Mt,r as Nt,ri as Pt,rn as Ft,si as It,sn as Lt,sr as Rt,tr as zt,tt as Bt,ui as Vt,un as Ht,ur as Ut,ut as Wt,v as Gt,vr as Kt,w as qt,xr as Jt,xt as Yt,yi as Xt,yn as Zt,z as Qt,zr as $t,zt as en}from"./ui-libs-q3eyB8Yy.js";import{a as tn,c as nn,d as rn,f as an,i as on,l as sn,o as cn,r as W,s as ln,t as G,u as un}from"./client-C-zFkHyh.js";import{t as dn}from"./socket-JJjA1all.js";import{n as fn,t as pn}from"./phone-format-CexkVXNk.js";import{n as mn,o as hn,p as gn,u as _n}from"./plan-format-B4ZBHnz4.js";import{n as vn,t as yn}from"./plan-error-BHdsGqZe.js";/* empty css                    */import{c as bn,d as xn,l as Sn,n as Cn,o as wn,s as Tn,t as En,u as Dn}from"./call-labels-BZEKHN1O.js";/* empty css               */import{c as On,i as kn,p as An,t as jn,u as Mn}from"./quote-status-Ba_4Ajzc.js";import{a as Nn,i as Pn,n as Fn,r as In,t as Ln}from"./platform-tyG1z9uI.js";/* empty css                  */import{n as Rn,r as zn}from"./media-url-BOlngq3S.js";(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var Bn=e(m(),1),K=e(n(),1),Vn=null,Hn=null;async function Un(){return Vn||(Hn||=G.get(`/me/permissions`).then(e=>(Vn=e.data,Vn)).finally(()=>{Hn=null}),Hn)}function Wn(){Vn=null}var Gn={role:``,groups:{},levels:{},domains:[]},Kn=new Set([`full`,`team`,`own`]);function qn(){let[e,t]=(0,K.useState)(Vn),[n,r]=(0,K.useState)(!Vn);(0,K.useEffect)(()=>
2{if(Vn)return;let e=!1;return Un().then(n=>{e||t(n)}).catch(()=>{e||t(Gn)}).finally(()=>{e||r(!1)}),()=>{e=!0}},[]);let i=t=>e?e.domains.find(e=>e.key===t)?.mine??`none`:`full`;return{loading:n,levelOf:i,role:e?.role??null,domains:e?.domains??[],groups:e?.groups??{},levelLabels:e?.levels??{},thay:e=>i(e)!==`none`,ghiDuoc:e=>Kn.has(i(e))}}var Jn=`https://bzncrm-api.bizino.ai`,Yn=5e3,Xn=6e4,Zn=null,Qn=null,$n=null,er=null,tr=0,nr=null;function rr(){nr&&clearTimeout(nr),nr=null}function ir(){let e=Zn;if(!(!e||!Qn||e.connected||e.active)){if(tn(Qn)===er)return ar();e.connect()}}function ar(){rr();let e=Math.min(Xn,Yn*2**Math.max(0,tr-1));nr=setTimeout(()=>{nr=null,ir()},e)}typeof window<`u`&&window.addEventListener(on,ir);function or(e,t){return e!==t}function sr(e){if(Zn&&!or(Qn,e))return Zn;cr();let t=dn(Jn,{auth:t=>{$n=tn(e),t({token:$n})},transports:[`websocket`,`polling`],reconnection:!0,reconnectionDelay:1500,reconnectionDelayMax:1e4,timeout:1e4});return t.on(`connect`,()=>{tr=0,er=null,rr()}),t.on(`connect_error`,()=>{t.active||(tr++,er=$n,ar())}),Zn=t,Qn=e,t}function cr(){rr(),tr=0,er=null,$n=null,Zn&&(Zn.removeAllListeners(),Zn.disconnect()),Zn=null,Qn=null}function lr(){let{token:e}=J(),t=e?sr(e):null,[n,r]=(0,K.useState)(()=>t?.connected??!1),[i,a]=(0,K.useState)(t);return i!==t&&(a(t),r(t?.connected??!1)),(0,K.useEffect)(()=>{if(!t)return;let e=()=>{r(!0),console.log(`[Socket] connected:`,t.id)},n=e=>{r(!1),console.log(`[Socket] disconnected:`,e)},i=e=>{console.warn(`[Socket] connect error:`,e.message)};return t.on(`connect`,e),t.on(`disconnect`,n),t.on(`connect_error`,i),ir(),()=>{t.off(`connect`,e),t.off(`disconnect`,n),t.off(`connect_error`,i)}},[t]),{socket:t,connected:n,joinConv:(0,K.useCallback)(e=>{t?.emit(`join:conv`,e)},[t]),leaveConv:(0,K.useCallback)(e=>{t?.emit(`leave:conv`,e)},[t]),emitTypingStart:(0,K.useCallback)(e=>{t?.emit(`typing:start`,e)},[t]),emitTypingStop:(0,K.useCallback)(e=>{t?.emit(`typing:stop`,e)},[t]),on:(0,K.useCallback)((e,n)=>t?(t.on(e,n),()=>{t.off(e,n)}):()=>{},[t])}}var q=e(E(),1);function ur(e,t){return an.isAxiosError(e)?rn(e)??t:t}var dr=(0,K.createContext)(null),fr=new Set([`ORG_EXPIRED`,`ORG_SUSPENDED`,`EMAIL_NOT_VERIFIED`]);function pr({children:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(()=>ln(`token`)),[a,o]=(0,K.useState)(!0),[s,c]=(0,K.useState)(``),l=!!t&&!!r;(0,K.useEffect)(()=>{if(!r){o(!1);return}let e=!1,t=async r=>{try{let t=await G.get(`/auth/me`);e||n(t.data)}catch(n){if(e)return;let a=n.response?.status,o=n.response?.data?.code;if(a===401&&(o===`TOKEN_EXPIRED`||o===`TOKEN_INVALID`||o===`TOKEN_MISSING`)){cr(),nn(`token`),i(null);return}if((!a||a>=500||a===429)&&r<5){let n=2e3*2**r;return await new Promise(e=>setTimeout(e,n)),e?void 0:t(r+1)}console.warn(`[auth] /auth/me failed after ${r+1} attempt(s), status=${a}`)}finally{e||o(!1)}};return t(0),()=>{e=!0}},[r]);let u=(0,K.useCallback)(e=>{Wn(),cr(),n(e)},[]);(0,K.useEffect)(()=>{let e=()=>{i(null),u(null)};return window.addEventListener(cn,e),()=>window.removeEventListener(cn,e)},[u]);let d=(0,K.useCallback)(async(e,t)=>{c(``);try{let{token:n,refreshToken:r,user:a}=(await G.post(`/auth/login`,{email:e,password:t})).data;return sn(`token`,n),r&&sn(`refreshToken`,r),i(n),u(a),{ok:!0}}catch(e){let t=e.response?.data?.code;return fr.has(t)||c(rn(e)||`Đăng nhập thất bại`),{ok:!1,co
2de:t}}},[]),f=(0,K.useCallback)(async(e,t,n,r)=>{c(``);try{let{token:a,refreshToken:o,user:s}=(await G.post(`/setup`,{orgName:e,fullName:t,email:n,password:r})).data;return sn(`token`,a),o&&sn(`refreshToken`,o),i(a),u(s),!0}catch(e){return c(ur(e,`Thiết lập tổ chức thất bại`)),!1}},[]),p=(0,K.useCallback)((e,t,n)=>{sn(`token`,e),t&&sn(`refreshToken`,t),i(e),u(n)},[]),m=(0,K.useCallback)(async()=>{try{await G.post(`/auth/logout`)}catch{}nn(`token`),nn(`refreshToken`),i(null),u(null)},[]),h=(0,K.useCallback)(async e=>{c(``);try{let{token:t,user:n}=(await G.post(`/auth/impersonate/${e}`)).data;return sn(`token`,t),i(t),u(n),!0}catch(e){return c(ur(e,`Không thể xem dưới quyền`)),!1}},[]),g=(0,K.useCallback)(async()=>{c(``);try{let{token:e,refreshToken:t,user:n}=(await G.post(`/auth/stop-impersonation`)).data;return sn(`token`,e),t&&sn(`refreshToken`,t),i(e),u(n),!0}catch(e){return c(ur(e,`Không thể quay lại tài khoản gốc`)),!1}},[]),_=(0,K.useCallback)(e=>{n(t=>t&&{...t,...e})},[]);return(0,q.jsx)(dr.Provider,{value:{user:t,token:r,isAuthenticated:l,loading:a,login:d,setup:f,applySession:p,logout:m,impersonate:h,stopImpersonation:g,patchUser:_,error:s},children:e})}function J(){let e=(0,K.useContext)(dr);if(!e)throw Error(`useAuth must be used within AuthProvider`);return e}var mr=512*1024,hr=[`image/png`,`image/jpeg`,`image/svg+xml`,`image/webp`,`image/x-icon`],gr=hr.join(`,`),_r=1024;function vr(e){if(e.size===0)return`Tệp rỗng — hãy chọn ảnh khác.`;let t=e.type.toLowerCase();return t?hr.includes(t)?e.size>524288?`Ảnh tối đa ${mr/_r} KB (tệp này ${Math.round(e.size/_r)} KB).`:null:`Không hỗ trợ định dạng ${t}. Dùng PNG, JPEG, SVG, WebP hoặc ICO.`:`Không nhận được định dạng của tệp. Dùng PNG, JPEG, SVG, WebP hoặc ICO.`}function yr(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(r.result),r.onerror=()=>n(r.error??Error(`Không đọc được tệp`)),r.readAsDataURL(e)})}function br(e,t){let n=e;return n?.response?.data?.error||n?.response?.data?.message||t}async function xr(){let{data:e}=await G.get(`/branding/org`);return e}async function Sr(e,t){try{let{data:n}=await G.get(`/branding/org/${e}`,{responseType:`blob`,params:t?{v:t}:void 0});return URL.createObjectURL(n)}catch{return null}}async function Cr(e){await G.put(`/branding/org`,{brandName:e})}async function wr(e,t){await G.put(`/branding/org/${e}`,{dataUrl:t})}async function Tr(e){await G.delete(`/branding/org/${e}`)}var Er=`https://bzncrm-api.bizino.ai/api/v1`,Dr=`Bizino AI`,Or=`/logo.png`,kr=`/favicon.png`,Ar={brandName:null,logoUrl:null,faviconUrl:null},jr={brandName:null,logoUrl:null,faviconUrl:null,loading:!0},Mr=(0,K.createContext)({brandName:Dr,logoUrl:Or,faviconUrl:kr,loading:!0,refresh:async()=>{},refreshOrg:async()=>{},clearOrg:()=>{}});function Nr(e,t){return t?`${Er}/platform/branding/${e}?v=${t}`:null}function Pr(e){let t=document.querySelector(`link[rel~='icon']`);t||(t=document.createElement(`link`),t.rel=`icon`,document.head.appendChild(t)),t.href=e}function Fr({children:e}){let[t,n]=(0,K.useState)(jr),[r,i]=(0,K.useState)(Ar),a=(0,K.useRef)([]),o=(0,K.useCallback)(()=>{a.current.forEach(e=>URL.revokeObjectURL(e)),a.current=[]},[]),s=(0,K.useCallback)(async()=>{try{let{data:e}=await G.get(`/platform/branding`);n({brandName:e.brandName?.trim()||null,logoUrl:Nr(`logo`,e.logoVersion),faviconUrl:Nr(`favicon`,e.faviconVersion),loading:!1})}catch{n(e=>({...e,loading:!1}))}},[]),c=(0,K.useCallback)(()=>{o(),i(Ar)},[o]),l=(0,K.useCallback)(async()=>{if(!localStorage.getItem(`token`)){c();return}try{let e=await xr(),[t,n]=await Promise.all([e.hasLogo?Sr(`logo`,e.version):Promise.resolve(null),e.hasFavicon?Sr(`favicon`,e.version):Promise.resolve(null)]);o(),a.current=[t,n].filter(e=>!!e),i({brandName:e.brandName?.trim()||null,logoUrl:t,faviconUrl:n})}catch{}},[c,o]);(0,K.useEffect)(()=>{s()},[s]),(0,K.useEffect)(()=>()=>o(),[o]);let u=(0,K.useMemo)(()=>({brandName:r.brandName||t.brandName||Dr,logoUrl:r.logoUrl||t.logoUrl||Or,faviconUrl:r.faviconUrl||t.faviconUrl||kr,loading:t.loading,refresh:s,refreshOrg:l,clearOrg:c}),[r,t,s,l,c]);return(0,K.useEffect)(()=>{document.title=u.brandName,Pr(u.faviconUrl)},[u.brandName,u.faviconUrl]),(0,q.jsx)(Mr.Provider,{value:u,children:e})}function Ir(){return(0,K.useContext)(Mr)}var Lr=`mkt:chunk-reloaded`,Rr=[/Unable to preload CSS/i,/Failed to fetch dynamically imported module/i,/error loading dynamically imported module/i,/Importing a module script failed/i,/is not a valid JavaScript MIME type/i,/Failed to load module script/i,/Expected a JavaScript module script/i,/ChunkLoadError/i,/Loading chunk \S+ failed/i];function zr(e){let t=e instanceof Error?e.message:String(e??``);return Rr.some(e=>e.test(t))}function Y(e){return(0,K.lazy)(async()=>{try{let t=await e();return sessionStorage.removeItem(Lr),t}catch(t){if(!zr(t))throw t;try{let t=await e();return sessionStorage.removeItem(Lr),t}catch{}if(sessionStorage.getItem(Lr))throw t;return sessionStorage.setItem(Lr,`1`),window.location.reload(),new Promise(()=>{})}})}var Br={message:ut,contact:qt,appointment:Be,automation:Ct,handoff:Te,ai_draft:At},Vr={message:`#3b82f6`,contact:`#16a34a`,appointment:`#f59e0b`,automation:`#9333ea`,handoff:`#dc2626`,ai_draft:`#7c3aed`};function Hr(e){let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);if(t<60)return`Vừa xong`;if(t<3600)return`${Math.floor(t/60)}p trước`;if(t<86400)return`${Math.floor(t/3600)}h trước`;let n=Math.floor(t/86400);return n===1?`Hôm qua`:`${n} ngày trước`}function Ur(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(0),i=d(),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(!1),l=(0,K.useRef)(null),u=(0,K.useCallback)(async()=>{c(!0);try{let e=await G.get(`/notifications`,{params:{limit:20}}),n=e.data.notifications??e.data??[];t(n),r(n.filter(e=>!e.isRead).length)}catch{}finally{c(!1)}},[]);(0,K.useEffect)(()=>{u();let e=setInterval(u,3e4);return()=>clearInterval(e)},[u]),(0,K.useEffect)(()=>{let e=e=>{l.current&&!l.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[]);let f=async e=>{try{await G.patch(`/notifications/${e}/read`),t(t=>t.map(t=>
2t.id===e?{...t,isRead:!0}:t)),r(e=>Math.max(0,e-1))}catch{}},p=async()=>{try{await G.post(`/notifications/read-all`),t(e=>e.map(e=>({...e,isRead:!0}))),r(0)}catch{}},m=e=>{if(e.isRead||f(e.id),e.link){o(!1);try{let t=new URL(e.link,window.location.origin);t.origin===window.location.origin?i(t.pathname+t.search+t.hash):window.open(t.href,`_blank`,`noopener`)}catch{}}};return(0,q.jsxs)(`div`,{ref:l,style:{position:`relative`},children:[(0,q.jsxs)(`button`,{className:`topnav__icon-btn`,onClick:()=>{o(!a),a||u()},children:[(0,q.jsx)(rt,{size:18}),n>0&&(0,q.jsx)(`span`,{className:`topnav__badge`,children:n>9?`9+`:n})]}),a&&(0,q.jsxs)(`div`,{className:`notif-dropdown`,children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,padding:`14px 16px`,borderBottom:`1px solid var(--gray-100)`},children:[(0,q.jsxs)(`span`,{style:{fontSize:14,fontWeight:600,color:`var(--gray-800)`},children:[`Thông báo `,n>0&&`(${n})`]}),n>0&&(0,q.jsxs)(`button`,{onClick:p,style:{background:`none`,border:`none`,color:`var(--primary)`,fontSize:12,fontWeight:500,cursor:`pointer`,display:`flex`,alignItems:`center`,gap:4},children:[(0,q.jsx)(Ae,{size:14}),` Đọc tất cả`]})]}),(0,q.jsxs)(`div`,{className:`notif-dropdown__list`,children:[s&&e.length===0&&(0,q.jsx)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Đang tải...`}),!s&&e.length===0&&(0,q.jsxs)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:[(0,q.jsx)(rt,{size:28,style:{margin:`0 auto 8px`,opacity:.3}}),(0,q.jsx)(`p`,{children:`Chưa có thông báo nào.`})]}),e.map(e=>{let t=Br[e.type]||rt,n=Vr[e.type]||`#94a3b8`;return(0,q.jsxs)(`div`,{style:{display:`flex`,gap:12,padding:`12px 16px`,borderBottom:`1px solid var(--gray-50)`,cursor:`pointer`,background:e.isRead?`white`:`#f8faff`,transition:`background 0.15s`},onClick:()=>m(e),children:[(0,q.jsx)(`div`,{style:{width:32,height:32,borderRadius:`50%`,background:`${n}15`,display:`flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0},children:(0,q.jsx)(t,{size:16,color:n})}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:e.isRead?400:600,color:`var(--gray-800)`,marginBottom:2,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title}),(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-500)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.body}),(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:4},children:Hr(e.createdAt)})]}),!e.isRead&&(0,q.jsx)(`div`,{style:{width:8,height:8,borderRadius:`50%`,background:`var(--primary)`,flexShrink:0,marginTop:6}})]},e.id)})]})]})]})}var Wr=(0,K.createContext)({ent:null,loading:!0,hasFeature:()=>!0,limitOf:()=>-1,isUnlimited:()=>!0,refresh:async()=>{}});function Gr({children:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!0),a=(0,K.useCallback)(async()=>{try{let{data:e}=await G.get(`/me/entitlements`);n(e)}catch{}finally{i(!1)}},[]);(0,K.useEffect)(()=>{a()},[a]);let o=(0,K.useMemo)(()=>{let e=e=>t?t.features.includes(e):!0,n=e=>{if(!t)return-1;let n=t.limits?.[e];
2return typeof n==`number`&&Number.isFinite(n)?n:-1};return{ent:t,loading:r,hasFeature:e,limitOf:n,isUnlimited:e=>n(e)<0,refresh:a}},[t,r,a]);return(0,q.jsx)(Wr.Provider,{value:o,children:e})}function Kr(){return(0,K.useContext)(Wr)}var qr=[{label:`Tổng quan`,path:`/dashboard`,icon:T},{label:`Hội thoại`,path:`/conversations`,icon:xt},{label:`Khách hàng`,path:`/customers`,icon:Gt},{label:`Marketing`,path:`/marketing`,icon:Xe,hideForMember:!0,feature:`marketing`},{label:`Báo giá`,path:`/quotes`,icon:zt,feature:`quotes`},{label:`Sản phẩm`,path:`/knowledge-base`,icon:ie}],Jr=[{group:`Phân tích`,items:[{label:`CDP & Phân tích`,path:`/analytics`,icon:ae,hideForMember:!0,feature:`cdp`}]},{group:`Làm việc`,items:[{label:`Công việc`,path:`/tasks`,icon:j},{label:`Sơ đồ vai trò`,path:`/positions`,icon:Fe},{label:`Bám đuổi`,path:`/followup`,icon:xt}]},{group:`Cấu hình`,items:[{label:`Tự động hóa`,path:`/automation`,icon:Ct,hideForMember:!0,feature:`automation`},{label:`AI`,path:`/ai`,icon:At,adminOnly:!0},{label:`Tích hợp`,path:`/integrations`,icon:O,adminOnly:!0},{label:`Cài đặt`,path:`/settings`,icon:Et}]}];function Yr(e,t,n){let r=t===`owner`||t===`admin`;return e.adminOnly&&!r||e.hideForMember&&t===`member`?`hide`:e.feature&&!n(e.feature)?`locked`:`show`}function Xr(e,t,n){return e.flatMap(e=>{let r=Yr(e,t,n);if(r===`hide`)return[];let i=r===`locked`;return[{...e,locked:i,target:i?`/upgrade?feature=${encodeURIComponent(e.feature??``)}`:e.path}]})}var Zr={"/dashboard":`dashboard tong quan trang chu home`,"/conversations":`hoi thoai chat tin nhan messenger zalo inbox`,"/customers":`khach hang contact crm danh ba`,"/marketing":`marketing lich dang bai social calendar chien dich`,"/quotes":`bao gia quotation hop dong bao gia`,"/knowledge-base":`san pham knowledge base faq catalog kho hang`,"/analytics":`phan tich analytics cdp bao cao thong ke`,"/automation":`tu dong hoa automation kich ban flow`,"/ai":`ai tro ly logic ai prompt cau hinh ai`,"/integrations":`tich hop integration pancake perfex kho ung dung`,"/settings":`cai dat settings`},Qr=[...qr,...Jr.flatMap(e=>e.items)].map(e=>({id:`nav-${e.path}`,group:`nav`,label:e.label,keywords:Zr[e.path]??``,navItem:e})),$r=qr[0].icon,ei=[{key:`profile`,label:`Hồ sơ của tôi`,path:`/settings`,keywords:`ho so ca nhan profile tai khoan`},{key:`security`,label:`Mật khẩu & Bảo mật`,path:`/settings/security`,keywords:`mat khau doi mat khau bao mat password security`},{key:`notifications`,label:`Thông báo`,path:`/settings/notifications`,keywords:`thong bao notification`},{key:`company`,label:`Thông tin công ty`,path:`/settings/company`,keywords:`thong tin cong ty company`,adminOnly:!0},{key:`branding`,label:`Thương hiệu riêng`,path:`/settings/branding`,keywords:`thuong hieu logo branding white label`,adminOnly:!0},{key:`staff`,label:`Nhân sự`,path:`/settings/staff`,keywords:`nhan su nhan vien staff team member`,hideForMember:!0},{key:`org-tree`,label:`Sơ đồ tổ chức`,path:`/settings/org-tree`,keywords:`so do to chuc org chart cay nhan su`,hideForMember:!0},{key:`tags`,label:`Quản lý nhãn`,path:`/settings/tags`,keywords:`nhan tag label quan ly nhan`,adminOnly:!0},{key:`quote-templates`,label:`Mẫu báo giá`,path:`/settings/quote-templates`,keywords:`mau bao gia template`,hideForMember:!0},{key:`webhooks`,label:`Webhook thu dữ liệu`,path:`/integrations/webhooks`,keywords:`webhook thu du lieu tich hop landing page bieu mau lead`,adminOnly:!0,feature:`webhook_inbound`},{key:`roles`,label:`Phân quyền`,path:`/settings/roles`,keywords:`phan quyen permission role rbac`,adminOnly:!0},{key:`domains`,label:`Tên miền tùy chỉnh`,path:`/settings/domains`,keywords:`ten mien domain custom`,adminOnly:!0},{key:`billing`,label:`Gói & Thanh toán`,path:`/settings/billing`,keywords:`goi thanh toan billing subscription hoa don invoice`,adminOnly:!0}].map(({key:e,label:t,path:n,keywords:r,adminOnly:i,hideForMember:a,feature:o})=>({id:`nav-settings-${e}`,group:`nav`,label:t,keywords:r,navItem:{label:t,path:n,icon:$r,adminOnly:i,hideForMember:a,feature:o}})),ti=[{id:`action-billing`,label:`Thanh toán & hoá đơn`,path:`/settings/billing`,keywords:`thanh toan billing invoice hoa don goi cuoc`,adminOnly:!0},{id:`action-upgrade`,label:`Nâng cấp gói`,path:`/upgrade`,keywords:`nang cap goi upgrade subscription plan pricing`},{id:`action-connect-zalo`,label:`Kết nối Zalo`,path:`/integrations/accounts`,keywords:`ket noi zalo lien ket tai khoan oa zalo oa`,adminOnly:!0},{id:`action-integrations`,label:`Quản lý tích hợp`,path:`/integrations`,keywords:`tich hop integration pancake perfex kho ung dung`,adminOnly:!0},{id:`action-invite-staff`,label:`Mời nhân viên`,path:`/settings/staff`,keywords:`moi nhan vien invite staff them nhan su`,hideForMember:!0},{id:`action-change-password`,label:`Đổi mật khẩu`,path:`/settings/security`,keywords:`doi mat khau change password bao mat`}].map(({id:e,label:t,path:n,keywords:r,adminOnly:i,hideForMember:a})=>({id:e,group:`action`,label:t,keywords:r,navItem:{label:t,path:n,icon:$r,adminOnly:i,hideForMember:a}})),ni=[...Qr,...ei,...ti];function ri(e,t){return ni.flatMap(n=>{let r=Yr(n.navItem,e,t);if(r===`hide`)return[];let i=r===`locked`,a=i?`/upgrade?feature=${encodeURIComponent(n.navItem.feature??``)}`:n.navItem.path;return[{...n,locked:i,target:a}]})}var ii=/[̀-ͯ]/g;function ai(e){return e.normalize(`NFD`).replace(ii,``).replace(/đ/g,`d`).replace(/Đ/g,`D`).toLowerCase().trim()}function oi(e,t){let n=ai(t);return n?e.filter(e=>ai(`${e.label} ${e.keywords}`).includes(n)):e}var si={contact:{icon:Gt,label:`Khách hàng`,iconBg:`#eef2ff`,iconColor:`#6366f1`,badgeBg:`#eef2ff`,badgeColor:`#4f46e5`}
2,conversation:{icon:xt,label:`Hội thoại`,iconBg:`#ecfdf5`,iconColor:`#10b981`,badgeBg:`#ecfdf5`,badgeColor:`#059669`},message:{icon:xt,label:`Tin nhắn`,iconBg:`#fffbeb`,iconColor:`#f59e0b`,badgeBg:`#fffbeb`,badgeColor:`#d97706`},quote:{icon:zt,label:`Báo giá`,iconBg:`#f5f3ff`,iconColor:`#8b5cf6`,badgeBg:`#f5f3ff`,badgeColor:`#7c3aed`},nav:{icon:Ue,label:`Điều hướng`,iconBg:`#f0f9ff`,iconColor:`#0284c7`,badgeBg:`#f0f9ff`,badgeColor:`#0369a1`},action:{icon:Ct,label:`Hành động`,iconBg:`#fef2f2`,iconColor:`#ef4444`,badgeBg:`#fef2f2`,badgeColor:`#dc2626`}},ci=`Unknown`;function li(...e){for(let t of e){let e=(t??``).trim();if(e&&e!==ci)return e}return`Chưa có tên`}function ui({open:e,onOpenChange:t}){let[n,r]=(0,K.useState)(``),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(0),u=(0,K.useRef)(null),f=d(),{user:p}=J(),{hasFeature:m}=Kr();(0,K.useEffect)(()=>{let n=n=>{(n.metaKey||n.ctrlKey)&&n.key===`k`&&(n.preventDefault(),t(!e)),n.key===`Escape`&&t(!1)};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[e,t]);let h=(0,K.useMemo)(()=>oi(ri(p?.role,m),n).map(e=>({id:e.id,type:e.group,title:e.label,subtitle:e.locked?`Cần nâng cấp gói — bấm để xem`:e.target,path:e.target})),[p?.role,m,n]),g=(0,K.useMemo)(()=>[...h,...i],[h,i]);(0,K.useEffect)(()=>{e&&(setTimeout(()=>u.current?.focus(),50),r(``),a([]),l(0))},[e]),(0,K.useEffect)(()=>{if(!n||n.length<2){a([]);return}let e=setTimeout(async()=>{s(!0);try{a((await G.get(`/search`,{params:{q:n,limit:12}})).data.results??[])}catch{try{a(((await G.get(`/contacts`,{params:{search:n,limit:6}})).data.contacts??[]).map(e=>({id:e.id,type:`contact`,title:li(e.fullName),subtitle:pn(e.phone)||e.email||`—`,avatar:e.avatarUrl})))}catch{}}finally{s(!1)}},300);return()=>clearTimeout(e)},[n]);let _=(0,K.useCallback)(e=>{e.key===`ArrowDown`?(e.preventDefault(),l(e=>Math.min(e+1,g.length-1))):e.key===`ArrowUp`?(e.preventDefault(),l(e=>Math.max(e-1,0))):e.key===`Enter`&&g[c]&&(e.preventDefault(),v(g[c]))},[g,c]),v=e=>{switch(t(!1),e.type){case`contact`:f(`/customers?openContact=${e.id}`);break;case`conversation`:f(`/conversations?selectConv=${e.id}`);break;case`quote`:f(`/quotes?id=${e.id}`);break;case`message`:e.conversationId?f(`/conversations?selectConv=${e.conversationId}`):f(`/conversations`);break;case`nav`:case`action`:e.path&&f(e.path);break}};return e?(0,q.jsx)(`div`,{style:{position:`fixed`,inset:0,zIndex:9999,background:`rgba(0,0,0,0.4)`,backdropFilter:`blur(4px)`,display:`flex`,alignItems:`flex-start`,justifyContent:`center`,paddingTop:`15vh`},onClick:()=>t(!1),children:(0,q.jsxs)(`div`,{style:{width:560,maxWidth:`90vw`,background:`white`,borderRadius:16,boxShadow:`0 24px 64px rgba(0,0,0,0.2)`,overflow:`hidden`},onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12,padding:`16px 20px`,borderBottom:`1px solid var(--gray-100)`},children:[(0,q.jsx)(_t,{size:18,color:`#94a3b8`}),(0,q.jsx)(`input`,{ref:u,type:`text`,placeholder:`Tìm kiếm khách hàng, hội thoại, tin nhắn...`,value:n,onChange:e=>{r(e.target.value),l(0)},onKeyDown:_,style:{flex:1,border:`none`,outline:`none`,fontSize:15,color:`var(--gray-800)`,background:`transparent`}}),(0,q.jsx)(`kbd`,{style:{padding:`2px 8px`,background:`var(--gray-100)`,borderRadius:4,fontSize:11,color:`var(--gray-500)`,fontFamily:`inherit`},children:`ESC`})]}),(0,q.jsxs)(`div`,{style:{maxHeight:360,overflowY:`auto`},children:[o&&(0,q.jsx)(`div`,{style:{padding:24,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Đang tìm kiếm...`}),!o&&n.length>0&&g.length===0&&(0,q.jsxs)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:[`Không tìm thấy kết quả cho "`,n,`"`]}),g.map((e,t)=>{let n=si[e.type]||si.message,r=n.icon;return(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12,padding:`10px 20px`,cursor:`pointer`,background:t===c?`var(--gray-50)`:`transparent`,transition:`background 0.1s`},onClick:()=>v(e),onMouseEnter:()=>l(t),children:[(0,q.jsx)(`div`,{style:{width:32,height:32,borderRadius:`50%`,background:n.iconBg,display:`flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0},children:(0,q.jsx)(r,{size:14,color:n.iconColor})}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,color:`var(--gray-800)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:e.title}),(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-400)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`}
2,children:e.subtitle})]}),(0,q.jsx)(`span`,{style:{fontSize:10,fontWeight:600,letterSpacing:.2,color:n.badgeColor,background:n.badgeBg,padding:`3px 8px`,borderRadius:6,flexShrink:0},children:n.label}),t===c&&(0,q.jsx)(Xt,{size:12,color:`var(--gray-400)`,style:{flexShrink:0}})]},`${e.type}-${e.id}`)})]}),(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:16,padding:`10px 20px`,borderTop:`1px solid var(--gray-100)`,fontSize:11,color:`var(--gray-400)`},children:[(0,q.jsx)(`span`,{children:`↑↓ điều hướng`}),(0,q.jsx)(`span`,{children:`↵ chọn`}),(0,q.jsx)(`span`,{children:`ESC đóng`})]})]})}):null}function di(){let e=d(),{ent:t}=Kr();if(!t)return null;let n=gn(t);return(0,q.jsxs)(`button`,{type:`button`,className:`plan-badge plan-badge--${n.tone}`,onClick:()=>e(`/settings/billing`),title:n.full,children:[(0,q.jsx)(`span`,{className:`plan-badge__dot`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`plan-badge__full`,children:n.full}),(0,q.jsx)(`span`,{className:`plan-badge__compact`,children:n.compact})]})}function fi(){let{user:e,stopImpersonation:t}=J(),[n,r]=(0,K.useState)(!1);return(0,q.jsxs)(q.Fragment,{children:[e?.platformActorId&&(0,q.jsxs)(`div`,{className:`platform-impersonation-banner`,children:[(0,q.jsx)(Bt,{size:14}),(0,q.jsxs)(`span`,{children:[`Bạn đang vào công ty với tư cách `,(0,q.jsx)(`strong`,{children:e.fullName}),` (bởi Super Admin)`]}),(0,q.jsx)(`button`,{className:`platform-impersonation-banner__btn`,onClick:()=>{localStorage.removeItem(`token`),localStorage.removeItem(`refreshToken`),window.location.href=`/platform`},children:`Quay lại Platform Console`})]}),e?.impersonatedBy&&(0,q.jsxs)(`div`,{style:{background:`linear-gradient(90deg, #f59e0b 0%, #ef4444 100%)`,color:`#fff`,padding:`8px 20px`,fontSize:13,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:12,position:`sticky`,top:0,zIndex:100},children:[(0,q.jsx)(Ke,{size:14}),(0,q.jsxs)(`span`,{children:[`Bạn đang xem dưới quyền `,(0,q.jsx)(`strong`,{children:e.fullName}),` (`,e.email,`)`]}),(0,q.jsx)(`button`,{onClick:async()=>{r(!0);try{if(await t()){window.location.assign(`/dashboard`);return}alert(`Không thể quay lại tài khoản gốc`)}finally{r(!1)}},disabled:n,style:{background:`rgba(255,255,255,0.2)`,border:`1px solid rgba(255,255,255,0.4)`,color:`#fff`,padding:`4px 12px`,borderRadius:6,fontSize:12,fontWeight:600,cursor:n?`wait`:`pointer`},children:n?`Đang chuyển...`:`Quay lại tài khoản gốc`})]})]})}var pi={ORG_SUSPENDED:`Công ty đang bị tạm khoá nên bạn chỉ xem được dữ liệu, không chỉnh sửa được.`,ORG_EXPIRED:`Tài khoản công ty đã hết hạn. Dữ liệu vẫn còn nguyên, nhưng cần gia hạn để chỉnh sửa lại.`,TRIAL_ENDED:`Thời gian dùng thử đã kết thúc. Chọn một gói để tiếp tục chỉnh sửa dữ liệu.`,PAST_DUE:`Hoá đơn chưa được thanh toán. Bạn vẫn xem được mọi dữ liệu, nhưng cần thanh toán để chỉnh sửa lại.`,SUBSCRIPTION_EXPIRED:`Gói dịch vụ đã hết hạn. Gia hạn để tiếp tục chỉnh sửa dữ liệu.`},mi=`Công ty đang ở chế độ chỉ đọc — bạn xem được dữ liệu nhưng chưa chỉnh sửa được.`,hi=new Set([`owner`,`admin`]);function gi(){let{ent:e}=Kr(),{user:t}=J();if(!e?.readOnly)return null;let n=pi[e.readOnlyReason??``]??mi,r=hi.has(t?.role??``);return(0,q.jsxs)(`div`,{className:`readonly-banner`,role:`status`,children:[(0,q.jsx)(v,{size:14}),(0,q.jsx)(`span`,{children:n}),r&&(0,q.jsx)(f,{to:`/settings/billing`,className:`readonly-banner__btn`,children:e.readOnlyReason===`PAST_DUE`?`Thanh toán ngay`:`Xem gói & thanh toán`})]})}function _i(){let{refreshOrg:e,clearOrg:t}=Ir(),{ent:n}=Kr(),r=n?.planCode;return(0,K.useEffect)(()=>{e()},[e,r]),(0,K.useEffect)(()=>()=>t(),[t]),null}function vi(){let{applySession:e,isAuthenticated:t}=J(),[n,r]=(0,K.useState)([]),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(null),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(null);return(0,K.useEffect)(()=>
2{if(!t)return;let e=!1;return a(!0),G.get(`/auth/my-orgs`).then(t=>{e||(r(t.data.items??[]),d(t.data.moThemCongTy??null))}).catch(()=>{}).finally(()=>{e||a(!1)}),()=>{e=!0}},[t]),{orgs:n,loading:i,switching:o,switchOrg:(0,K.useCallback)(async t=>{s(t);try{let n=await G.post(`/auth/switch-org`,{orgId:t});return e(n.data.token,n.data.refreshToken,n.data.user),window.location.reload(),!0}catch(e){return W(rn(e)||`Không chuyển được công ty. Thử lại.`,`error`),s(null),!1}},[e]),createOrg:(0,K.useCallback)(async t=>{l(!0);try{let n=await G.post(`/auth/create-org`,{orgName:t},{planErrorHandledLocally:!0});return e(n.data.token,n.data.refreshToken,n.data.user),window.location.reload(),{ok:!0}}catch(e){return l(!1),{ok:!1,planError:vn(e),message:rn(e)||`Không tạo được công ty mới. Thử lại.`}}},[e]),creating:c,quyenMoThem:u}}var yi=`/upgrade?feature=multi_org`,bi={NO_PLAN:`Trả phí`,LIMIT:`Hết suất`,PAST_DUE:`Quá hạn`};function xi(e){return e?.lyDo===`PAST_DUE`?{text:`Công ty của bạn đang quá hạn thanh toán. Thanh toán xong là mở thêm công ty được ngay.`,cta:`Thanh toán ngay`,path:yn}:e?.lyDo===`LIMIT`?{text:`Gói hiện tại cho phép mở tối đa ${e.tran} công ty, bạn đã dùng ${e.daMo}. Nâng gói để mở thêm.`,cta:`Xem các gói`,path:yn}:{text:`Mở thêm công ty là tính năng của bản trả phí. Mỗi công ty có dữ liệu và hoá đơn riêng, dùng chung một tài khoản đăng nhập.`,cta:`Xem các gói`,path:yi}}var Si=2;function Ci({createOrg:e,creating:t,quyenMoThem:n,onClose:r,onOpen:i}){let a=d(),{user:o}=J(),[s,c]=(0,K.useState)(!1),[l,u]=(0,K.useState)(``),[f,p]=(0,K.useState)(null),[m,h]=(0,K.useState)(null);if(!hn(o?.role))return null;let g=n!==null&&!n.duoc,_=()=>{c(!1),u(``),p(null),h(null)},v=e=>{_(),r(),a(e)},y=async()=>{let n=l.trim();if(n.length<Si||t)return;p(null),h(null);let r=await e(n);r.ok||(r.planError?p(r.planError):h(r.message))};if(!s)return(0,q.jsxs)(`button`,{type:`button`,className:`topnav__user-dropdown-btn topnav__user-dropdown-btn--join`,onClick:()=>{i(),c(!0)},children:[(0,q.jsx)(B,{size:14}),` Mở thêm công ty`,g&&(0,q.jsxs)(`span`,{className:`topnav__plan-lock`,children:[(0,q.jsx)(He,{size:10}),` `,bi[n?.lyDo??``]??`Trả phí`]})]});if(f||g){let e=xi(n),t=f?.message??e.text,r=f?.ctaLabel??e.cta,i=f?f.code===`FEATURE_NOT_IN_PLAN`?yi:yn:e.path;return(0,q.jsxs)(`div`,{className:`topnav__join-code`,children:[(0,q.jsxs)(`p`,{className:`topnav__upsell-text`,children:[(0,q.jsx)(Pt,{size:13}),` `,t]}),(0,q.jsxs)(`div`,{className:`topnav__join-code-row`,children:[(0,q.jsx)(`button`,{type:`button`,className:`topnav__join-code-go`,onClick:()=>v(i),children:r}),(0,q.jsx)(`button`,{type:`button`,className:`topnav__upsell-skip`,onClick:_,children:`Để sau`})]})]})}return(0,q.jsxs)(`div`,{className:`topnav__join-code`,children:[(0,q.jsx)(`label`,{className:`topnav__join-code-label`,htmlFor:`topnav-new-org`,children:`Tên công ty mới`}),(0,q.jsxs)(`div`,{className:`topnav__join-code-row`,children:[(0,q.jsx)(`input`,{id:`topnav-new-org`,className:`topnav__join-code-input topnav__join-code-input--text`,value:l,autoFocus:!0,maxLength:120,placeholder:`VD: Shop Hoa Tươi`,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Enter`&&y()}}),(0,q.jsx)(`button`,{type:`button`,className:`topnav__join-code-go`,disabled:t||l.trim().length<Si,onClick:()=>void y(),children:t?`Đang tạo…`:`Tạo`})]}),m&&(0,q.jsx)(`p`,{className:`topnav__join-code-hint topnav__join-code-hint--error`,children:m}),(0,q.jsx)(`p`,{className:`topnav__join-code-hint`,children:`Công ty mới bắt đầu ở gói Miễn phí, dữ liệu và hoá đơn tách riêng. Tạo xong bạn được chuyển sang đó luôn; công ty hiện tại vẫn giữ nguyên.`})]})}function wi({onClose:e}){let{applySession:t}=J(),{orgs:n,switching:r,switchOrg:i,createOrg:a,creating:o,quyenMoThem:s}=vi(),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(``),[f,p]=(0,K.useState)(!1),m=async()=>{let e=u.trim().toUpperCase();if(e){p(!0);try{let n=await G.post(`/auth/join-org-by-code`,{code:e});t(n.data.token,n.data.refreshToken,n.data.user),window.location.reload()}catch(e){W(rn(e)||`Không vào được công ty bằng mã này`,`error`),p(!1)}}};return(0,q.jsxs)(q.Fragment,{children:[n.length>1&&(0,q.jsxs)(`div`,{className:`topnav__orgs`,children:[(0,q.jsxs)(`div`,{className:`topnav__orgs-title`,children:[(0,q.jsx)(Pt,{size:12}),` Công ty của tôi`]}),n.map(e=>
2(0,q.jsxs)(`button`,{type:`button`,className:`topnav__org-item${e.isCurrent?` topnav__org-item--current`:``}`,disabled:e.isCurrent||!e.usable||r!==null,onClick:()=>void i(e.orgId),title:e.usable?void 0:`Công ty này đang hết hạn hoặc bị tạm khoá`,children:[(0,q.jsx)(`span`,{className:`topnav__org-name`,children:e.orgName}),(0,q.jsx)(`span`,{className:`topnav__org-role`,children:e.isCurrent?`đang dùng`:r===e.orgId?`đang chuyển…`:e.role})]},e.orgId))]}),c?(0,q.jsxs)(`div`,{className:`topnav__join-code`,children:[(0,q.jsx)(`label`,{className:`topnav__join-code-label`,htmlFor:`topnav-invite-code`,children:`Dán mã mời công ty gửi cho bạn`}),(0,q.jsxs)(`div`,{className:`topnav__join-code-row`,children:[(0,q.jsx)(`input`,{id:`topnav-invite-code`,className:`topnav__join-code-input`,value:u,autoFocus:!0,placeholder:`VD: KRT4M9PQXZ`,onChange:e=>d(e.target.value),onKeyDown:e=>{e.key===`Enter`&&m()}}),(0,q.jsx)(`button`,{type:`button`,className:`topnav__join-code-go`,disabled:f||!u.trim(),onClick:()=>void m(),children:f?`Đang vào…`:`Vào`})]}),(0,q.jsx)(`p`,{className:`topnav__join-code-hint`,children:`Công ty hiện tại của bạn vẫn giữ nguyên — vào xong đổi qua lại ở ngay trên.`})]}):(0,q.jsxs)(`button`,{type:`button`,className:`topnav__user-dropdown-btn topnav__user-dropdown-btn--join`,onClick:()=>l(!0),children:[(0,q.jsx)(ft,{size:14}),` Tham gia công ty bằng mã mời`]}),(0,q.jsx)(Ci,{createOrg:a,creating:o,quyenMoThem:s,onClose:e,onOpen:()=>l(!1)})]})}function Ti(){let e=d(),{user:t,logout:n}=J(),{brandName:r}=Ir(),{ent:i}=Kr(),[a,o]=(0,K.useState)(!1),s=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]);let c=(t?.fullName||`U`).split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase(),[l,u]=(0,K.useState)(!1);(0,K.useEffect)(()=>{u(!1)},[t?.avatarUrl]);let f=!!t?.avatarUrl&&!l;return(0,q.jsxs)(`div`,{className:`topnav__user-wrap`,ref:s,"data-tour-id":`topnav-user-menu`,children:[(0,q.jsxs)(`div`,{className:`topnav__user`,onClick:()=>o(!a),children:[(0,q.jsx)(`div`,{className:`topnav__user-avatar`,style:f?{padding:0,overflow:`hidden`}:void 0,children:f?(0,q.jsx)(`img`,{src:t.avatarUrl.startsWith(`http`)?t.avatarUrl:`https://bzncrm-api.bizino.ai${t.avatarUrl}`,alt:``,style:{width:`100%`,height:`100%`,objectFit:`cover`,borderRadius:`50%`},onError:()=>u(!0)}):c}),(0,q.jsxs)(`div`,{className:`topnav__user-info`,children:[(0,q.jsx)(`span`,{className:`topnav__user-name`,children:t?.fullName||`User`}),(0,q.jsxs)(`span`,{className:`topnav__user-role`,children:[t?.org?.name||r,` · `,t?.role||`member`]})]}),(0,q.jsx)(H,{size:14,color:`#94a3b8`})]}),a&&(0,q.jsxs)(`div`,{className:`topnav__user-dropdown`,children:[(0,q.jsxs)(`div`,{className:`topnav__user-dropdown-header`,children:[(0,q.jsx)(`div`,{className:`topnav__user-dropdown-name`,children:t?.fullName}),(0,q.jsx)(`div`,{className:`topnav__user-dropdown-email`,children:t?.email})]}),(0,q.jsxs)(`button`,{className:`topnav__user-dropdown-btn topnav__user-dropdown-btn--profile`,onClick:()=>{o(!1),e(`/settings`)},children:[(0,q.jsx)(qe,{size:14}),` Hồ sơ của tôi`]}),(0,q.jsxs)(`button`,{className:`topnav__user-dropdown-btn topnav__user-dropdown-btn--billing`,onClick:()=>{o(!1),e(`/settings/billing`)},children:[(0,q.jsx)(yt,{size:14}),(0,q.jsx)(`span`,{className:`topnav__user-dropdown-btn__label`,children:`Gói & Thanh toán`}),i&&(0,q.jsx)(`span`,{className:`topnav__user-dropdown-btn__meta`,children:gn(i).full})]}),(0,q.jsx)(wi,{onClose:()=>o(!1)}),(0,q.jsxs)(`button`,{className:`topnav__user-dropdown-btn topnav__user-dropdown-btn--logout`,onClick:()=>{o(!1),n(),e(`/login`)},children:[(0,q.jsx)(lt,{size:14}),` Đăng xuất`]})]})]})}function Ei({onReplayTour:e,onOpenSearch:t,laQuanTri:n}){let r=d(),[i,a]=(0,K.useState)(!1),o=(0,K.useRef)(null);return(0,K.useEffect)(()=>{if(!i)return;let e=e=>{o.current&&!o.current.contains(e.target)&&a(!1)},t=e=>{e.key===`Escape`&&a(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`ke
2ydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[i]),(0,q.jsxs)(`div`,{className:`topnav-help-menu`,ref:o,"data-tour-id":`topnav-help`,children:[(0,q.jsx)(`button`,{className:`topnav__icon-btn`,onClick:()=>a(e=>!e),title:`Trợ giúp & lệnh nhanh`,"aria-label":`Trợ giúp & lệnh nhanh`,"aria-haspopup":`menu`,"aria-expanded":i,children:(0,q.jsx)(gt,{size:18})}),i&&(0,q.jsxs)(`div`,{className:`topnav-help-menu__dropdown`,role:`menu`,children:[n&&(0,q.jsxs)(`button`,{className:`topnav-help-menu__item`,role:`menuitem`,onClick:()=>{a(!1),r(`/ai/setup`)},children:[(0,q.jsx)(st,{size:14}),` Bật trợ lý AI (còn thiếu gì?)`]}),n&&(0,q.jsxs)(`button`,{className:`topnav-help-menu__item`,role:`menuitem`,onClick:async()=>{a(!1);try{await G.post(`/onboarding/reopen`),r(`/dashboard`)}catch{W(`Không mở lại được danh sách việc cần làm, thử lại sau nhé.`,`error`)}},children:[(0,q.jsx)(Ce,{size:14}),` Hiện lại việc cần làm`]}),(0,q.jsxs)(`button`,{className:`topnav-help-menu__item`,role:`menuitem`,onClick:()=>{a(!1),e()},children:[(0,q.jsx)(Ue,{size:14}),` Xem lại hướng dẫn giao diện`]}),(0,q.jsxs)(`button`,{className:`topnav-help-menu__item`,role:`menuitem`,onClick:()=>{a(!1),t()},children:[(0,q.jsx)(Kt,{size:14}),` Bảng lệnh (⌘K)`]})]})]})}var Di={"/dashboard":`Tổng quan số liệu và việc cần làm mỗi ngày.`,"/conversations":`Trả lời khách hàng qua Zalo, Zalo OA, Fanpage — gộp về một nơi.`,"/customers":`Danh bạ khách hàng, giai đoạn vòng đời, lịch sử tương tác.`,"/marketing":`Lên lịch bài đăng và chiến dịch marketing.`,"/quotes":`Tạo báo giá, hợp đồng để gửi cho khách hàng.`,"/knowledge-base":`Sản phẩm và kiến thức để AI trả lời khách chính xác hơn.`},Oi=[{id:`topnav-search`,tourId:`topnav-search`,title:`Tìm kiếm nhanh`,description:`Bấm vào đây hoặc nhấn ⌘K / Ctrl+K để tìm khách hàng, hội thoại, tin nhắn — hoặc đi thẳng tới một trang.`},{id:`topnav-help`,tourId:`topnav-help`,title:`Trợ giúp & lệnh nhanh`,description:`Xem lại hướng dẫn này bất cứ lúc nào, hoặc mở bảng lệnh ⌘K ngay từ đây.`},{id:`topnav-notifications`,tourId:`topnav-notifications`,title:`Thông báo`,description:`Báo ngay khi có khách nhắn tin mới, đơn hàng, hoặc việc cần làm.`},{id:`topnav-plan-badge`,tourId:`topnav-plan-badge`,title:`Gói cước hiện tại`,description:`Xem gói đang dùng — bấm vào để nâng cấp khi cần thêm tính năng.`},{id:`topnav-user-menu`,tourId:`topnav-user-menu`,title:`Hồ sơ của bạn`,description:`Chỉnh sửa hồ sơ, xem gói & thanh toán, hoặc đăng xuất.`}],ki=qr.map(e=>({id:`nav-${e.path}`,tourId:`nav-${e.path}`,title:e.label,description:Di[e.path]??`Vào ${e.label}.`,navItem:e})),Ai={id:`nav-more`,tourId:`nav-more`,title:`Thêm tính năng`,description:`CDP & Phân tích, Tự động hoá, AI, Tích hợp, Cài đặt — gộp ở đây để hàng trên không quá dài.`},ji=[...Oi,...ki,Ai];function Mi(e,t){return ji.flatMap(n=>{if(!n.navItem)return[{id:n.id,tourId:n.tourId,title:n.title,description:n.description}];let r=Yr(n.navItem,e,t);return r===`hide`?[]:r===`locked`?[{id:n.id,tourId:n.tourId,title:n.title,description:`${n.description} Tính năng này có ở gói cao hơn — bấm vào để xem chi tiết nâng cấp.`,locked:!0}]:[{id:n.id,tourId:n.tourId,title:n.title,description:n.description}]})}function Ni(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(``),[c,l]=(0,K.useState)(!1),u=(0,K.useCallback)(async()=>{r(!0);try{t((await G.get(`/profile`)).data)}catch(e){console.error(`Failed to fetch profile:`,e)}finally{r(!1)}},[]);return(0,K.useEffect)(()=>{u()},[u]),{profile:e,loading:n,saving:i,error:o,success:c,fetchProfile:u,updateProfile:(0,K.useCallback)(async e=>{a(!0),s(``),l(!1);try{return t((await G.patch(`/profile`,e)).data),l(!0),setTimeout(()=>l(!1),3e3),!0}catch(e){return s(e.response?.data?.error||`Cập nhật thất bại`),!1}finally{a(!1)}},[]),uploadAvatar:(0,K.useCallback)(async e=>{s(``);try{let n=new FormData;n.append(`file`,e);let r=await G.post(`/profile/avatar`,n,{headers:{"Content-Type":`multipart/form-data`}});return t(r.data),l(!0),setTimeout(()=>l(!1),3e3),r.data}catch(e){return s(e.response?.data?.error||`Tải ảnh lên thất bại`),console.error(`Avatar upload failed:`,e),null}},[]),deleteAvatar:(0,K.useCallback)(async()=>{s(``);try{return t((await G.delete(`/profile/avatar`)).data),l(!0),setTimeout(()=>l(!1),3e3),!0}catch(e){return s(e.response?.data?.error||`Xóa ảnh thất bại`),!1}},[])}}var Pi=`ai_setup`,Fi=`bizcrm.vuaQuaWizardAi`;function Ii(){let e=d(),{profile:t}=Ni(),n=(0,K.useRef)(!1);(0,K.useEffect)(()=>{n.current||!t||[`owner`,`admin`].includes(t.role)&&(n.current=!0,(async()=>{try{let[t,n]=await Promise.all([G.get(`/onboarding/tour`,{params:{key:Pi}}),G.get(`/ai/setup-status`)]);
2if(t.data.seen||n.data.tatCaXong)return;await G.post(`/onboarding/tour/skip`,{key:Pi});try{sessionStorage.setItem(Fi,`1`)}catch{}e(`/ai/setup?tuMo=1`,{replace:!1})}catch{}})())},[t,e])}function Li(e){let{pathname:t}=s(),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(0),o=(0,K.useRef)(!1),c=(0,K.useRef)(e),l=(0,K.useRef)(!1);(0,K.useEffect)(()=>{if(!o.current&&!t.startsWith(`/ai/setup`)){try{if(sessionStorage.getItem(`bizcrm.vuaQuaWizardAi`)===`1`)return}catch{}o.current=!0,G.get(`/onboarding/tour`).then(e=>{e.data.seen||(a(e.data.step||0),r(!0))}).catch(()=>{})}},[t]),(0,K.useEffect)(()=>{if(e!==c.current){c.current=e,l.current=!0;try{sessionStorage.removeItem(Fi)}catch{}G.post(`/onboarding/tour/reopen`).catch(()=>{}),a(0),r(!0)}},[e]);let u=(0,K.useCallback)(e=>{a(t=>{let n=t+1;return n>=e?(r(!1),G.post(`/onboarding/tour/complete`).catch(()=>{}),t):(G.post(`/onboarding/tour/step`,{step:n}).catch(()=>{}),n)})},[]),d=(0,K.useCallback)(()=>{a(e=>Math.max(0,e-1))},[]),f=(0,K.useCallback)(()=>{r(!1),G.post(`/onboarding/tour/skip`).catch(()=>{})},[]),p=t.startsWith(`/ai/setup`),m=!1;if(!l.current)try{m=sessionStorage.getItem(Fi)===`1`}catch{}return{running:n&&!p&&!m,stepIndex:i,next:u,prev:d,skip:f}}function Ri(e){let t=document.querySelector(`[data-tour-id="${e}"]`);if(!t)return null;let n=t.getBoundingClientRect();return{top:n.top,left:n.left,width:n.width,height:n.height}}var zi=320,Bi=12;function Vi({replayToken:e}){let{user:t}=J(),{hasFeature:n}=Kr(),r=(0,K.useMemo)(()=>Mi(t?.role,n),[t?.role,n]),{running:i,stepIndex:a,next:o,prev:s,skip:c}=Li(e),[l,u]=(0,K.useState)(null),d=r[a];if((0,K.useEffect)(()=>{if(!i||!d)return;let e=()=>u(Ri(d.tourId));return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[i,d]),(0,K.useEffect)(()=>{i&&d&&!Ri(d.tourId)&&o(r.length)},[i,d,r.length,o]),!i||!d||!l)return null;let f=a===r.length-1,p=l.top+l.height+Bi,m=Math.min(Math.max(Bi,l.left),window.innerWidth-zi-Bi);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`onboarding-tour__spotlight`,style:{to
2p:l.top-6,left:l.left-6,width:l.width+12,height:l.height+12}}),(0,q.jsxs)(`div`,{className:`onboarding-tour__tooltip`,style:{top:p,left:m},children:[(0,q.jsx)(`button`,{className:`onboarding-tour__close`,onClick:c,"aria-label":`Bỏ qua hướng dẫn`,children:(0,q.jsx)(U,{size:14})}),(0,q.jsxs)(`div`,{className:`onboarding-tour__step-count`,children:[`Bước `,a+1,`/`,r.length]}),(0,q.jsx)(`div`,{className:`onboarding-tour__title`,children:d.title}),(0,q.jsx)(`div`,{className:`onboarding-tour__desc`,children:d.description}),(0,q.jsxs)(`div`,{className:`onboarding-tour__actions`,children:[(0,q.jsx)(`button`,{className:`onboarding-tour__skip`,onClick:c,children:`Bỏ qua`}),(0,q.jsxs)(`div`,{className:`onboarding-tour__nav`,children:[a>0&&(0,q.jsxs)(`button`,{className:`onboarding-tour__btn`,onClick:s,children:[(0,q.jsx)(x,{size:14}),` Trước`]}),(0,q.jsx)(`button`,{className:`onboarding-tour__btn onboarding-tour__btn--primary`,onClick:()=>o(r.length),children:f?`Xong`:(0,q.jsxs)(q.Fragment,{children:[`Tiếp `,(0,q.jsx)($t,{size:14})]})})]})]})]})]})}var Hi=[`boNao`,`duLieu`,`kenh`,`baoNhom`,`batTraLoi`,`daThu`],Ui=[`baoNhom`,`kenh`],Wi=Hi.filter(e=>!Ui.includes(e)),Gi=e=>Ui.includes(e),Ki={boNao:`Dạy AI về đơn vị bạn`,baoNhom:`Báo đơn hàng & phản ánh lên nhóm Zalo`,duLieu:`Sản phẩm & kiến thức`,kenh:`Kênh khách nhắn tới`,batTraLoi:`Bật AI trả lời khách`,daThu:`Thử lại logic vừa dựng`},qi={boNao:`Dạy AI`,baoNhom:`Nhóm Zalo`,duLieu:`Sản phẩm`,kenh:`Kênh khách`,batTraLoi:`Bật AI`,daThu:`Thử lại`},Ji={boNao:`Dán website, AI đọc rồi tự soạn giọng nói, kịch bản và bộ tri thức của chính đơn vị bạn.`,baoNhom:`Khách chốt đơn hoặc phàn nàn thì đội trực phải biết ngay trong nhóm Zalo, không phải ngồi canh màn hình.`,duLieu:`Thêm sản phẩm và câu hỏi thường gặp mà website chưa nói tới. AI chỉ được trả lời dựa trên những gì có ở đây.`,kenh:`Zalo, Zalo OA hoặc Fanpage — không nối thì khách không có đường nhắn tới.`,batTraLoi:`Công tắc cuối. Bật xong AI mới thật sự trả lời khách.`,daThu:`Hỏi thử vài câu khách hay hỏi và xem AI gọi công cụ nào — trước khi nó gặp khách thật.`},Yi=`bizcrm.nhacSetupAi.tat`,Xi=6e4,Zi=null,Qi=()=>!!Zi&&Date.now()-Zi.luc<Xi;function $i(){let{profile:e}=Ni(),{pathname:t}=s(),n=d(),[r,i]=(0,K.useState)(()=>Qi()?Zi.conLai:null),[a,o]=(0,K.useState)(()=>{try{return sessionStorage.getItem(Yi)===`1`}catch{return!1}}),c=!!e&&[`owner`,`admin`].includes(e.role),l=t.startsWith(`/ai/setup`),u=[`/ai/test-chat`,`/ai/improvements`,`/conversations`,`/marketing`].some(e=>
2t.startsWith(e)),f=(0,K.useRef)(!1);return(0,K.useEffect)(()=>{if(l){f.current=!0;return}if(f.current&&(f.current=!1,Zi=null),!c||a||Qi())return;let e=!1;return G.get(`/ai/setup-status`).then(({data:t})=>{let n=t.tatCaXong?0:Hi.filter(e=>!t[e].xong).length;Zi={luc:Date.now(),conLai:n},e||i(n)}).catch(()=>{Zi=null,e||i(null)}),()=>{e=!0}},[c,a,l,t]),!c||a||l||u||!r?null:(0,q.jsxs)(`div`,{className:`nhac-ai`,role:`status`,children:[(0,q.jsx)(st,{size:15,className:`nhac-ai__icon`}),(0,q.jsxs)(`span`,{className:`nhac-ai__chu`,children:[`Trợ lý AI còn `,(0,q.jsxs)(`strong`,{children:[r,` việc`]}),` chưa xong`]}),(0,q.jsxs)(`button`,{type:`button`,className:`nhac-ai__tiep`,onClick:()=>n(`/ai/setup`),children:[`Tiếp tục `,(0,q.jsx)(Xt,{size:13})]}),(0,q.jsx)(`button`,{type:`button`,className:`nhac-ai__tat`,onClick:()=>{o(!0);try{sessionStorage.setItem(Yi,`1`)}catch{}},"aria-label":`Ẩn lời nhắc trong phiên này`,children:(0,q.jsx)(U,{size:14})})]})}var ea={PROVIDER_PERMISSION_REQUIRED:`Khách chưa cho phép gọi. Hãy bấm "Xin quyền gọi" trước.`,OUTBOUND_UNSUPPORTED:`Kênh này không hỗ trợ gọi ra.`,CUSTOMER_ADDRESS_MISSING:`Khách chưa có số để gọi.`,AGENT_BUSY:`Bạn đang có cuộc gọi khác.`,PROVIDER_UNAVAILABLE:`Tổng đài đang không hoạt động.`,PROVIDER_TEMPORARY_ERROR:`Tổng đài đang lỗi tạm thời. Vui lòng thử lại sau ít phút.`,CAPABILITY_UNSUPPORTED:`Tổng đài này không hỗ trợ thao tác này.`,CALL_ALREADY_TAKEN:`Đồng nghiệp đã nghe cuộc gọi này.`,CALL_NOT_RINGING:`Cuộc gọi không còn đổ chuông.`,NOT_OFFERED:`Cuộc gọi này không còn dành cho bạn.`,INVALID_STATE:`Cuộc gọi vừa đổi trạng thái. Vui lòng thử lại.`,TRANSFER_TARGET_UNAVAILABLE:`Người nhận đang không sẵn sàng nghe máy.`},ta=new Set([`CALL_ALREADY_TAKEN`,`CALL_NOT_RINGING`,`NOT_OFFERED`,`INVALID_STATE`]),na=class extends Error{code;status;alreadyToasted;constructor(e,t,n,r){super(e),this.name=`CallApiError`,this.code=t,this.status=n,this.alreadyToasted=r}};function ra(e){if(e instanceof na)return e;let t=e?.response?.status??null,n=un(e);return new na(n&&ea[n]||rn(e)||`Không thực hiện được thao tác cuộc gọi. Vui lòng thử lại.`,n,t,t==null||t>=500||t===401||t===402&&n!==`FEATURE_NOT_IN_PLAN`)}function ia(e){let t=ra(e);t.alreadyToasted||W(t.message,`error`)}async function aa(e){try{return(await e()).data}catch(e){throw ra(e)}}function oa(){if(typeof crypto<`u`&&typeof crypto.randomUUID==`function`)return crypto.randomUUID();let e=crypto.getRandomValues(new Uint8Array(16));return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(``)}async function sa(e){let t=await aa(e);return{call:t.call,media:t.media??null}}var ca={getMeState:()=>aa(()=>G.get(`/calls/me/state`)),setPresence:e=>aa(()=>G.put(`/calls/me/presence`,{status:e})),getOptions:e=>aa(()=>G.get(`/calls/options`,{params:{...e.contactId?{contactId:e.contactId}:{},...e.conversationId?{conversationId:e.conversationId}:{}}})),startCall:(e,t=oa())=>sa(()=>G.post(`/calls`,{...e,idempotencyKey:t})),getCall:e=>aa(()=>G.get(`/calls/${encodeURIComponent(e)}`)),answer:e=>sa(()=>G.post(`/calls/${encodeURIComponent(e)}/answer`)),rejoinMedia:e=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/media/rejoin`)),reject:e=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/reject`)),hangup:e=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/hangup`)),hold:e=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/hold`)),resume:e=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/resume`)),transfer:(e,t)=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/transfer`,t)),wrapUp:(e,t)=>aa(()=>G.post(`/calls/${encodeURIComponent(e)}/wrap-up`,t)),getTransferTargets:()=>aa(()=>G.get(`/calls/transfer-targets`)),requestPermission:e=>aa(()=>G.post(`/calls/permissions/request`,e))},la={loaded:!1,enabled:!1,softphoneEnabled:!1,presence:`offline`,calls:{},touchedAt:{},deferredWrapUps:{}};function ua(e,t){if(!e)return t;let n=Date.parse(e.updatedAt),r=Date.parse(t.updatedAt);return!Number.isNaN(n)&&!Number.isNaN(r)&&r<n||e.isTerminal&&!t.isTerminal?e:e.wrappedUpAt&&!t.wrappedUpAt?{...t,wrappedUpAt:e.wrappedUpAt,outcome:e.outcome,note:e.note,needsWrapUp:!1}:t}function da(e,t){let n={...e};return delete n[t],n}function fa(e,t){switch(t.type){case`snapshot`:{let n={};for(let r of t.calls)n[r.id]=ua(e.calls[r.id],r);for(let[r,i]of Object.entries(e.touchedAt)){if(i<=t.requestedAt)continue;let a=e.calls[r];a?n[r]=a:delete n[r]}return{...e,loaded:!0,enabled:t.enabled,softphoneEnabled:t.softphoneEnabled,presence:t.presence,calls:n}}case`disable`:return{...la,loaded:!0};case`defer-wrapup`:return{...e,deferredWrapUps:{...e.deferredWrapUps,[t.callId]:!0}};case`upsert`:return{...e,calls:{...e.calls,[t.call.id]:ua(e.calls[t.call.id],t.call)},touchedAt:{...e.touchedAt,[t.call.id]:t.at}};case`revoke`:{let n=e.calls[t.callId],r={...e.touchedAt,[t.callId]:t.at};return n?t.userId&&n.assignedAgent?.id===t.userId?{...e,calls:{...e.calls,[n.id]:{...n,offeredToMe:!1}},touchedAt:r}:{...e,calls:da(e.calls,n.id),touchedAt:r}:{...e,touchedAt:r}}case`presence`:return{...e,presence:t.presence};default:return e}}var pa=new Set([`ringing`,`transferring`]);function ma(e){return Object.values(e).filter(e=>e.offeredToMe&&!e.isTerminal&&pa.has(e.status)).sort((e,t)=>
2xa(t.ringingAt??t.startedAt)-xa(e.ringingAt??e.startedAt))}function ha(e,t){return e.assignedAgent?!!t&&e.assignedAgent.id===t:e.direction===`outbound`&&!e.offeredToMe}function ga(e,t){return!e||e.isTerminal?!1:!e.assignedAgent||!!t&&e.assignedAgent.id===t}function _a(e,t){return Object.values(e).filter(e=>!e.isTerminal&&ha(e,t)&&!(e.offeredToMe&&pa.has(e.status))).sort((e,t)=>{let n=Number(e.status===`held`)-Number(t.status===`held`);return n===0?xa(t.startedAt)-xa(e.startedAt):n})}function va(e,t){return Object.values(e).filter(e=>e.needsWrapUp===!0&&!Object.hasOwn(t,e.id)).sort((e,t)=>xa(e.endedAt??e.startedAt)-xa(t.endedAt??t.startedAt))}var ya=new Set([`missed`,`rejected`,`failed`]);function ba(e){return ya.has(e.status)||e.status===`ended`&&!e.talkSec}function xa(e){let t=e?Date.parse(e):NaN;return Number.isNaN(t)?0:t}var Sa=async()=>null,Ca=async()=>!1,wa={enabled:!1,softphoneEnabled:!1,presence:`offline`,calls:{},deferredWrapUps:{},userId:null,refresh:async()=>{},answer:Sa,reject:Ca,hangup:Sa,hold:Sa,resume:Sa,transfer:Sa,wrapUp:Sa,startCall:Sa,media:{},mediaBusy:{},mediaElsewhere:{},rejoinMedia:async()=>{},setMuted:()=>{},setPresence:Ca,deferWrapUp:()=>{}},Ta=(0,K.createContext)(wa);function Ea(){return(0,K.useContext)(Ta)}var Da=3,Oa=10,ka=2e3,Aa=[{offset:0,length:.4},{offset:.6,length:.4}],ja=[440,554.37],Ma=.09,Na=null,Pa=null,Fa=0,Ia=!1,La=new Set;function Ra(){if(Na)return Na;let e=window.AudioContext||window.webkitAudioContext;if(!e)return null;try{Na=new e}catch{return null}return Na}function za(){if(Ia||typeof document>`u`)return;Ia=!0;let e=()=>{let t=Ra();if(t){if(t.state===`running`){document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,e);return}t.resume().catch(()=>{})}};document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,e)}function Ba(e,t){for(let n of Aa){let r=t+n.offset,i=r+n.length,a=e.createGain();a.gain.setValueAtTime(1e-4,r),a.gain.linearRampToValueAtTime(Ma,r+.02),a.gain.setValueAtTime(Ma,i-.05),a.gain.exponentialRampToValueAtTime(1e-4,i),a.connect(e.destination);for(let t of ja){let n=e.createOscillator();n.type=`triangle`,n.frequency.value=t,n.connect(a),n.onended=()=>{La.delete(n),n.disconnect()},n.start(r),n.stop(i+.02),La.add(n)}}}function Va(){let e=Ra();if(!e)return;e.state===`suspended`&&e.resume().catch(()=>{});let t=e.currentTime+Oa;for(Fa<e.currentTime&&(Fa=e.currentTime+.05);Fa<t;)Ba(e,Fa),Fa+=Da}function Ha(){for(let e of La){try{e.stop()}catch{}e.disconnect()}La.clear(),Fa=0}function Ua(){Pa||=(Fa=0,Va(),setInterval(Va,ka))}function Wa(){Pa&&=(clearInterval(Pa),null),Ha()}var Ga={denied:`Trình duyệt đang chặn micro — bấm biểu tượng ổ khoá cạnh địa chỉ trang, cho phép Micro rồi thử lại.`,not_found:`Không tìm thấy micro — hãy cắm tai nghe hoặc micro rồi thử lại.`,unsupported:`Trình duyệt này chưa nghe gọi được — hãy mở Bizino bằng Chrome, Edge hoặc Safari bản mới qua địa chỉ https.`,other:`Không mở được micro — hãy tắt ứng dụng khác đang dùng micro (Zoom, Meet…) rồi thử lại.`},Ka=new Set([`NotAllowedError`,`PermissionDeniedError`,`SecurityError`]),qa=new Set([`NotFoundError`,`DevicesNotFoundError`,`OverconstrainedError`,`ConstraintNotSatisfiedError`]),Ja=class extends Error{kind;constructor(e){super(Ga[e]),this.name=`MicPermissionError`,this.kind=e}};function Ya(e){let t=e?.name;return typeof t==`string`?Ka.has(t)?`denied`:qa.has(t)?`not_found`:`other`:`other`}function Xa(){return typeof window>`u`||typeof navigator>`u`||window.isSecureContext===!1?!1:typeof navigator.mediaDevices?.getUserMedia==`function`&&typeof window.RTCPeerConnection==`function`}async function Za(){if(!Xa())throw new Ja(`unsupported`);try{return await navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0}})}catch(e){throw new Ja(Ya(e))}}async function Qa(){try{return navigator.permissions?.query?(await navigator.permissions.query({name:`microphone`})).state:null}catch{return null}}function $a(e){return e instanceof Ja?e.message:Ga.other}function eo(e){if(e)for(let t of e.getTracks())try{t.stop()}catch{}}var to=`bizcrm:call-media`,no=Math.random().toString(36).slice(2)+Date.now().toString(36),ro=Object.freeze({}),io=new Set,ao=new Set,oo=new Map,so=new Set,co=ro,lo;function uo(e){let t=e;return!t||typeof t.tabId!=`string`?!1:t.type===`query`?!0:(t.type===`claim`||t.type===`release`)&&typeof t.callId==`string`}function fo(e){try{go()?.postMessage(e)}catch{}}function po(){co=oo.size===0?ro:Object.freeze(Object.fromEntries([...oo.keys()].map(e=>[e,!0])));for(let e of[...so])e()}function mo(e){if(!uo(e)||e.tabId===no)return;if(e.type===`query`){for(let e of io)ao.has(e)||fo({type:`claim`,callId:e,tabId:no});return}let{callId:t,tabId:n}=e;if(e.type===`claim`){io.has(t)&&ao.add(t),oo.set(t,n),po();return}oo.get(t)===n&&(oo.delete(t),po(),io.has(t)&&(ao.delete(t),fo({type:`claim`,callId:t,tabId:no})))}function ho(){for(let e of io)fo({type:`release`,callId:e,tabId:no});
2io.clear(),ao.clear()}function go(){if(lo!==void 0)return lo;if(lo=null,typeof BroadcastChannel!=`function`)return null;try{lo=new BroadcastChannel(to),lo.onmessage=e=>mo(e.data),window.addEventListener(`pagehide`,ho),lo.postMessage({type:`query`,tabId:no})}catch{lo=null}return lo}function _o(e){io.add(e),ao.delete(e),fo({type:`claim`,callId:e,tabId:no})}function vo(e){io.delete(e)&&(ao.delete(e),fo({type:`release`,callId:e,tabId:no}))}function yo(e){return go(),oo.has(e)}function bo(e){return go(),so.add(e),()=>{so.delete(e)}}function xo(){return co}function So(){return ro}var Co=`bizcrm:call:media-here`,wo=10;function To(){try{let e=JSON.parse(sessionStorage.getItem(Co)??`[]`);return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}catch{return[]}}function Eo(e){try{sessionStorage.setItem(Co,JSON.stringify(e.slice(0,wo)))}catch{}}function Do(e){Eo([e,...To().filter(t=>t!==e)])}function Oo(e){let t=To();t.includes(e)&&Eo(t.filter(t=>t!==e))}function ko(e){return To().includes(e)}var Ao=1500,jo=` Bấm "Thử nối lại" trên khung cuộc gọi.`,Mo={join:`Không nối được âm thanh.`,dropped:`Mất kết nối âm thanh.`,mic:`Micro vừa bị ngắt.`},No=`Không tải được bộ nghe gọi. Hãy tải lại trang rồi thử lại.`,Po={status:`connecting`,muted:!1},Fo=null;function Io(){return Fo??=l(()=>import(`./softphone-engine-Dwa88evx.js`),__vite__mapDeps([0,1])).catch(e=>{throw Fo=null,e}),Fo}function Lo(){Io().catch(()=>{})}function Ro(e){return e===`mic`?`mic`:e===`remote_hangup`||e===`network`?`dropped`:`join`}function zo(e,t){let n=Object.keys(e).filter(e=>!t(e));if(n.length===0)return e;let r={...e};for(let e of n)delete r[e];return r}function Bo(e){let[t,n]=(0,K.useState)({}),[r,i]=(0,K.useState)({}),a=(0,K.useSyncExternalStore)(bo,xo,So),o=(0,K.useRef)(e),s=(0,K.useRef)(new Map),c=(0,K.useRef)(new Set),l=(0,K.useRef)(!0);(0,K.useEffect)(()=>{o.current=e});let u=(0,K.useCallback)((e,t)=>{l.current&&n(n=>t?{...n,[e]:t}:zo(n,t=>t!==e))},[]),d=(0,K.useCallback)((e,t)=>{let n=s.current.get(e);n&&(s.current.delete(e),n.unsubscribe(),n.lossTimer&&clearTimeout(n.lossTimer),t&&n.session.hangupLocal())},[]),f=(0,K.useCallback)((e,t)=>{d(e,t),vo(e)},[d]),p=(0,K.useCallback)(async(e,t,n)=>{t.lossTimer=null;let r=()=>s.current.get(e)===t;if(!r())return;let i=yo(e)?`gone`:o.current.standing(e);if(i!==`gone`&&n!==`mic`){let t=await o.current.fetchStanding(e);if(!r())return;i=yo(e)?`gone`:t??o.current.standing(e)}if(yo(e)&&Oo(e),f(e,!1),i===`gone`){u(e,null);return}u(e,{status:`lost`,muted:!1,reason:n}),W(Mo[n]+(i===`talking`?jo:``),`error`)},[f,u]),m=(0,K.useCallback)((e,t,n)=>{if(s.current.get(e)!==t)return;if(n.status===`connecting`||n.status===`connected`){n.status===`connected`&&Do(e),u(e,{status:n.status,muted:n.muted});return}if(!n.failure){f(e,!1),u(e,null);return}if(t.lossTimer)return;let r=Ro(n.failure);t.lossTimer=setTimeout(()=>void p(e,t,r),r===`mic`?0:Ao)},[f,u,p]),h=(0,K.useCallback)(async()=>{let[e,t]=await Promise.all([Za().catch(e=>(W($a(e),`error`),null)),Io().then(()=>!0,()=>!1)]);return e&&!t?(eo(e),W(No,`error`),null):e},[]),g=(0,K.useCallback)(async(e,t,n)=>{let r=()=>l.current&&o.current.standing(e)!==`gone`;if(!r()){eo(n);return}u(e,Po),_o(e);let i=n??await h(),a=i?await Io().catch(()=>null):null;if(!i||!a||!r()){eo(i),vo(e);let t=!!i&&!a&&r();t&&W(No,`error`),u(e,r()&&(t||!i)?{status:`lost`,muted:!1,reason:`join`}:null);return}d(e,!0);let c={session:a.joinCall(t,i,e),unsubscribe:()=>{},lossTimer:null};s.current.set(e,c),c.unsubscribe=c.session.subscribe(t=>m(e,c,t)),m(e,c,c.session.getSnapshot())},[h,u,d,m]),_=(0,K.useCallback)(async(e,t)=>{if(!c.current.has(e)){c.current.add(e),i(t=>({...t,[e]:!0}));try{let n=await h();if(!n)return;let r=null;try{r=await t()}finally{r||eo(n)}r&&await g(e,r,n)}finally{c.current.delete(e),l.current&&i(t=>zo(t,t=>t!==e))}}},[h,g]),v=(0,K.useCallback)((e,t)=>{s.current.get(e)?.session.setMuted(t)},[]),y=(0,K.useCallback)(e=>{for(let t of[...s.current.keys()])e(t)||f(t,!0);n(t=>zo(t,e))},[f]);return(0,K.useEffect)(()=>{l.current=!0;let e=s.current;return()=>{l.current=!1;for(let t of[...e.keys()])f(t,!0);Fo?.then(e=>e.hangupAllSessions()).catch(()=>{})}},[f]),(0,K.useMemo)(()=>({media:t,busy:r,elsewhere:a,prepareMedia:h,attach:g,rejoin:_,setMuted:v,reconcile:y}),[t,r,a,h,g,_,v,y])}var Vo=new Set([`answered`,`active`,`held`]);function Ho(e,t){return!ga(e,t)||!e?`gone`:Vo.has(e.status)?`talking`:`live`}function Uo(e,t,n,r){if(e.capabilities.mediaType!==`webrtc`||e.isTerminal)return null;if(n)return`connecting`;let i=Vo.has(e.status);return t&&t.status!==`lost`?t.status:i?r?`elsewhere`:t?`lost`:`detached`:t?`failed`:null}function Wo(e){let{media:t,mediaBusy:n,mediaElsewhere:r}=Ea(),i=t[e.id];return{view:Uo(e,i,Object.hasOwn(n,e.id),Object.hasOwn(r,e.id)),entry:i}}var Go=new Set([`lost`,`failed`,`detached`]);function Ko(e){let{media:t,mediaBusy:n,mediaElsewhere:r}=Ea();return(0,K.useMemo)(()=>new Set(e.filter(e=>{let i=Uo(e,t[e.id],Object.hasOwn(n,e.id),Object.hasOwn(r,e.id));return i!==null&&Go.has(i)}).map(e=>e.id)),[e,t,n,r])}var qo=400;function Jo(e,t){return!t||!(Date.parse(e.updatedAt)<Date.parse(t.updatedAt))}function Yo(e){let{loaded:t,enabled:n,softphoneEnabled:r,calls:i,userId:a,dispatch:o,runCommand:s}=e,c=(0,K.useRef)({enabled:n,calls:i,userId:a});(0,K.useEffect)(()=>{c.current={enabled:n,calls:i,userId:a}},[n,i,a]);let l=(0,K.useCallback)(e=>{let t=c.current;Jo(e,t.calls[e.id])&&(c.current={...t,calls:{...t.calls,[e.id]:e}}),o({type:`upsert`,call:e,at:Date.now()})},[o]),u=(0,K.useCallback)(e=>{let t=c.current;return t.enabled?Ho(t.calls[e],t.userId):`gone`},[]),d=Bo({standing:u,fetchStanding:(0,K.useCallback)(async e=>{try{let{call:t}=await ca.getCall(e);return l(t),Ho(t,c.current.userId)}catch(e){return e instanceof na&&(e.status===404||e.status===403)?`gone`:null}},[l])}),{media:f,busy:p,elsewhere:m,prepareMedia:h,attach:g,rejoin:_,reconcile:v}=d;(0,K.useEffect)(()=>{t&&v(e=>n&&ga(i[e],a))},[t,n,i,a,v]),(0,K.useEffect)(()=>{r&&Lo()},[r]);let y=(0,K.useCallback)(async(e,t)=>{let n=e?await h():null;if(e&&!n)return null;let r=await s(t);return r?.call?(l(r.call),r.media?g(r.call.id,r.media,n):eo(n),r.call):(eo(n),null)},[h,g,s,l]),b=(0,K.useCallback)(e=>y(c.current.calls[e]?.capabilities.mediaType===`webrtc`,()=>ca.answer(e)),[y]),x=(0,K.useCallback)((e,t)=>y(t?.mediaType===`webrtc`,()=>ca.startCall(e)),[y]),S=(0,K.useCallback)(e=>_(e,async()=>(await s(()=>ca.rejoinMedia(e)))?.media??null),[_,s]),C=(0,K.useRef)(new Set);(0,K.useEffect)(()=>
2{if(!t||!n)return;let e=Object.values(i).filter(e=>e.capabilities.mediaType===`webrtc`&&Ho(e,a)===`talking`&&!Object.hasOwn(f,e.id)&&!Object.hasOwn(p,e.id)&&!Object.hasOwn(m,e.id)&&!C.current.has(e.id)&&ko(e.id)).map(e=>e.id);if(e.length===0)return;let r=!1,o=setTimeout(()=>{Qa().then(t=>{if(!(r||t!==`granted`))for(let t of e)C.current.has(t)||yo(t)||u(t)!==`talking`||(C.current.add(t),S(t))})},qo);return()=>{r=!0,clearTimeout(o)}},[t,n,i,a,f,p,m,u,S]);let{setMuted:w}=d;return(0,K.useMemo)(()=>({media:f,busy:p,elsewhere:m,setMuted:w,answer:b,startCall:x,rejoinMedia:S}),[f,p,m,w,b,x,S])}var Xo=5e3,Zo=3;function Qo(e){if(!(e instanceof na))return!0;let{status:t}=e;return t==null||t>=500||t===429||t===408}function $o({children:e}){let{user:t}=J(),n=t?.id??null,{socket:r,on:i,connected:a}=lr(),[o,s]=(0,K.useReducer)(fa,la),c=(0,K.useRef)(0),l=(0,K.useRef)(!1),u=(0,K.useRef)(n);(0,K.useEffect)(()=>{l.current=o.enabled,u.current=n},[o.enabled,n]);let d=(0,K.useRef)(null),f=(0,K.useRef)(null),p=(0,K.useRef)(async()=>{}),m=(0,K.useCallback)(()=>{f.current&&clearTimeout(f.current),f.current=null},[]),h=(0,K.useCallback)(()=>{m(),c.current+=1},[m]),g=(0,K.useCallback)(async e=>{if(m(),!n){d.current=null,s({type:`disable`});return}let t=++c.current,r=Date.now();try{let e=await ca.getMeState();if(t!==c.current)return;d.current=n,s({type:`snapshot`,enabled:e.enabled===!0,softphoneEnabled:e.softphone?.enabled===!0,presence:e.presence??`offline`,calls:Array.isArray(e.calls)?e.calls:[],requestedAt:r})}catch(r){if(t!==c.current)return;let i=Qo(r);if(i&&e<Zo&&(f.current=setTimeout(()=>{f.current=null,p.current(e+1)},Xo)),i&&d.current===n)return;i||(d.current=null),s({type:`disable`})}},[n,m]);(0,K.useEffect)(()=>{p.current=g},[g]),(0,K.useEffect)(()=>h,[h]);let _=(0,K.useCallback)(()=>g(0),[g]);(0,K.useEffect)(()=>{_()},[_]),(0,K.useEffect)(()=>{a&&_()},[a,_]),(0,K.useEffect)(()=>{za()},[]),(0,K.useEffect)(()=>{if(!r||!n)return;let e=()=>{r.emit(`call:ready`)};return r.connected&&e(),r.on(`connect`,e),()=>{r.off(`connect`,e),r.connected&&r.emit(`call:unready`)}},[r,n]);let v=(0,K.useCallback)(e=>{e?.id&&(s({type:`upsert`,call:e,at:Date.now()}),l.current||_())},[_]);(0,K.useEffect)(()=>i(`call:offer`,e=>{e?.capabilities?.mediaType===`webrtc`&&Lo(),v(e)}),[i,v]),(0,K.useEffect)(()=>i(`call:updated`,v),[i,v]),(0,K.useEffect)(()=>i(`call:offer-revoked`,e=>{e?.callId&&s({type:`revoke`,callId:e.callId,userId:u.current,at:Date.now()})}),[i]),(0,K.useEffect)(()=>i(`call:presence`,e=>{e?.status&&s({type:`presence`,presence:e.status})}),[i]);let y=(0,K.useCallback)(async e=>{try{return await e()}catch(e){return ia(e),e instanceof na&&(e.code&&ta.has(e.code)||e.status===404)&&_(),null}},[_]),b=(0,K.useCallback)(async e=>{let t=await y(e);return t?.call?(s({type:`upsert`,call:t.call,at:Date.now()}),t.call):null},[y]),x=Yo({loaded:o.loaded,enabled:o.enabled,softphoneEnabled:o.loaded&&o.enabled&&o.softphoneEnabled,calls:o.calls,userId:n,dispatch:s,runCommand:y}),S=(0,K.useMemo)(()=>({enabled:o.loaded&&o.enabled,softphoneEnabled:o.loaded&&o.enabled&&o.softphoneEnabled,presence:o.presence,calls:o.calls,deferredWrapUps:o.deferredWrapUps,userId:n,refresh:_,answer:x.answer,reject:async e=>await y(()=>ca.reject(e))?(s({type:`revoke`,callId:e,userId:n,at:Date.now()}),!0):!1,hangup:e=>b(()=>ca.hangup(e)),hold:e=>b(()=>ca.hold(e)),resume:e=>b(()=>ca.resume(e)),transfer:(e,t)=>b(()=>ca.transfer(e,t)),wrapUp:async(e,t)=>{let n=await y(()=>ca.wrapUp(e,t));return n?.call?(s({type:`upsert`,call:n.call,at:Date.now()}),n):null},startCall:x.startCall,media:x.media,mediaBusy:x.busy,mediaElsewhere:x.elsewhere,rejoinMedia:x.rejoinMedia,setMuted:x.setMuted,setPresence:async e=>{let t=await y(()=>ca.setPresence(e));return t?.presence?(s({type:`presence`,presence:t.presence}),!0):!1},deferWrapUp:e=>s({type:`defer-wrapup`,callId:e})}),[o.loaded,o.enabled,o.softphoneEnabled,o.presence,o.calls,o.deferredWrapUps,n,_,b,y,x]);return(0,q.jsx)(Ta.Provider,{value:S,children:e})}var es=[{value:`subscriber`,label:`Đăng ký`,bg:`#e8f0fe`,color:`#2563eb`},{value:`lead`,label:`Lead`,bg:`#fef3c7`,color:`#f59e0b`},{value:`qualified`,label:`Đủ điều kiện`,bg:`#f3e8ff`,color:`#9333ea`},{value:`opportunity`,label:`Cơ hội`,bg:`#ffedd5`,color:`#ea580c`},{value:`customer`,label:`Khách hàng`,bg:`#dcfce7`,color:`#16a34a`},{value:`evangelist`,label:`VIP/Đại sứ`,bg:`#cffafe`,color:`#0891b2`},{value:`churned`,label:`Rời bỏ`,bg:`#fee2e2`,color:`#ef4444`}],ts=[`subscriber`,`lead`,`qualified`],ns=[`customer`,`evangelist`],rs=Object.fromEntries(es.map(e=>[e.value,e])),is=es.map(e=>({label:e.label,value:e.value}));es.map(e=>({text:e.label,value:e.value}));function as(e){return rs[e||`subscriber`]||rs.subscriber}var os=`subscriber`,ss=es,cs=rs,ls=1e3;function us(e,t){(0,K.useEffect)(()=>
2{if(!e||typeof document>`u`)return;let n=null,r=null,i=null,a=!1,o=e=>{document.title=e,r=document.title},s=()=>{(n===null||document.title!==r)&&(n=document.title),a=!a,o(a?t:n)},c=()=>{i||=(n=document.title,a=!1,s(),setInterval(s,ls))},l=()=>{i&&clearInterval(i),i=null,n!==null&&document.title===r&&(document.title=n),n=null,r=null},u=()=>{document.hidden?c():l()};return u(),document.addEventListener(`visibilitychange`,u),()=>{document.removeEventListener(`visibilitychange`,u),l()}},[e,t])}var ds=3,fs=`📞 Cuộc gọi đến…`;function ps(e){let t=e.contact;return t?.fullName||e.callerName||pn(t?.phone||e.customerAddress)||`Số không xác định`}function ms(e){return e?e.status===`transferring`?`Cuộc gọi chuyển cho bạn, từ ${ps(e)}`:`Cuộc gọi đến từ ${ps(e)}`:``}function hs(){let{enabled:e,calls:t,answer:n,reject:r}=Ea(),i=(0,K.useMemo)(()=>e?ma(t):[],[e,t]),a=i.length>0;(0,K.useEffect)(()=>{a?Ua():Wa()},[a]),(0,K.useEffect)(()=>()=>Wa(),[]),us(a,fs);let o=i[0];return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`call-sr-only`,"aria-live":`assertive`,"aria-atomic":`true`,children:ms(o)}),o&&(0,q.jsx)(gs,{call:o,othersCount:i.length-1,onAnswer:n,onReject:r},o.id)]})}function gs({call:e,othersCount:t,onAnswer:n,onReject:r}){let i=d(),[a,o]=(0,K.useState)(null),s=e.status===`transferring`,c=e.contact,l=ps(e),u=c?.status?as(c.status):null,f=c?.tags??[],p=async t=>{if(!a){o(t);try{t===`answer`?await n(e.id):await r(e.id)}finally{o(null)}}};return(0,q.jsxs)(`div`,{className:`call-offer`,role:`region`,"aria-label":s?`Cuộc gọi chuyển cho bạn`:`Cuộc gọi đến`,children:[(0,q.jsxs)(`div`,{className:`call-offer__head`,children:[s?(0,q.jsx)(Je,{size:14}):(0,q.jsx)(le,{size:14}),(0,q.jsx)(`span`,{children:s?`Cuộc gọi chuyển cho bạn`:`Cuộc gọi đến`}),t>0&&(0,q.jsxs)(`span`,{className:`call-offer__more`,children:[`(+`,t,` cuộc khác)`]})]}),(0,q.jsxs)(`div`,{className:`call-offer__body`,children:[(0,q.jsx)(`div`,{className:`call-offer__avatar`,"aria-hidden":`true`,children:c?.avatarUrl?(0,q.jsx)(`img`,{src:c.avatarUrl,alt:``}):(0,q.jsx)(z,{size:22})}),(0,q.jsxs)(`div`,{className:`call-offer__info`,children:[(0,q.jsx)(`div`,{className:`call-offer__name`,children:l}),(c?.fullName||e.callerName)&&(c?.phone||e.customerAddress)&&(0,q.jsx)(`div`,{className:`call-offer__sub`,children:pn(c?.phone||e.customerAddress)}),!c&&(0,q.jsx)(`div`,{className:`call-offer__sub call-offer__sub--muted`,children:`Chưa có trong danh bạ`}),(0,q.jsx)(`div`,{className:`call-offer__source`,children:Tn(e.providerLabel,e.providerAccountName)}),s&&e.assignedAgent&&(0,q.jsxs)(`div`,{className:`call-offer__note`,children:[e.assignedAgent.fullName,` chuyển cho bạn`]})]})]}),c&&(u||f.length>0||c.ownerName)&&(0,q.jsxs)(`div`,{className:`call-offer__crm`,children:[(u||f.length>0)&&(0,q.jsxs)(`div`,{className:`call-offer__chips`,children:[u&&(0,q.jsx)(`span`,{className:`call-chip call-chip--stage`,style:{background:u.bg,color:u.color},children:u.label}),f.slice(0,ds).map(e=>(0,q.jsx)(`span`,{className:`call-chip`,children:e},e)),f.length>ds&&(0,q.jsxs)(`span`,{className:`call-chip call-chip--muted`,children:[`+`,f.length-ds]})]}),(0,q.jsxs)(`div`,{className:`call-offer__owner`,children:[`Phụ trách: `,(0,q.jsx)(`strong`,{children:c.ownerName||`Chưa có`})]})]}),(e.conversationId||c)&&(0,q.jsxs)(`button`,{type:`button`,className:`call-offer__link`,onClick:()=>{e.conversationId?i(`/conversations?selectConv=${encodeURIComponent(e.conversationId)}`):c&&i(`/conversations?contactId=${encodeURIComponent(c.id)}`)},children:[(0,q.jsx)(Rt,{size:12}),` Mở hồ sơ khách`]}),(0,q.jsxs)(`div`,{className:`call-offer__actions`,children:[(0,q.jsxs)(`button`,{type:`button`,className:`call-btn call-btn--reject`,onClick:()=>p(`reject`),disabled:a!==null,children:[(0,q.jsx)(re,{size:16}),` `,a===`reject`?`Đang từ chối…`:`Từ chối`]}),(0,q.jsxs)(`button`,{type:`button`,className:`call-btn call-btn--answer`,onClick:()=>p(`answer`),disabled:a!==null,children:[(0,q.jsx)(z,{size:16}),` `,a===`answer`?`Đang nối máy…`:`Nghe`]})]})]})}var _s=2e3,vs=9,ys=365;function bs(e){let t=e=>String(e).padStart(2,`0`);return`${e.getFullYear()}-${t(e.getMonth()+1)}-${t(e.getDate())}T${t(e.getHours())}:${t(e.getMinutes())}`}function xs(){let e=new Date;return e.setDate(e.getDate()+1),e.setHours(vs,0,0,0),bs(e)}function Ss(){let e=new Date,t=new Date(e);return t.setDate(t.getDate()+ys),{min:bs(e),max:bs(t)}}function Cs({call:e,remaining:t,onDefer:n}){let{wrapUp:r}=Ea(),i=(0,K.useId)(),[a,o]=(0,K.useState)(e.answeredAt?null:`unreachable`),[s,c]=(0,K.useState)(``),[l,u]=(0,K.useState)(xs),[d]=(0,K.useState)(Ss),[f,p]=(0,K.useState)(null),[m,h]=(0,K.useState)(!1),g=e.contact?.fullName||e.callerName||e.customerAddress||`Khách`,_=e.talkSec??(e.answeredAt?e.durationSec:null),v=Sn(e.endReason);return(0,q.jsxs)(`form`,{className:`call-wrapup`,onSubmit:async t=>{if(t.preventDefault(),!a||m)return;let n;if(a===`callback`){let e=new Date(l);if(!l||Number.isNaN(e.getTime()))return p(`Hãy chọn giờ gọi lại.`);if(e.getTime()<=Date.now())return p(`Giờ gọi lại phải ở tương lai.`);if(e.getTime()>
2new Date(d.max).getTime())return p(`Chỉ hẹn gọi lại trong vòng ${ys} ngày tới.`);n=e.toISOString()}p(null),h(!0);try{let t=s.trim(),i=await r(e.id,{outcome:a,...t?{note:t}:{},...n?{callbackAt:n}:{}});i&&W(i.taskId?`Đã lưu kết quả cuộc gọi và tạo công việc gọi lại`:`Đã lưu kết quả cuộc gọi`,`success`)}finally{h(!1)}},"aria-labelledby":`${i}-title`,children:[(0,q.jsxs)(`div`,{className:`call-wrapup__head`,children:[(0,q.jsx)(re,{size:15}),(0,q.jsxs)(`div`,{className:`call-wrapup__title-wrap`,children:[(0,q.jsx)(`div`,{id:`${i}-title`,className:`call-wrapup__title`,children:`Cuộc gọi đã kết thúc`}),(0,q.jsxs)(`div`,{className:`call-wrapup__meta`,children:[g,` · `,_?`Nói chuyện ${Dn(_)}`:bn(e.status),v?` · ${v}`:``]})]})]}),(0,q.jsxs)(`fieldset`,{className:`call-wrapup__outcomes`,children:[(0,q.jsx)(`legend`,{children:`Kết quả`}),Cn.map(e=>(0,q.jsxs)(`label`,{className:`call-wrapup__option ${a===e?`is-selected`:``}`,children:[(0,q.jsx)(`input`,{type:`radio`,name:`${i}-outcome`,value:e,checked:a===e,onChange:()=>{o(e),p(null)}}),En[e]]},e))]}),a===`callback`&&(0,q.jsxs)(`div`,{className:`call-wrapup__callback`,children:[(0,q.jsx)(`label`,{htmlFor:`${i}-callback`,children:`Gọi lại lúc`}),(0,q.jsx)(`input`,{id:`${i}-callback`,type:`datetime-local`,min:d.min,max:d.max,value:l,onChange:e=>{u(e.target.value),p(null)}}),(0,q.jsx)(`span`,{className:`call-wrapup__hint`,children:`Sẽ tạo công việc nhắc gọi lại`})]}),(0,q.jsx)(`label`,{className:`call-wrapup__note-label`,htmlFor:`${i}-note`,children:`Ghi chú`}),(0,q.jsx)(`textarea`,{id:`${i}-note`,className:`call-wrapup__note`,rows:3,maxLength:_s,placeholder:`Khách nói gì, cần làm gì tiếp…`,value:s,onChange:e=>c(e.target.value)}),f&&(0,q.jsx)(`div`,{className:`call-wrapup__error`,role:`alert`,children:f}),(0,q.jsxs)(`div`,{className:`call-wrapup__footer`,children:[t>0&&(0,q.jsxs)(`span`,{className:`call-wrapup__remaining`,children:[`Còn `,t,` cuộc chờ ghi`]}),(0,q.jsx)(`button`,{type:`button`,className:`call-btn call-btn--ghost`,onClick:n,disabled:m,children:`Để sau`}),(0,q.jsxs)(`button`,{type:`submit`,className:`call-btn call-btn--primary`,disabled:!a||m,children:[(0,q.jsx)(_e,{size:15}),` `,m?`Đang lưu…`:`Hoàn thành`]})]})]})}function ws({selfId:e,onPick:t,onClose:n}){let[r,i]=(0,K.useState)(null),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(null);(0,K.useEffect)(()=>{let e=!1;return ca.getTransferTargets().then(t=>{e||i(t)}).catch(t=>{e||(ia(t),o(!0))}),()=>{e=!0}},[]);let l=async(e,n)=>{if(!s){c(n);try{await t({type:e,targetId:n})}finally{c(null)}}},u=(r?.agents??[]).filter(t=>t.id!==e),d=r?.queues??[];return(0,q.jsxs)(`div`,{className:`call-transfer`,role:`dialog`,"aria-label":`Chuyển cuộc gọi`,children:[(0,q.jsxs)(`div`,{className:`call-transfer__head`,children:[(0,q.jsx)(`span`,{children:`Chuyển cuộc gọi cho`}),(0,q.jsx)(`button`,{type:`button`,className:`call-icon-btn`,onClick:n,"aria-label":`Đóng`,children:(0,q.jsx)(U,{size:14})})]}),!r&&!a&&(0,q.jsx)(`div`,{className:`call-transfer__empty`,children:`Đang tải danh sách…`}),a&&(0,q.jsx)(`div`,{className:`call-transfer__empty`,children:`Không tải được danh sách.`}),r&&u.length===0&&d.length===0&&(0,q.jsx)(`div`,{className:`call-transfer__empty`,children:`Chưa có ai để chuyển.`}),(0,q.jsxs)(`div`,{className:`call-transfer__list`,children:[u.length>0&&(0,q.jsx)(`div`,{className:`call-transfer__group`,children:`Nhân viên`}),u.map(e=>{let t=e.online?e.presence:`offline`,n=e.online&&e.presence===`available`;return(0,q.jsxs)(`button`,{type:`button`,className:`call-transfer__item`,disabled:!n||s!==null,onClick:()=>l(`agent`,e.id),title:n?`Chuyển cho ${e.fullName}`:xn(t),children:[(0,q.jsx)(`span`,{className:`call-dot call-dot--${t}`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-transfer__name`,children:e.fullName}),(0,q.jsx)(`span`,{className:`call-transfer__meta`,children:s===e.id?`Đang chuyển…`:xn(t)})]},e.id)}),d.length>0&&(0,q.jsx)(`div`,{className:`call-transfer__group`,children:`Hàng chờ`}),d.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:`call-transfer__item`,disabled:s!==null,onClick:()=>l(`queue`,e.id),children:[(0,q.jsx)(Gt,{size:14,className:`call-transfer__icon`}),(0,q.jsx)(`span`,{className:`call-transfer__name`,children:e.name}
2),s===e.id&&(0,q.jsx)(`span`,{className:`call-transfer__meta`,children:`Đang chuyển…`})]},e.id))]})]})}function Ts(){let{enabled:e,presence:t,setPresence:n}=Ea(),[r,i]=(0,K.useState)(!1);if(!e)return null;let a=t!==`dnd`&&t!==`offline`,o=t===`ringing`||t===`busy`||t===`wrap_up`;return(0,q.jsxs)(`div`,{className:`call-presence`,children:[(0,q.jsxs)(`label`,{className:`call-presence__row`,children:[(0,q.jsxs)(`span`,{className:`call-presence__text`,children:[(0,q.jsx)(`span`,{className:`call-presence__title`,children:`Nhận cuộc gọi`}),(0,q.jsxs)(`span`,{className:`call-presence__status`,children:[(0,q.jsx)(`span`,{className:`call-dot call-dot--${t}`,"aria-hidden":`true`}),xn(t)]})]}),(0,q.jsx)(`input`,{type:`checkbox`,role:`switch`,className:`call-switch`,checked:a,onChange:async()=>{if(!r){i(!0);try{await n(a?`dnd`:`available`)}finally{i(!1)}}},disabled:r,"aria-checked":a})]}),(0,q.jsx)(`p`,{className:`call-presence__hint`,children:a?o?`Bạn sẽ nhận cuộc mới khi xong việc hiện tại.`:`Cuộc gọi đến sẽ đổ chuông ở máy bạn.`:`Bạn sẽ không nhận cuộc gọi đến nào.`})]})}var Es={unknown:`Chưa cho phép micro`,granted:`Micro đã sẵn sàng`,denied:`Trình duyệt đang chặn micro`,checking:`Đang kiểm tra micro…`};function Ds(e){return e===`granted`?`granted`:e===`denied`?`denied`:`unknown`}function Os(){let[e,t]=(0,K.useState)(`unknown`),n=Xa();if((0,K.useEffect)(()=>{if(!n||!navigator.permissions?.query)return;let e=!1,r=null,i=()=>{!e&&r&&t(Ds(r.state))};return navigator.permissions.query({name:`microphone`}).then(t=>{e||(r=t,i(),t.addEventListener(`change`,i))}).catch(()=>{}),()=>{e=!0,r?.removeEventListener(`change`,i)}},[n]),!n)return(0,q.jsx)(`p`,{className:`call-mic call-mic--bad`,children:$a(new Ja(`unsupported`))});let r=async()=>{t(`checking`);try{eo(await Za()),t(`granted`),W(`Micro đã sẵn sàng — bạn nghe gọi được ngay trên trình duyệt.`,`success`,2500)}catch(e){t(e instanceof Ja&&e.kind===`denied`?`denied`:`unknown`),W($a(e),`error`)}};return(0,q.jsxs)(`div`,{className:`call-mic call-mic--${e===`granted`?`ok`:e===`denied`?`bad`:`idle`}`,children:[(0,q.jsxs)(`span`,{className:`call-mic__status`,children:[e===`granted`&&(0,q.jsx)(_e,{size:14,"aria-hidden":`true`}),e===`denied`&&(0,q.jsx)(v,{size:14,"aria-hidden":`true`}),(e===`unknown`||e===`checking`)&&(0,q.jsx)(_,{size:14,"aria-hidden":`true`}),Es[e]]}),e!==`granted`&&(0,q.jsx)(`button`,{type:`button`,className:`call-mic__btn`,onClick:()=>void r(),disabled:e===`checking`,children:e===`denied`?`Xem cách bật`:`Cho phép micro`})]})}function ks(){let{presence:e,softphoneEnabled:t}=Ea(),[n,r]=(0,K.useState)(!1),i=(0,K.useRef)(null);return(0,K.useEffect)(()=>{if(!n)return;let e=e=>{i.current&&!i.current.contains(e.target)&&r(!1)},t=e=>{e.key===`Escape`&&r(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]),(0,q.jsxs)(`div`,{className:`call-dock--idle`,ref:i,children:[n&&(0,q.jsxs)(`div`,{className:`call-dock__popover`,children:[(0,q.jsx)(Ts,{}),t&&(0,q.jsx)(Os,{})]}),(0,q.jsxs)(`button`,{type:`button`,className:`call-fab`,onClick:()=>r(e=>!e),"aria-expanded":n,title:`Gọi điện · ${xn(e)}`,"aria-label":`Trạng thái nghe máy: ${xn(e)}`,children:[(0,q.jsx)(z,{size:17}),(0,q.jsx)(`span`,{className:`call-dot call-dot--${e} call-fab__dot`,"aria-hidden":`true`})]})]})}var As={join:`Không nối được âm thanh`,dropped:`Mất âm thanh`,mic:`Micro vừa bị ngắt`};function js({call:e}){let{rejoinMedia:t}=Ea(),{view:n,entry:r}=Wo(e);if(e.capabilities.mediaType===`none`)return(0,q.jsx)(`div`,{className:`call-dock__sim`,children:`Cuộc gọi mô phỏng — không có âm thanh`});if(!n)return null;let i=()=>void t(e.id);if(n===`connecting`)return(0,q.jsxs)(`div`,{className:`call-media call-media--pending`,role:`status`,children:[(0,q.jsx)(Zt,{size:14,className:`call-media__spin`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:`Đang nối âm thanh…`})]});if(n===`connected`)return(0,q.jsxs)(`div`,{className:`call-media call-media--ok`,role:`status`,children:[r?.muted?(0,q.jsx)(tt,{size:14,"aria-hidden":`true`}):(0,q.jsx)(_,{size:14,"aria-hidden":`true`}),(0,q.jsx)(`span`,{children:r?.muted?`Đã nối âm thanh · micro đang tắt`:`Đã nối âm thanh`})]});if(n===`elsewhere`)return(0,q.jsxs)(`div`,{className:`call-media call-media--neutral`,role:`status`,children:[(0,q.jsx)(b,{size:14,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-media__text`,children:`Đang nghe ở cửa sổ khác`}),(0,q.jsx)(`button`,{type:`button`,className:`call-media__btn call-media__btn--quiet`,onClick:i,title:`Âm thanh sẽ chuyển từ cửa sổ kia về đây`,children:`Nghe tại đây`})]});if(n===`failed`)return(0,q.jsxs)(`div`,{className:`call-media call-media--bad`,role:`alert`,children:[(0,q.jsx)(ct,{size:14,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-media__text`,children:e.answeredAt?`Mất âm thanh`:`Không nối được âm thanh`})]});let a=n===`detached`&&ko(e.id),o=n===`lost`?As[r?.reason??`dropped`]:a?`Âm thanh đã ngắt khi tải lại trang`:`Cửa sổ này chưa có âm thanh cuộc gọi`;return(0,q.jsxs)(`div`,{className:`call-media call-media--bad`,role:`alert`,children:[(0,q.jsx)(ct,{size:14,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-media__text`,children:o}),(0,q.jsxs)(`button`,{type:`button`,className:`call-media__btn`,onClick:i,children:[(0,q.jsx)(Ye,{size:13,"aria-hidden":`true`}),` `,n===`lost`?`Thử nối lại`:a?`Nối lại âm thanh`:`Nghe tại đây`]})]})}var Ms=1e3,Ns=new Set([`answered`,`active`,`held`,`transferring`]),Ps=`(max-width: 1024px)`;function Fs(){return typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(Ps).matches}function Is(e){let[t,n]=(0,K.useState)(()=>Date.now());return(0,K.useEffect)(()=>
2{if(!e)return;let t=setInterval(()=>n(Date.now()),Ms);return()=>clearInterval(t)},[e]),t}function Ls(e,t){let n=Ns.has(e.status)?e.answeredAt??e.startedAt:e.startedAt,r=Date.parse(n);return Number.isNaN(r)?0:Math.max(0,Math.floor((t-r)/1e3))}function Rs(){let{enabled:e,calls:t,userId:n,deferredWrapUps:r,deferWrapUp:i}=Ea(),a=(0,K.useMemo)(()=>e?_a(t,n):[],[e,t,n]),o=(0,K.useMemo)(()=>e?va(t,r):[],[e,t,r]),s=a.length>0?`active`:o.length>0?`wrapup`:`idle`,c=Ko(a),l=c.size>0,u=e=>e===`active`&&!l&&Fs(),[d,f]=(0,K.useState)(()=>u(s)),[p,m]=(0,K.useState)(s);p!==s&&(m(s),f(u(s)));let[h,g]=(0,K.useState)(l);return h!==l&&(g(l),l&&f(!1)),e?a.length>0?(0,q.jsx)(zs,{calls:a,attention:c,collapsed:d,onToggle:()=>f(e=>!e)}):o.length>0?(0,q.jsx)(`div`,{className:`call-dock ${d?`call-dock--collapsed`:``}`,children:d?(0,q.jsxs)(`button`,{type:`button`,className:`call-dock__bar`,onClick:()=>f(!1),children:[(0,q.jsx)(re,{size:14}),` `,(0,q.jsx)(`span`,{className:`call-dock__bar-name`,children:`Ghi kết quả cuộc gọi`}),(0,q.jsx)(xe,{size:16})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{type:`button`,className:`call-icon-btn call-dock__collapse`,onClick:()=>f(!0),"aria-label":`Thu gọn`,children:(0,q.jsx)(H,{size:16})}),(0,q.jsx)(Cs,{call:o[0],remaining:o.length-1,onDefer:()=>i(o[0].id)},o[0].id)]})}):(0,q.jsx)(ks,{}):null}function zs({calls:e,attention:t,collapsed:n,onToggle:r}){let{userId:i,hangup:a,hold:o,resume:s,transfer:c,media:l,setMuted:u}=Ea(),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),[h,g]=(0,K.useState)(null),v=Is(!0),y=e.find(e=>e.id===d)??e[0],b=e.filter(e=>e.id!==y.id),x=y.capabilities,S=y.contact?.fullName||y.callerName||y.customerAddress||`Khách`,C=Dn(Ls(y,v)),w=y.status===`answered`||y.status===`active`||y.status===`held`,T=l[y.id],E=x.mute&&(T?.status===`connecting`||T?.status===`connected`),D=E&&T?.muted===!0,O=y.status===`transferring`&&y.transferTarget?`Đang chuyển tới ${y.transferTarget.name}`:`${y.direction===`outbound`&&!Ns.has(y.status)?`Gọi đi · `:``}${bn(y.status)}`,k=async(e,t)=>{if(!h){g(e);try{await t()}finally{g(null)}}},A=(0,q.jsxs)(`span`,{className:`call-dock__timer`,role:`timer`,children:[(0,q.jsx)(`span`,{className:`call-sr-only`,children:`Thời gian gọi `}),C]}),j=e=>(0,q.jsxs)(`button`,{type:`button`,className:`call-btn call-btn--e
2nd ${e?`call-btn--round`:``}`,onClick:()=>k(`hangup`,()=>a(y.id)),disabled:h!==null,"aria-label":`Kết thúc cuộc gọi`,children:[(0,q.jsx)(re,{size:16}),` `,!e&&(h===`hangup`?`Đang kết thúc…`:`Kết thúc`)]});return n?(0,q.jsx)(`div`,{className:`call-dock call-dock--collapsed`,role:`region`,"aria-label":`Cuộc gọi đang diễn ra`,children:(0,q.jsxs)(`div`,{className:`call-dock__bar`,children:[(0,q.jsx)(`span`,{className:`call-dot call-dot--${y.status===`held`?`wrap_up`:`busy`}`,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-dock__bar-name`,children:S}),(t.has(y.id)||D)&&(0,q.jsxs)(`span`,{className:`call-dock__bar-alert`,title:D?`Micro đang tắt`:`Chưa có âm thanh — mở rộng để nối lại`,children:[D?(0,q.jsx)(tt,{size:14,"aria-hidden":`true`}):(0,q.jsx)(ct,{size:14,"aria-hidden":`true`}),(0,q.jsx)(`span`,{className:`call-sr-only`,children:D?`Micro đang tắt`:`Chưa có âm thanh`})]}),A,j(!0),(0,q.jsx)(`button`,{type:`button`,className:`call-icon-btn`,onClick:r,"aria-label":`Mở rộng`,children:(0,q.jsx)(xe,{size:16})})]})}):(0,q.jsxs)(`div`,{className:`call-dock`,role:`region`,"aria-label":`Cuộc gọi đang diễn ra`,children:[(0,q.jsxs)(`div`,{className:`call-dock__head`,children:[(0,q.jsxs)(`div`,{className:`call-dock__who`,children:[(0,q.jsx)(`div`,{className:`call-dock__name`,children:S}),(0,q.jsx)(`div`,{className:`call-dock__source`,children:Tn(y.providerLabel,y.providerAccountName)})]}),A,(0,q.jsx)(`button`,{type:`button`,className:`call-icon-btn`,onClick:r,"aria-label":`Thu gọn`,children:(0,q.jsx)(H,{size:16})})]}),(0,q.jsx)(`div`,{className:`call-dock__status call-dock__status--${y.status}`,children:O}),(0,q.jsx)(js,{call:y}),(E||x.hold||x.transfer)&&(0,q.jsxs)(`div`,{className:`call-dock__controls`,children:[E&&(0,q.jsxs)(`button`,{type:`button`,className:`call-ctrl ${D?`is-on`:``}`,onClick:()=>u(y.id,!D),"aria-pressed":D,children:[D?(0,q.jsx)(tt,{size:16}):(0,q.jsx)(_,{size:16}),(0,q.jsx)(`span`,{children:D?`Bật tiếng`:`Tắt tiếng`})]}),x.hold&&(0,q.jsxs)(`button`,{type:`button`,className:`call-ctrl ${y.status===`held`?`is-on`:``}`,onClick:()=>k(`hold`,()=>y.status===`held`?s(y.id):o(y.id)),disabled:!w||h!==null,children:[y.status===`held`?(0,q.jsx)(mt,{size:16}):(0,q.jsx)(Ne,{size:16}),(0,q.jsx)(`span`,{children:y.status===`held`?`Tiếp tục`:`Giữ máy`})]}),x.transfer&&(0,q.jsxs)(`button`,{type:`button`,className:`call-ctrl ${p===y.id?`is-on`:``}`,onClick:()=>m(p===y.id?null:y.id),disabled:!w||h!==null,children:[(0,q.jsx)(Je,{size:16}),(0,q.jsx)(`span`,{children:`Chuyển`})]})]}),p===y.id&&w&&(0,q.jsx)(ws,{selfId:i,onClose:()=>m(null),onPick:async e=>{await c(y.id,e)&&m(null)}}),j(!1),b.length>0&&(0,q.jsx)(`div`,{className:`call-dock__others`,children:b.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:`call-dock__other`,onClick:()=>f(e.id),children:[e.contact?.fullName||e.callerName||e.customerAddress||`Khách`,` · `,bn(e.status)]},e.id))})]})}var Bs=1500,Vs=6e4,Hs={unread:0,unreplied:0,mine:0,auto:0,pinned:0,total:0};function Us(e){let[t,n]=(0,K.useState)(Hs),{on:r,connected:i}=lr(),a=(0,K.useRef)(null),o=(0,K.useCallback)(async()=>{try{let{data:t}=await G.get(`/conversations/counts`,{params:{accountId:e||void 0}});n({unread:Number(t?.unread)||0,unreplied:Number(t?.unreplied)||0,mine:Number(t?.mine)||0,auto:Number(t?.auto)||0,pinned:Number(t?.pinned)||0,total:Number(t?.total)||0})}catch{}},[e]),s=(0,K.useCallback)(()=>{a.current&&clearTimeout(a.current),a.current=setTimeout(o,Bs)},[o]);return(0,K.useEffect)(()=>{o();let e=setInterval(o,Vs),t=()=>{document.visibilityState===`visible`&&o()};return document.addEventListener(`visibilitychange`,t),()=>{clearInterval(e),document.removeEventListener(`visibilitychange`,t)}},[o]),(0,K.useEffect)(()=>{let e=[r(`chat:conv-updated`,s),r(`chat:conv-deleted`,s)];return()=>{e.forEach(e=>e?.()),a.current&&clearTimeout(a.current)}},[r,s,i]),(0,K.useEffect)(()=>{i&&o()},[i,o]),t}var Ws=`chatSoundEnabled`,Gs=2e3,Ks=[{freq:880,delay:0},{freq:1174.7,delay:.11}],qs=.14,Js=null,Ys=0,Xs=!1;function Zs(){try{return localStorage.getItem(Ws)!==`false`}catch{return!0}}function Qs(e){try{localStorage.setItem(Ws,String(e))}catch{}e&&ec()}function $s(){if(Js)return Js;let e=window.AudioContext||window.webkitAudioContext;if(!e)return null;try{Js=new e}catch{return null}return Js}function ec(){let e=$s();e&&e.state===`suspended`&&e.resume().catch(()=>{})}function tc(){if(Xs)return;Xs=!0;let e=()=>ec();document.addEventListener(`pointerdown`,e,{once:!0}
2),document.addEventListener(`keydown`,e,{once:!0})}function nc(){if(!Zs())return;let e=Date.now();if(e-Ys<Gs)return;let t=$s();if(!t)return;t.state===`suspended`&&t.resume().catch(()=>{}),Ys=e;let n=t.currentTime;for(let{freq:e,delay:r}of Ks){let i=t.createOscillator(),a=t.createGain();i.type=`sine`,i.frequency.value=e,a.gain.setValueAtTime(1e-4,n+r),a.gain.linearRampToValueAtTime(qs,n+r+.015),a.gain.exponentialRampToValueAtTime(1e-4,n+r+.22),i.connect(a),a.connect(t.destination),i.start(n+r),i.stop(n+r+.25)}}function rc(){let{on:e,connected:t}=lr();(0,K.useEffect)(()=>{tc()},[]),(0,K.useEffect)(()=>{let t=e(`chat:conv-updated`,({senderType:e})=>{e===`contact`&&nc()});return()=>{t?.()}},[e,t])}var ic=`topnav__tabs--compact`,ac=`topnav__tabs--icons`,oc=8;function sc(){let e=(0,K.useRef)(null);return(0,K.useEffect)(()=>{let t=e.current;if(!t)return;let n=()=>{let e=t.firstElementChild,n=t.lastElementChild;return!e||!n?0:n.offsetLeft+n.offsetWidth-e.offsetLeft},r=!1,i=()=>{if(!r){r=!0;try{let e=t.clientWidth;if(!e)return;t.classList.remove(ic,ac);let r=n();t.classList.add(ic);let i=n();e>=r+oc?t.classList.remove(ic,ac):e>=i+oc?(t.classList.add(ic),t.classList.remove(ac)):t.classList.add(ic,ac)}finally{r=!1}}};i();let a=new ResizeObserver(i);a.observe(t);let o=new MutationObserver(i);return o.observe(t,{childList:!0,subtree:!0,characterData:!0}),()=>{a.disconnect(),o.disconnect()}},[]),e}var cc=`/conversations`;function lc(){return(0,q.jsx)(Gr,{children:(0,q.jsx)($o,{children:(0,q.jsx)(uc,{})})})}function uc(){let e=s(),t=d(),{user:n}=J(),{brandName:r,logoUrl:i}=Ir(),{unreplied:a,unread:c}=Us(),{hasFeature:l}=Kr(),[u,f]=(0,K.useState)(Zs);rc();let p=()=>{let e=!u;Qs(e),f(e),e&&nc()},[m,h]=(0,K.useState)(!1),[g,_]=(0,K.useState)(0),[v,y]=(0,K.useState)(!1),b=(0,K.useRef)(null),x=sc(),S=Xr(qr,n?.role,l),C=Jr.map(e=>({...e,items:Xr(e.items,n?.role,l)})).filter(e=>e.items.length>0),w=C.some(t=>t.items.some(t=>!t.locked&&e.pathname.startsWith(t.path)));return(0,K.useEffect)(()=>{if(!v)return;let e=e=>{b.current&&!b.current.contains(e.target)&&y(!1)},t=e=>{e.key===`Escape`&&y(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[v]),(0,K.useEffect)(()=>{y(!1)},[e.pathname]),(0,q.jsxs)(`div`,{className:n?.platformActorId?`dl-shell dl-shell--platform`:`dl-shell`,children:[(0,q.jsx)(_i,{}),(0,q.jsx)(fi,{}),(0,q.jsxs)(`nav`,{className:`topnav`,children:[(0,q.jsx)(`div`,{className:`topnav__logo`,onClick:()=>t(`/dashboard`),children:(0,q.jsx)(`img`,{src:i,className:`topnav__logo-img`,alt:r})}),(0,q.jsxs)(`div`,{className:`topnav__tabs`,ref:x,children:[S.map(n=>{let r=n.icon,i=!n.locked&&e.pathname.startsWith(n.path),o=n.path===cc&&a>0;return(0,q.jsxs)(`button`,{"data-tour-id":`nav-${n.path}`,className:`topnav__tab ${i?`topnav__tab--active`:``} ${n.locked?`topnav__tab--locked`:``}`,onClick:()=>t(n.target),title:n.locked?`${n.label} — chưa có trong gói hiện tại`:n.label,children:[(0,q.jsx)(r,{size:16,strokeWidth:i?2.2:1.8}),(0,q.jsx)(`span`,{children:n.label}),n.locked&&(0,q.jsx)(He,{size:11,className:`topnav__tab-lock`}),o&&(0,q.jsx)(`span`,{className:`topnav__tab-badge`,title:`${a} hội thoại chờ trả lời · ${c} chưa đọc`,children:a>99?`99+`:a})]},n.path)}),C.length>0&&(0,q.jsxs)(`div`,{className:`topnav__more`,ref:b,children:[(0,q.jsxs)(`button`,{"data-tour-id":`nav-more`,className:`topnav__tab topnav__tab--more ${w?`topnav__tab--active`:``}`,onClick:()=>y(e=>!e),title:`Phân tích & cấu hình`,"aria-haspopup":`menu`,"aria-expanded":v,children:[(0,q.jsx)(Ze,{size:16,strokeWidth:w?2.2:1.8}),(0,q.jsx)(`span`,{children:`Thêm`}),(0,q.jsx)(H,{size:13,className:`topnav__more-caret`})]}),v&&(0,q.jsx)(`div`,{className:`topnav__more-menu`,role:`menu`,children:C.map(n=>(0,q.jsxs)(`div`,{className:`topnav__more-group`,children:[(0,q.jsx)(`div`,{className:`topnav__more-label`,children:n.group}),n.items.map(n=>{let r=n.icon,i=!n.locked&&e.pathname.startsWith(n.path);return(0,q.jsxs)(`button`,{role:`menuitem`,className:`topnav__more-item ${i?`topnav__more-item--active`:``} ${n.locked?`topnav__more-item--locked`:``}`,onClick:()=>{y(!1),t(n.target)},title:n.locked?`${n.label} — chưa có trong gói hiện tại`:void 0,children:[(0,q.jsx)(r,{size:15,strokeWidth:i?2.2:1.8}),(0,q.jsx)(`span`,{children:n.label}),n.locked&&(0,q.jsx)(He,{size:11,className:`topnav__more-lock`})]},n.path)})]},n.group))})]})]}),(0,q.jsxs)(`div`,{className:`topnav__right`,children:[(0,q.jsxs)(`div`,{className:`topnav__search`,"data-tour-id":`topnav-search`,onClick:()=>h(!0),style:{cursor:`pointer`},children:[(0,q.jsx)(_t,{size:14}),(0,q.jsx)(`span`,{children:`Tìm kiếm khách hàng, tin nhắn...`}),(0,q.jsx)(`kbd`,{children:`⌘K`})]}),(0,q.jsx)(Ei,{onReplayTour:()=>_(e=>e+1),onOpenSearch:()=>h(!0),laQuanTri:n?.role===`owner`||n?.role===`admin`}),(0,q.jsx)(`button`,{className:`topnav__icon-btn`,onClick:p,title:u?`Tắt âm báo tin nhắn`:`Bật âm báo tin nhắn`,"aria-label":u?`Tắt âm báo tin nhắn`:`Bật âm báo tin nhắn`,"aria-pressed":u,children:u?(0,q.
2jsx)(it,{size:18}):(0,q.jsx)(ct,{size:18,color:`#94a3b8`})}),(0,q.jsx)(`span`,{"data-tour-id":`topnav-notifications`,children:(0,q.jsx)(Ur,{})}),(0,q.jsx)(`span`,{"data-tour-id":`topnav-plan-badge`,children:(0,q.jsx)(di,{})}),(0,q.jsx)(Ti,{})]})]}),(0,q.jsx)(gi,{}),(0,q.jsx)(`div`,{className:`layout`,children:(0,q.jsx)(o,{})}),(0,q.jsx)(ui,{open:m,onOpenChange:h}),(0,q.jsx)(Vi,{replayToken:g}),(0,q.jsx)($i,{}),(0,q.jsx)(hs,{}),(0,q.jsx)(Rs,{})]})}function dc({children:e}){let{isAuthenticated:t,loading:n,token:r}=J(),i=s();return n?null:t?(0,q.jsx)(q.Fragment,{children:e}):r?(0,q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,minHeight:`100vh`,gap:16,fontFamily:`Inter, system-ui, sans-serif`,color:`#475569`,background:`#f8fafc`},children:[(0,q.jsx)(`div`,{style:{fontSize:48},children:`⚠️`}),(0,q.jsx)(`h2`,{style:{margin:0,fontSize:20,fontWeight:700,color:`#0f172a`},children:`Không thể kết nối đến server`}),(0,q.jsx)(`p`,{style:{margin:0,fontSize:14,maxWidth:400,textAlign:`center`},children:`Hệ thống đang bảo trì hoặc gặp sự cố tạm thời. Vui lòng thử lại.`}),(0,q.jsx)(`button`,{onClick:()=>window.location.reload(),style:{marginTop:8,padding:`10px 24px`,fontSize:14,fontWeight:600,color:`#fff`,background:`#2563eb`,border:`none`,borderRadius:8,cursor:`pointer`},children:`Tải lại trang`})]}):(0,q.jsx)(u,{to:`/login`,state:{from:i.pathname},replace:!0})}var fc={ZALO_NOT_LINKED:`Đăng nhập bằng email một lần. Trong Mini App, app tự liên kết Zalo ngay sau đó; trên web, vào Hồ sơ → Liên kết Zalo.`,ZALO_UID_TAKEN:`Tài khoản Zalo này đã gắn với người dùng khác.`,ZALO_CODE_EXPIRED:`Mã đã hết hạn. Bấm Liên kết tài khoản Zalo lại.`,ZALO_TOKEN_INVALID:`Zalo không chấp nhận phiên này. Thử lại.`,ZALO_EXCHANGE_FAILED:`Zalo từ chối yêu cầu. Thử lại sau ít phút.`,ZALO_LOGIN_NOT_CONFIGURED:`Đây là lỗi cấu hình máy chủ, không phải lỗi của bạn — báo quản trị viên.`,EMAIL_TAKEN:`Email này đã có tài khoản — hãy đăng nhập bằng email thay vì đăng ký.`,RATE_LIMITED:`Bạn thao tác quá nhanh. Chờ ít phút rồi thử lại.`};function pc(e){if(e?.response?.status===404)return{code:`CHUA_CO_TREN_MAY_CHU`,message:`Máy chủ chưa được cập nhật tính năng này.`,huongDan:`Thử lại sau khi hệ thống nâng cấp, hoặc liên hệ Bizino.`};let t=un(e);return{code:t,message:rn(e)||`Liên kết tài khoản Zalo không thành công.`,huongDan:t?fc[t]:void 0}}var mc={code:`ZMP_SDK_KHONG_SAN_SANG`,message:`Không lấy được thông tin Zalo của bạn.`,huongDan:`Mở lại ứng dụng từ trong Zalo, hoặc cho phép quyền khi Zalo hỏi.`};async function hc(){try{let{getAccessToken:e}=await l(async()=>{let{getAccessToken:e}=await import(`./apis-xwaRH2Sy.js`);return{getAccessToken:e}},[]);return await e()||null}catch{return null}}function gc(){let{applySession:e}=J(),[t,n]=(0,K.useState)(!1),[r,i]=(0,K.useState)(null),a=(0,K.useCallback)(async()=>{n(!0),i(null);try{let e=await G.get(`/auth/zalo/login/start`);window.location.href=e.data.url}catch(e){i(pc(e)),n(!1)}},[]),o=(0,K.useCallback)(async t=>{n(!0),i(null);try{let n=await G.post(`/auth/zalo/exchange`,{code:t});return e(n.data.token,n.data.refreshToken,n.data.user),!0}catch(e){return i(pc(e)),!1}finally{n(!1)}},[e]),s=(0,K.useCallback)(async()=>{n(!0),i(null);try{let t=await hc();if(!t)return i(mc),!1;let n=await G.post(`/auth/zalo/miniapp`,{accessToken:t});return e(n.data.token,n.data.refreshToken,n.data.user),!0}catch(e){return i(pc(e)),!1}finally{n(!1)}},[e]),c=(0,K.useCallback)(async e=>{n(!0),i(null);try{let t=await hc();return t?(await G.post(`/auth/zalo/miniapp/signup`,{...e,accessToken:t}),!0):(i(mc),!1)}catch(e){return i(pc(e)),!1}finally{n(!1)}},[]),l=(0,K.useCallback)(async t=>{n(!0),i(null);try{let n=await hc();if(!n)return i(mc),!1;let r=await G.post(`/auth/zalo/miniapp/join`,{...t,accessToken:n});return e(r.data.token,r.data.refreshToken,r.data.user),!0}catch(e){return i(pc(e)),!1}finally{n(!1)}},[e]),u=(0,K.useCallback)(async()=>{try{let e=await hc();
2return e?(await G.post(`/auth/zalo/link/miniapp`,{accessToken:e}),!0):!1}catch{return!1}},[]),d=(0,K.useCallback)(async()=>{n(!0),i(null);try{let e=await G.get(`/auth/zalo/link/start`);window.location.href=e.data.url}catch(e){i(pc(e)),n(!1)}},[]),f=(0,K.useCallback)(async()=>{try{return(await G.get(`/auth/zalo/link`)).data}catch{return null}},[]),p=(0,K.useCallback)(async()=>{n(!0),i(null);try{return await G.delete(`/auth/zalo/link`),!0}catch(e){return i(pc(e)),!1}finally{n(!1)}},[]);return{dangChay:t,loi:r,xoaLoi:()=>i(null),batDauDangNhapWeb:a,doiMaLayPhien:o,dangNhapMiniApp:s,baoLoiTuUrl:(0,K.useCallback)(e=>{i({code:e,message:e===`ZALO_NOT_LINKED`?`Tài khoản Zalo này chưa được gắn với người dùng nào.`:`Liên kết tài khoản Zalo không thành công (${e}).`,huongDan:fc[e]})},[]),dangKyMiniApp:c,thamGiaBangMa:l,batDauLienKet:d,lienKetTuMiniApp:u,xemLienKet:f,goLienKet:p}}var _c=`bzn-zalo-da-kiem-lien-ket`,vc=new Set([`ZALO_LOGIN_NOT_CONFIGURED`,`CHUA_CO_TREN_MAY_CHU`,`ZALO_EXCHANGE_FAILED`,`RATE_LIMITED`]);function yc(e){return e.code===null||vc.has(e.code)}function bc({children:e}){let{isAuthenticated:t,loading:n}=J(),{dangNhapMiniApp:r,lienKetTuMiniApp:i,xemLienKet:a,dangChay:o,loi:s}=gc(),c=(0,K.useRef)(!1),[l,d]=(0,K.useState)(!1),[p,m]=(0,K.useState)(!0);if((0,K.useEffect)(()=>{n||t||c.current||(c.current=!0,r().finally(()=>d(!0)))},[n,t,r]),(0,K.useEffect)(()=>{n||!t||sessionStorage.getItem(_c)||(sessionStorage.setItem(_c,`1`),(async()=>{let e=await a();!e||e.linked||await i()&&W(`Đã liên kết Zalo — lần sau mở app là vào thẳng.`,`success`)})())},[n,t,a,i]),t)return(0,q.jsx)(q.Fragment,{children:e});let h=n||o||!l;return!h&&(!s||!yc(s))?(0,q.jsx)(u,{to:`/login`,replace:!0,state:{from:`/m`}}):(0,q.jsxs)(`div`,{className:`m-gate`,children:[p?(0,q.jsx)(`img`,{className:`m-gate__logo m-gate__logo--img`,src:`/icon.png`,alt:`Bizino`,onError:()=>m(!1)}):(0,q.jsx)(`div`,{className:`m-gate__logo`,children:`B`}),(0,q.jsx)(`h1`,{className:`m-gate__title`,children:`Bizino CRM`}),h&&(0,q.jsx)(`p`,{className:`m-gate__text`,children:`Đang nhận diện tài khoản Zalo của bạn…`}),!h&&s&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`p`,{className:`m-gate__text`,children:s.message}),s.huongDan&&(0,q.jsx)(`p`,{className:`m-gate__hint`,children:s.huongDan}),(0,q.jsxs)(`div`,{className:`m-gate__act`,children:[(0,q.jsxs)(`button`,{type:`button`,className:`m-btn m-btn--ghost`,onClick:()=>{c.current=!0,d(!1),r().finally(()=>d(!0))},children:[(0,q.jsx)(Ye,{size:15}),` Thử lại`]}),(0,q.jsxs)(f,{to:`/login`,className:`m-btn`,style:{textDecoration:`none`},children:[(0,q.jsx)(at,{size:15}),` Đăng nhập bằng email`]})]})]})]})}function xc(){let{isAuthenticated:e,loading:t,token:n}=J();return t?null:!e&&n?(0,q.jsx)(u,{to:`/dashboard`,replace:!0}):(0,q.jsx)(u,{to:e?`/dashboard`:`/signup`,replace:!0})}function Sc({children:e}){let{user:t,loading:n}=J();if(n)return null;let r=t?.role;return r!==`owner`&&r!==`admin`?(0,q.jsx)(u,{to:`/dashboard`,replace:!0}):(0,q.jsx)(q.Fragment,{children:e})}var Cc=60;function wc({email:e,label:t=`Gửi lại email xác minh`,className:n=`signup-resend-btn`,initialCooldown:r=0}){let[i,a]=(0,K.useState)(r),[o,s]=(0,K.useState)(!1);(0,K.useEffect)(()=>{if(i<=0)return;let e=setTimeout(()=>a(e=>e-1),1e3);return()=>clearTimeout(e)},[i]);let c=async()=>{if(i>0)return;let t=e.trim();if(t){try{await G.post(`/auth/signup/resend`,{email:t})}catch{}s(!0),a(Cc)}};return(0,q.jsxs)(`div`,{className:`signup-resend-timer`,children:[i>0?(0,q.jsxs)(q.Fragment,{children:[o?`Đã gửi yêu cầu. `:``,`Gửi lại sau `,i,`s`]}):(0,q.jsx)(`button`,{type:`button`,className:n,onClick:()=>void c(),children:o?`Vẫn chưa nhận được? Gửi lại`:t}),(0,q.jsxs)(`p`,{className:`signup-resend-note`,children:[`Gửi lại sẽ tạo liên kết mới — `,(0,q.jsx)(`strong`,{children:`chỉ liên kết trong thư mới nhất còn dùng được`}),`.`]})]})}function Tc({dangChay:e,loi:t,onBam:n}){return(0,q.jsxs)(`div`,{style:{marginTop:14},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,marginBottom:12},children:[(0,q.jsx)(`span`,{style:{flex:1,height:1,background:`var(--gray-200)`}}),(0,q.jsx)(`span`,{style:{fontSize:12,color:`var(--gray-400)`},children:`hoặc`}),(0,q.jsx)(`span`,{style:{flex:1,height:1,background:`var(--gray-200)`}})]}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,disabled:e,style:{width:`100%`,height:44,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:8,cursor:e?`default`:`pointer`,border:`1px solid var(--gray-300)`,borderRadius:`var(--radius-md)`,background:`var(--bg-card)`,color:`var(--gray-800)`,font:`inherit`,fontSize:14,fontWeight:600,opacity:e?.6:1},children:[(0,q.jsx)(`svg`,{width:`18`,height:`18`,viewBox:`0 0 48 48`,"aria-hidden":!0,focusable:`false`,children:(0,q.jsx)(`path`,{fill:`#0068FF`,d:`M24 4C12.4 4 3 12.3 3 22.5c0 5.8 3 11 7.8 14.4-.3 2.6-1.3 5-2.7 7 2.9-.4 5.7-1.6 8.1-3.4 2.5.7 5.1 1 7.8 1 11.6 0 21-8.3 21-18.5S35.6 4 24 4Z`})}),e?`Đang chuyển sang Zalo…`:`Liên kết tài khoản Zalo`]}),t&&(0,q.jsxs)(`div`,{className:`login-error`,role:`alert`,style:{marginTop:10},children:[(0,q.jsx)(ce,{size:15,style:{flexShrink:0,marginTop:1}}),(0,q.jsxs)(`span`,{children:[t.message,t.huongDan&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`br`,{}),(0,q.jsx)(`span`,{style:{opacity:.85},children:t.huongDan})]})]})]})]})}function Ec(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(``),[i,a]=(0,K.useState)(``),[o,l]=(0,K.useState)(``),[u,p]=(0,K.useState)(``),[m,h]=(0,K.useState)(!1),[g,_]=(0,K.useState)(null),[v,y]=(0,K.useState)(null),{login:b,setup:x,isAuthenticated:S,loading:C,error:w}=J(),{brandName:T,logoUrl:E}=Ir(),D=d(),O=s(),[k,A]=c(),j=O.state?.from||`/dashboard`,M=gc();(0,K.useEffect)(()=>{!C&&S&&D(j,{replace:!0})},[C,S,j,D]);let N=(0,K.useRef)(!1);(0,K.useEffect)(()=>{let e=k.get(`zalo_code`),t=k.get(`zalo_error`);!e&&!t||N.current||(N.current=!0,A(new URLSearchParams,{replace:!0}),e?M.doiMaLayPhien(e):t&&M.baoLoiTuUrl(t))},[]),(0,K.useEffect)(()=>{G.get(`/setup/status`).then(e=>t(!!e.data.needsSetup)).catch(()=>t(!1))},[]);async function P(t){if(t.preventDefault(),_(null),y(null),h(!0),e){let e=await x(n,i,o,u);h(!1),e&&D(j,{replace:!0});return}let r=await b(o,u);if(h(!1),r.ok){D(j,{replace:!0});return}r.code===`ORG_EXPIRED`?_(`Công ty của bạn đã hết hạn sử dụng. Vui lòng liên hệ quản trị viên để gia hạn.`):r.code===`ORG_SUSPENDED`?_(`Tài khoản công ty đang bị tạm khóa. Vui lòng liên hệ quản trị viên.`):r.code===`EMAIL_NOT_VERIFIED`&&y(o.trim())}return e===null||C?(0,q.jsx)(`div`,{className:`login-page`,children:(0,q.jsx)(`div`,{className:`login-card`,style:{textAlign:`center`,padding:40,color:`var(--gray-400)`},children:`Đang tải...`})}):(0,q.jsx)(`div`,{className:`login-page`,children:(0,q.jsxs)(`div`,{className:`login-card`,children:[(0,q.jsxs)(`div`,{className:`login-brand`,children:[(0,q.jsx)(`img`,{src:E,className:`login-brand__logo`,alt:T}),(0,q.jsx)(`p`,{className:`login-brand__subtitle`,children:e?`Thiết lập tổ chức của bạn`:`Quản lý khách hàng thông minh`})]}
2),v&&(0,q.jsxs)(`div`,{className:`login-verify-notice`,children:[(0,q.jsx)(Dt,{size:18}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`p`,{className:`login-verify-notice__title`,children:`Tài khoản chưa được xác minh`}),(0,q.jsxs)(`p`,{children:[`Chúng tôi đã gá»­i liên kết xác minh tới `,(0,q.jsx)(`strong`,{children:v}),`. Mở thư và bấm liên kết đó để kích hoạt tài khoản. Nhớ kiểm tra cả mục Spam.`]}),(0,q.jsx)(wc,{email:v})]})]}),(0,q.jsxs)(`form`,{className:`login-form`,onSubmit:P,children:[g&&(0,q.jsxs)(`div`,{className:`login-error`,style:{background:`#fffbeb`,borderColor:`#fde68a`,color:`#92400e`},children:[(0,q.jsx)(ce,{size:16}),` `,g]}),!g&&!M.loi&&w&&(0,q.jsxs)(`div`,{className:`login-error`,children:[(0,q.jsx)(ce,{size:16}),` `,w]}),e&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`login-field`,children:[(0,q.jsx)(`label`,{className:`login-field__label`,children:`Tên tổ chức`}),(0,q.jsx)(`input`,{className:`login-field__input`,type:`text`,placeholder:`Công ty ABC`,value:n,onChange:e=>r(e.target.value),required:!0,autoFocus:!0})]}),(0,q.jsxs)(`div`,{className:`login-field`,children:[(0,q.jsx)(`label`,{className:`login-field__label`,children:`Họ và tên`}),(0,q.jsx)(`input`,{className:`login-field__input`,type:`text`,placeholder:`Nguyễn Văn A`,value:i,onChange:e=>a(e.target.value),required:!0})]})]}),(0,q.jsxs)(`div`,{className:`login-field`,children:[(0,q.jsx)(`label`,{className:`login-field__label`,children:`Email`}),(0,q.jsx)(`input`,{className:`login-field__input`,type:`email`,placeholder:`[email protected]`,value:o,onChange:e=>l(e.target.value),required:!0,autoFocus:!e})]}),(0,q.jsxs)(`div`,{className:`login-field`,children:[(0,q.jsx)(`label`,{className:`login-field__label`,children:`Mật khẩu`}),(0,q.jsx)(`input`,{className:`login-field__input`,type:`password`,placeholder:`••••••••`,value:u,onChange:e=>p(e.target.value),required:!0,minLength:6})]}),(0,q.jsx)(`button`,{className:`login-submit`,type:`submit`,disabled:m,children:m?`Đang xá»­ lý...`:e?`Tạo tổ chức`:`Đăng nhập`}),!e&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Tc,{dangChay:M.dangChay,loi:M.loi,onBam:()=>void M.batDauDangNhapWeb()}),(0,q.jsx)(f,{to:`/forgot-password`,style:{textAlign:`center`,fontSize:13,color:`var(--gray-500)`},children:`Quên mật khẩu?`})]})]}),!e&&(0,q.jsx)(`div`,{className:`login-footer`,children:(0,q.jsxs)(q.Fragment,{children:[`Chưa có tài khoản? `,(0,q.jsx)(f,{to:`/signup`,children:`Đăng ký miễn phí`})]})})]})})}function Dc({title:e,titleIcon:t,items:n,activeKey:r,onChange:i,onAdd:a}){return(0,q.jsxs)(`aside`,{className:`sidebar`,children:[(0,q.jsxs)(`div`,{className:`sidebar__header`,children:[(0,q.jsxs)(`span`,{className:`sidebar__title`,children:[(0,q.jsx)(t,{size:16}),` `,e]}),a&&(0,q.jsx)(`button`,{className:`sidebar__add-btn`,onClick:a,children:(0,q.jsx)(`span`,{style:{fontSize:16,lineHeight:1},children:`+`})})]}),n.map(e=>{let t=e.icon;return(0,q.jsxs)(`div`,{className:`sidebar__item ${e.key===r?`sidebar__item--active`:``}`,onClick:()=>i(e.key),children:[(0,q.jsx)(`span`,{className:`sidebar__item-icon`,children:(0,q.jsx)(t,{size:16})}),(0,q.jsx)(`span`,{children:e.label}),e.badge!==void 0&&e.badge>0&&(0,q.jsx)(`span`,{className:`sidebar__item-badge`,children:e.badge})]},e.key)})]})}function Oc({initials:e,color:t,size:n=40,fontSize:r=14,online:i}){return(0,q.jsxs)(`div`,{className:`avatar`,style:{width:n,height:n,background:t,borderRadius:`50%`,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:r,fontWeight:600,color:`#fff`,flexShrink:0,position:`relative`},children:[e,i&&(0,q.jsx)(`span`,{style:{position:`absolute`,bottom:0,right:0,width:Math.max(8,n*.25),height:Math.max(8,n*.25),borderRadius:`50%`,background:`#16a34a`,border:`2px solid #fff`}})]})}function kc({label:e,bg:t,color:n,size:r=`sm`,onClick:i}){return(0,q.jsx)(`span`,{className:`tag tag--${r}`,style:{background:t,color:n,cursor:i?`pointer`:`default`},onClick:i,children:e})}function Ac({placeholder:e=`Tìm kiếm...`,value:t,onChange:n}){let[r,i]=(0,K.useState)(``),a=t===void 0?r:t,o=e=>{t===void 0&&i(e),n?.(e)};return(0,q.jsxs)(`div`,{className:`search-input`,children:[(0,q.jsx)(_t,{size:14,color:`#94a3b8`}),(0,q.jsx)(`input`,{value:a,onChange:e=>o(e.target.value),placeholder:e}),a&&(0,q.jsx)(`button`,{className:`search-input__clear`,onClick:()=>o(``),children:`×`})]})}function jc({open:e,onClose:t,title:n,subtitle:r,width:i=480,children:a,footer:o}){let s=(0,K.useRef)(null);return(0,K.useEffect)(()=>{let n=e=>{e.key===`Escape`&&t()};
2return e&&(document.addEventListener(`keydown`,n),document.body.style.overflow=`hidden`),()=>{document.removeEventListener(`keydown`,n),document.body.style.overflow=``}},[e,t]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`drawer-backdrop ${e?`drawer-backdrop--open`:``}`,onClick:t}),(0,q.jsxs)(`div`,{ref:s,className:`drawer ${e?`drawer--open`:``}`,style:{width:i},children:[(0,q.jsxs)(`div`,{className:`drawer__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`drawer__title`,children:n}),r&&(0,q.jsx)(`p`,{className:`drawer__subtitle`,children:r})]}),(0,q.jsx)(`button`,{className:`drawer__close`,onClick:t,children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsx)(`div`,{className:`drawer__body`,children:a}),o&&(0,q.jsx)(`div`,{className:`drawer__footer`,children:o})]})]})}function Mc({stages:e,title:t,subtitle:n}){let[r,i]=(0,K.useState)(null),a=e[0]?.count||1;return(0,q.jsxs)(`div`,{className:`funnel-viz`,children:[t&&(0,q.jsxs)(`div`,{className:`funnel-viz__header`,children:[(0,q.jsx)(`div`,{className:`funnel-viz__title`,children:t}),n&&(0,q.jsx)(`div`,{className:`funnel-viz__subtitle`,children:n})]}),(0,q.jsx)(`div`,{className:`funnel-viz__body`,children:e.map((t,n)=>{let o=a>0?30+t.count/a*70:30,s=e[n+1]?.count,c=s!=null&&t.count>0?Math.round((t.count-s)/t.count*100):null,l=r===n;return(0,q.jsxs)(`div`,{className:`funnel-viz__stage-wrap`,children:[(0,q.jsxs)(`div`,{className:`funnel-viz__stage ${l?`funnel-viz__stage--hover`:``}`,style:{width:`${o}%`},onMouseEnter:()=>i(n),onMouseLeave:()=>i(null),children:[(0,q.jsxs)(`div`,{className:`funnel-viz__bar`,style:{background:t.color},children:[(0,q.jsx)(`span`,{className:`funnel-viz__bar-label`,children:t.stage}),(0,q.jsx)(`span`,{className:`funnel-viz__bar-value`,children:t.count.toLocaleString()})]}),l&&(0,q.jsxs)(`div`,{className:`funnel-viz__tooltip`,children:[(0,q.jsx)(`div`,{className:`funnel-viz__tooltip-title`,children:t.stage}),(0,q.jsxs)(`div`,{className:`funnel-viz__tooltip-row`,children:[(0,q.jsx)(`span`,{children:`Số lượng`}),(0,q.jsx)(`strong`,{children:t.count.toLocaleString()})]}),(0,q.jsxs)(`div`,{className:`funnel-viz__tooltip-row`,children:[(0,q.jsx)(`span`,{children:`Tỉ lệ từ đầu`}),(0,q.jsxs)(`strong`,{children:[t.pct,`%`]})]}),c!=null&&(0,q.jsxs)(`div`,{className:`funnel-viz__tooltip-row`,style:{color:`#ef4444`},children:[(0,q.jsx)(`span`,{children:`Mất ở bước này`}),(0,q.jsxs)(`strong`,{children:[c,`%`]})]})]})]}),(0,q.jsxs)(`span`,{className:`funnel-viz__pct`,children:[t.pct,`%`]}),c!=null&&(0,q.jsxs)(`div`,{className:`funnel-viz__drop`,children:[(0,q.jsx)(`div`,{className:`funnel-viz__drop-line`}),(0,q.jsxs)(`span`,{className:`funnel-viz__drop-badge`,children:[(0,q.jsx)(ue,{size:10}),` -`,c,`%`]})]})]},t.stage)})}),(0,q.jsxs)(`div`,{className:`funnel-viz__summary`,children:[(0,q.jsxs)(`div`,{className:`funnel-viz__summary-item`,children:[(0,q.jsx)(`span`,{className:`funnel-viz__summary-label`,children:`Tổng đầu vào`}),(0,q.jsx)(`span`,{className:`funnel-viz__summary-value`,children:e[0]?.count.toLocaleString()})]}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transform:`rotate(-90deg)`}}),(0,q.jsxs)(`div`,{className:`funnel-viz__summary-item`,children:[(0,q.jsx)(`span`,{className:`funnel-viz__summary-label`,children:`Chuyển đổi`}),(0,q.jsx)(`span`,{className:`funnel-viz__summary-value`,style:{color:`#16a34a`},children:e[e.length-1]?.count.toLocaleString()})]}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transform:`rotate(-90deg)`}}),(0,q.jsxs)(`div`,{className:`funnel-viz__summary-item`,children:[(0,q.jsx)(`span`,{className:`funnel-viz__summary-label`,children:`Tỉ lệ`}),(0,q.jsxs)(`span`,{className:`funnel-viz__summary-value`,style:{color:`#16a34a`,fontWeight:700},children:[e[e.length-1]?.pct,`%`]})]})]})]})}var X=class extends K.Component{state={hasError:!1,error:null};static getDerivedStateFromError(e){return{hasError:!0,error:e}}componentDidCatch(e,t){console.error(`[ErrorBoundary:${this.props.context||`unknown`}]`,e,t.componentStack)}handleReset=()=>{if(zr(this.state.error)){window.location.reload();return}this.setState({hasError:!1,error:null})};render(){return this.state.hasError?this.props.fallback?this.props.fallback:(0,q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,alignItems:`center`,justifyContent:`center`,padding:`40px 24px`,textAlign:`center`,color:`var(--gray-500)`},children:[(0,q.jsx)(`div`,{style:{width:48,height:48,borderRadius:`50%`,background:`#fee2e2`,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:24,marginBottom:16},children:`⚠️`}),(0,q.jsx)(`h3`,{style:{fontSize:15,fontWeight:600,color:`var(--gray-700)`,marginBottom:8},children:`Đã xảy ra lỗi`}),(0,q.jsx)(`p`,{style:{fontSize:13,marginBottom:20,maxWidth:300}
2,children:zr(this.state.error)?`Ứng dụng vừa được cập nhật nên phiên bản đang mở đã cũ. Tải lại trang để dùng bản mới.`:this.state.error?.message||`Không thể tải nội dung này.`}),(0,q.jsx)(`button`,{onClick:this.handleReset,style:{padding:`8px 20px`,borderRadius:8,border:`none`,background:`var(--primary)`,color:`#fff`,fontSize:13,fontWeight:500,cursor:`pointer`},children:`Thử lại`})]}):this.props.children}};function Nc(e){let[t,n]=(0,K.useState)(null);return(0,K.useEffect)(()=>{if(!e)return;let t=!1;return G.get(`/billing/contact`).then(e=>{t||n(e.data.contact)}).catch(()=>{}),()=>{t=!0}},[e]),t}var Pc=t({default:()=>Ic}),Fc={marketing:`Lên lịch nội dung, đăng bài tự động lên Fanpage/Zalo OA và dùng trợ lý AI marketing.`,cdp:`Phễu chuyển đổi, phân khúc khách hàng và sự kiện hành vi.`,automation:`Tạo kịch bản tự động chăm sóc khách hàng.`,ai_auto_reply:`Để AI tự trả lời khách hàng theo kịch bản của bạn.`,api:`Kết nối Bizino AI với hệ thống ngoài qua API key.`,pancake:`Đồng bộ hội thoại Facebook/Instagram/TikTok qua Pancake.`,perfex:`Đồng bộ hai chiều với PerfexCRM.`,org_chart:`Phân quyền nâng cao theo cấp bậc quản lý.`,quotes:`Tạo báo giá, hợp đồng và gửi cho khách qua Zalo/Fanpage.`,custom_branding:`Thay logo, favicon và tên thương hiệu trong app bằng của công ty bạn.`,webhook_inbound:`Nhận khách hàng tiềm năng từ landing page, biểu mẫu, nền tảng quảng cáo… tự động vào CRM qua webhook.`,multi_org:`Mở thêm công ty và chuyển qua lại bằng một tài khoản duy nhất — mỗi công ty có dữ liệu, nhân sự và hoá đơn riêng.`};function Ic({feature:e,title:t,description:n}){let[r]=c(),i=e??r.get(`feature`)??void 0,{ent:a}=Kr(),{user:o}=J(),s=hn(o?.role),l=Nc(!s),[u,d]=(0,K.useState)(null),[p,m]=(0,K.useState)(!1);(0,K.useEffect)(()=>{let e=!1;return G.get(`/billing/plans`).then(t=>{e||d(t.data.items??[])}).catch(()=>{e||m(!0)}),()=>{e=!0}},[]);let h=i?mn[i]??null:null,g=!!i&&!!a&&a.features.includes(i),_=t??(g?`${h??`Tính năng này`} đã có trong gói của bạn`:h?`${h} chưa có trong gói của bạn`:`Tính năng chưa có trong gói hiện tại`),v=i&&u&&!g?u.filter(e=>e.features.includes(i)).sort((e,t)=>e.priceVnd-t.priceVnd):[],y=a&&u?u.find(e=>e.code===a.planCode)?.name??null:null;return(0,q.jsx)(`div`,{className:`upgrade-page`,children:(0,q.jsxs)(`div`,{className:`upgrade-page__inner`,children:[(0,q.jsx)(`div`,{className:`upgrade-page__icon`,children:g?(0,q.jsx)(te,{size:28}):(0,q.jsx)(He,{size:28})}),(0,q.jsx)(`h2`,{className:`upgrade-page__title`,children:_}),(0,q.jsx)(`p`,{className:`upgrade-page__desc`,children:n??(g?`Bạn mở được tính năng này rồi — có thể vào dùng ngay. Nếu vừa bị chặn ở đâu đó, nhiều khả năng là do hạn mức của gói chứ không phải do thiếu tính năng.`:(i&&Fc[i])??`Nâng cấp gói để mở khoá thêm tính năng cho công ty của bạn.`)}),a&&(0,q.jsxs)(`p`,{className:`upgrade-page__current`,children:[`Gói hiện tại của bạn: `,(0,q.jsx)(`strong`,{children:y??a.planCode})]}),i&&u&&v.length>0&&(0,q.jsxs)(`div`,{className:`upgrade-page__plans`,children:[(0,q.jsx)(`span`,{className:`upgrade-page__plans-label`,children:`Có trong các gói:`}),(0,q.jsx)(`div`,{className:`upgrade-page__chips`,children:v.map(e=>(0,q.jsxs)(`span`,{className:`upgrade-page__chip`,children:[e.name,` · `,_n(e.priceVnd,e.period)]},e.id))})]}),i&&u&&v.length===0&&(0,q.jsx)(`p`,{className:`upgrade-page__current`,children:`Không có gói công khai nào kèm tính năng này — vui lòng liên hệ để được tư vấn riêng.`}),p&&(0,q.jsx)(`p`,{className:`upgrade-page__current`,children:`Không tải được bảng giá. Mở trang Gói & Thanh toán để xem chi tiết.`}),(0,q.jsx)(f,{to:`/settings/billing`,className:`upgrade-page__cta`,children:`Xem các gói`}),!s&&(0,q.jsx)(`p`,{className:`upgrade-page__current`,children:l?(0,q.
2jsxs)(q.Fragment,{children:[`Liên hệ `,(0,q.jsx)(`strong`,{children:l.fullName}),` (`,(0,q.jsx)(`a`,{href:`mailto:${l.email}`,children:l.email}),`) — người quản lý gói cước của công ty — để mở tính năng này.`]}):`Liên hệ chủ sở hữu hoặc quản trị viên của công ty để nâng gói.`})]})})}function Lc({feature:e,children:t}){let{hasFeature:n,loading:r}=Kr();return!r&&!n(e)?(0,q.jsx)(Ic,{feature:e}):(0,q.jsx)(q.Fragment,{children:t})}function Rc({domain:e,children:t}){let{levelOf:n,loading:r}=qn();return r||n(e)!==`none`?(0,q.jsx)(q.Fragment,{children:t}):(0,q.jsxs)(`div`,{className:`role-gate`,children:[(0,q.jsx)(`div`,{className:`role-gate__icon`,children:(0,q.jsx)(St,{size:26})}),(0,q.jsx)(`h2`,{className:`role-gate__title`,children:`Bạn không có quyền dùng phần này`}),(0,q.jsx)(`p`,{className:`role-gate__desc`,children:`Chức năng này chỉ dành cho chủ tài khoản, quản trị và quản lý. Nếu công việc của bạn cần tới nó, hãy nhờ quản trị công ty đổi vai trò cho tài khoản của bạn.`}),(0,q.jsx)(`a`,{className:`role-gate__link`,href:`/`,children:`Về Tổng quan`})]})}var zc=`https://bzncrm-api.bizino.ai/api/v1/platform`,Bc=an.create({baseURL:zc,timeout:3e4});Bc.interceptors.request.use(e=>{let t=localStorage.getItem(`platform_token`);return t&&(e.headers.Authorization=`Bearer ${t}`),e});var Vc=!1,Hc=[];function Uc(e,t=null){Hc.forEach(({resolve:n,reject:r})=>{e?r(e):n(t)}),Hc=[]}var Wc=new Set([`TOKEN_EXPIRED`,`TOKEN_INVALID`,`TOKEN_MISSING`]);Bc.interceptors.response.use(e=>e,async e=>{let t=e.response?.status,n=e.response?.data?.code,r=e.config;if(t===401&&typeof n==`string`&&Wc.has(n)){let t=localStorage.getItem(`platform_refreshToken`);if(n===`TOKEN_EXPIRED`&&t&&!r._retry){if(r._retry=!0,Vc)return new Promise((e,t)=>{Hc.push({resolve:e,reject:t})}).then(e=>(r.headers.Authorization=`Bearer ${e}`,Bc(r)));Vc=!0;try{let{token:e,refreshToken:n}=(await an.post(`${zc}/auth/refresh`,{refreshToken:t})).data;return localStorage.setItem(`platform_token`,e),localStorage.setItem(`platform_refreshToken`,n),r.headers.Authorization=`Bearer ${e}`,Uc(null,e),Bc(r)}catch(e){return Uc(e),localStorage.removeItem(`platform_token`),localStorage.removeItem(`platform_refreshToken`),window.location.pathname.startsWith(`/platform/login`)||(W(`Phiên Platform Console đã hết hạn. Vui lòng đăng nhập lại.`,`warning`),window.location.href=`/platform/login`),Promise.reject(e)}finally{Vc=!1}}localStorage.removeItem(`platform_token`),localStorage.removeItem(`platform_refreshToken`);let i=window.location.pathname;return!i.startsWith(`/platform/login`)&&!i.startsWith(`/platform/setup`)&&(W(`Phiên Platform Console đã hết hạn. Vui lòng đăng nhập lại.`,`warning`),window.location.href=`/platform/login`),Promise.reject(e)}return t&&t>=500?(W(e.response?.data?.error||e.response?.data?.message||`Lỗi hệ thống (${t}). Vui lòng thử lại sau.`,`error`),Promise.reject(e)):(e.response||W(`Không thể kết nối đến server. Kiểm tra kết nối mạng.`,`warning`),Promise.reject(e))});var Gc=(0,K.createContext)(null);function Kc({children:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(()=>localStorage.getItem(`platform_token`)),[a,o]=(0,K.useState)(!0),[s,c]=(0,K.useState)(``),l=!!t&&!!r;(0,K.useEffect)(()=>{if(!r){o(!1);return}let e=!1;return Bc.get(`/auth/me`).then(t=>{e||n(t.data)}).catch(()=>{e||(localStorage.removeItem(`platform_token`),localStorage.removeItem(`platform_refreshToken`),i(null))}).finally(()=>{e||o(!1)}),()=>{e=!0}},[r]);let u=(0,K.useCallback)(async(e,t,r)=>{c(``);try{let{token:a,refreshToken:o,admin:s}=(await Bc.post(`/setup`,{fullName:e,email:t,password:r})).data;return localStorage.setItem(`platform_token`,a),o&&localStorage.setItem(`platform_refreshToken`,o),i(a),n(s),{ok:!0}}catch(e){let t=e.response?.data?.code;return e.response?.status===409&&t===`SUPERADMIN_EXISTS`?{ok:!1,alreadyExists:!0}:(c(e.response?.data?.error||`Thiết lập thất bại`),{ok:!1})}},[]),d=(0,K.useCallback)(async(e,t)=>{c(``);try{let{token:r,refreshToken:a,admin:o}=(await Bc.post(`/auth/login`,{email:e,password:t})).data;return localStorage.setItem(`platform_token`,r),a&&localStorage.setItem(`platform_refreshToken`,a),i(r),n(o),!0}catch(e){return c(e.response?.data?.error||`Đăng nhập thất bại`),!1}},[]),f=(0,K.useCallback)(async()=>{try{await Bc.post(`/auth/logout`)}catch{}localStorage.removeItem(`platform_token`),localStorage.removeItem(`platform_refreshToken`),i(null),n(null)},[]);return(0,q.jsx)(Gc.Provider,{value:{admin:t,token:r,isAuthenticated:l,loading:a,error:s,setup:u,login:d,logout:f},children:e})}function qc(){let e=(0,K.useContext)(Gc);if(!e)throw Error(`usePlatformAuth must be used within PlatformAuthProvider`);return e}
2function Jc({children:e}){let{isAuthenticated:t,loading:n,token:r}=qc();return n?(0,q.jsxs)(`div`,{className:`platform-loading-screen`,children:[(0,q.jsx)(`div`,{className:`spinner`}),(0,q.jsx)(`span`,{children:`Đang tải Platform Console...`})]}):t?(0,q.jsx)(q.Fragment,{children:e}):r?(0,q.jsxs)(`div`,{className:`platform-loading-screen`,children:[(0,q.jsx)(`div`,{style:{fontSize:40,marginBottom:12},children:`⚠️`}),(0,q.jsx)(`p`,{style:{fontWeight:600,marginBottom:8},children:`Không thể kết nối đến server`}),(0,q.jsx)(`button`,{className:`platform-btn platform-btn--primary`,onClick:()=>window.location.reload(),children:`Tải lại trang`})]}):(0,q.jsx)(u,{to:`/platform/login`,replace:!0})}var Yc=[{label:`Dashboard`,path:`/platform`,icon:T,exact:!0},{label:`Companies`,path:`/platform/companies`,icon:Pt},{label:`Gói cước`,path:`/platform/plans`,icon:he},{label:`Hoá đơn`,path:`/platform/invoices`,icon:we},{label:`Nhật ký thanh toán`,path:`/platform/ipn-logs`,icon:w},{label:`Tài chính`,path:`/platform/finance`,icon:dt},{label:`Giới thiệu`,path:`/platform/affiliate`,icon:ee},{label:`Nhật ký`,path:`/platform/audit-logs`,icon:Wt},{label:`Thương hiệu`,path:`/platform/branding`,icon:Mt},{label:`Email`,path:`/platform/email`,icon:$e},{label:`Cấu hình`,path:`/platform/config`,icon:Re}];function Xc(){let e=s(),t=d(),{admin:n,logout:r}=qc(),[i,a]=(0,K.useState)(!1),c=async()=>{await r(),t(`/platform/login`)},l=e=>{t(e),a(!1)},u=(n?.fullName||`SA`).split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase();return(0,q.jsxs)(`div`,{className:`platform-shell`,children:[(0,q.jsxs)(`header`,{className:`platform-mobile-bar`,children:[(0,q.jsx)(`button`,{className:`platform-mobile-bar__menu`,onClick:()=>a(!0),"aria-label":`Mở menu`,children:(0,q.jsx)(Lt,{size:20})}),(0,q.jsxs)(`div`,{className:`platform-mobile-bar__brand`,children:[(0,q.jsx)(Bt,{size:18}),(0,q.jsx)(`span`,{children:`Platform Console`})]})]}),i&&(0,q.jsx)(`div`,{className:`platform-sidebar-overlay`,onClick:()=>a(!1)}),(0,q.jsxs)(`aside`,{className:`platform-sidebar ${i?`platform-sidebar--open`:``}`,children:[(0,q.jsxs)(`div`,{className:`platform-sidebar__brand`,children:[(0,q.jsx)(Bt,{size:20,className:`platform-sidebar__brand-icon`}),(0,q.jsx)(`span`,{children:`Platform Console`}),(0,q.jsx)(`button`,{className:`platform-sidebar__close`,onClick:()=>a(!1),"aria-label":`Đóng menu`,children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsx)(`nav`,{className:`platform-sidebar__nav`,children:Yc.map(t=>{let n=t.icon;return(0,q.jsxs)(`button`,{className:`platform-sidebar__item ${(t.exact?e.pathname===t.path:e.pathname.startsWith(t.path))?`platform-sidebar__item--active`:``}`,onClick:()=>l(t.path),children:[(0,q.jsx)(n,{size:16}),(0,q.jsx)(`span`,{children:t.label})]},t.path)})}),(0,q.jsxs)(`div`,{className:`platform-sidebar__footer`,children:[(0,q.jsxs)(`div`,{className:`platform-sidebar__user`,children:[(0,q.jsx)(`div`,{className:`platform-sidebar__user-avatar`,children:u}),(0,q.jsxs)(`div`,{className:`platform-sidebar__user-info`,children:[(0,q.jsx)(`span`,{className:`platform-sidebar__user-name`,children:n?.fullName}),(0,q.jsx)(`span`,{className:`platform-sidebar__user-role`,children:`Super Admin`})]})]}),(0,q.jsx)(`button`,{className:`platform-sidebar__logout`,onClick:c,title:`Đăng xuất`,children:(0,q.jsx)(lt,{size:16})})]})]}),(0,q.jsx)(`main`,{className:`platform-main`,children:(0,q.jsx)(o,{})})]})}function Zc(e){return e?[{icon:xt,label:`Tin nhắn hôm nay`,value:e.messagesToday.toLocaleString(),trend:``,trendDir:``,sub:`Hôm nay`,iconBg:`#e8f0fe`,iconColor:`#2563eb`,route:`/conversations`},{icon:rt,label:`Chưa trả lời`,value:e.messagesUnreplied.toLocaleString(),trend:``,trendDir:e.messagesUnreplied>5?`up`:``,sub:e.messagesUnreplied>0?`Cần xử lý`:`Tất cả đã trả lời`,iconBg:`#fef3c7`,iconColor:`#f59e0b`,route:`/conversations`},{icon:$e,label:`Chưa đọc`,value:e.messagesUnread.toLocaleString(),trend:``,trendDir:``,sub:`Tin nhắn chưa xem`,iconBg:`#f1f5f9`,iconColor:`#64748b`,route:`/conversations`},{icon:Be,label:`Lịch hẹn hôm nay`,value:e.appointmentsToday.toLocaleStr
2ing(),trend:``,trendDir:``,sub:`Hôm nay`,iconBg:`#dcfce7`,iconColor:`#16a34a`,route:`/dashboard/appointments/today`},{icon:qt,label:`KH mới tuần này`,value:e.newContactsThisWeek.toLocaleString(),trend:e.newContactsThisWeek>0?`+${e.newContactsThisWeek}`:``,trendDir:e.newContactsThisWeek>0?`up`:``,sub:`Trong 7 ngày qua`,iconBg:`#fef2f2`,iconColor:`#ef4444`,route:`/customers`},{icon:Gt,label:`Tổng khách hàng`,value:e.totalContacts.toLocaleString(),trend:``,trendDir:``,sub:`Đang hoạt động`,iconBg:`#f3e8ff`,iconColor:`#9333ea`,route:`/customers`}]:[{icon:xt,label:`Tin nhắn hôm nay`,value:`—`,trend:``,trendDir:``,sub:`Đang tải...`,iconBg:`#e8f0fe`,iconColor:`#2563eb`,route:`/conversations`},{icon:rt,label:`Chưa trả lời`,value:`—`,trend:``,trendDir:``,sub:``,iconBg:`#fef3c7`,iconColor:`#f59e0b`,route:`/conversations`},{icon:$e,label:`Chưa đọc`,value:`—`,trend:``,trendDir:``,sub:``,iconBg:`#f1f5f9`,iconColor:`#64748b`,route:`/conversations`},{icon:Be,label:`Lịch hẹn hôm nay`,value:`—`,trend:``,trendDir:``,sub:``,iconBg:`#dcfce7`,iconColor:`#16a34a`,route:`/dashboard/appointments/today`},{icon:qt,label:`KH mới tuần này`,value:`—`,trend:``,trendDir:``,sub:``,iconBg:`#fef2f2`,iconColor:`#ef4444`,route:`/customers`},{icon:Gt,label:`Tổng khách hàng`,value:`—`,trend:``,trendDir:``,sub:``,iconBg:`#f3e8ff`,iconColor:`#9333ea`,route:`/customers`}]}function Qc({data:e=null}){let t=d();return(0,q.jsx)(`div`,{className:`kpi-grid`,children:Zc(e).map((e,n)=>{let r=e.icon;return(0,q.jsxs)(`div`,{className:`kpi-card`,style:{cursor:e.route?`pointer`:void 0},onClick:()=>e.route&&t(e.route),children:[(0,q.jsxs)(`div`,{className:`kpi-card__top`,children:[(0,q.jsx)(`div`,{className:`kpi-card__icon`,style:{background:e.iconBg,color:e.iconColor},children:(0,q.jsx)(r,{size:18})}),e.trend&&(0,q.jsxs)(`span`,{className:`kpi-card__trend kpi-card__trend--${e.trendDir}`,children:[e.trendDir===`up`?(0,q.jsx)(dt,{size:12}):(0,q.jsx)(ue,{size:12}),e.trend]})]}),(0,q.jsx)(`div`,{className:`kpi-card__label`,children:e.label}),(0,q.jsx)(`div`,{className:`kpi-card__value`,children:e.value}),(0,q.jsx)(`div`,{className:`kpi-card__sub`,children:e.sub})]},n)})})}bt.register(...Nt);function $c({data:e}){let t=(0,K.useRef)(null),n=(0,K.useRef)(null),r=e&&e.length>0,i=r?e.map(e=>e.date.slice(5)):[],a=r?e.map(e=>e.sent):[],o=r?e.map(e=>e.received):[],s=a.reduce((e,t)=>e+t,0)+o.reduce((e,t)=>e+t,0);return(0,K.useEffect)(()=>{if(!(!t.current||!r))return n.current&&n.current.destroy(),n.current=new bt(t.current,{type:`bar`,data:{labels:i,datasets:[{label:`Đã gửi`,data:a,backgroundColor:`#3b82f6`,borderRadius:3,barPercentage:.6},{label:`Đã nhận`,data:o,backgroundColor:`#93c5fd`,borderRadius:3,barPercentage:.6}]},options:{responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!1}},scales:{x:{grid:{display:!1},ticks:{font:{size:11},color:`#94a3b8`}},y:{grid:{color:`#f1f5f9`},ticks:{font:{size:11},color:`#94a3b8`},beginAtZero:!0}}}}),()=>{n.current?.destroy()}},[e]),(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`card__title`,children:`Tin nhắn theo ngày`}),(0,q.jsx)(`div`,{className:`card__subtitle`,children:r?`${i.length} ngày gần nhất · Tổng ${s.toLocaleString()} tin`:`Chưa có dữ liệu`})]}),(0,q.jsxs)(`div`,{className:`chart-legend`,children:[(0,q.jsxs)(`span`,{className:`chart-legend__item`,children:[(0,q.jsx)(`span`,{className:`chart-legend__dot`,style:{background:`#3b82f6`}}),` Đã gửi`]}),(0,q.jsxs)(`span`,{className:`chart-legend__item`,children:[(0,q.jsx)(`span`,{className:`chart-legend__dot`,style:{background:`#93c5fd`}}),` Đã nhận`]})]})]}),(0,q.jsx)(`div`,{style:{height:220},children:r?(0,q.jsx)(`canvas`,{ref:t}):(0,q.jsxs)(`div`,{className:`dashboard__empty-state`,style:{height:`100%`},children:[(0,q.jsx)(N,{size:36,color:`#94a3b8`}),(0,q.jsx)(`p`,{style:{color:`var(--gray-400)`,fontSize:13},children:`Chưa có tin nhắn nào trong 7 ngày qua`})]})})]})}function el({data:e}){let t=(()=>
2{if(!e||e.length===0)return ss.map(e=>({status:e.value,label:e.label,color:e.color,value:0,pct:0}));let t=e.map(e=>{let t=typeof e._count==`number`?e._count:e._count?._all??0,n=cs[e.status||``];return{status:e.status||``,label:n?.label||e.status||`Khác`,color:n?.color||`#94a3b8`,value:t,pct:0}}),n=Math.max(...t.map(e=>e.value),1);return t.forEach(e=>{e.pct=e.value/n*100}),t})(),n=t.reduce((e,t)=>e+t.value,0);return(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`card__title`,children:`Pipeline khách hàng`}),(0,q.jsxs)(`div`,{className:`card__subtitle`,children:[n.toLocaleString(),` khách hàng đang theo dõi`]})]}),(0,q.jsxs)(`span`,{className:`card__link`,children:[`Xem tất cả `,(0,q.jsx)(Xt,{size:14})]})]}),(0,q.jsx)(`div`,{children:t.map((e,t)=>(0,q.jsxs)(`div`,{className:`pipeline-bar`,children:[(0,q.jsxs)(`span`,{className:`pipeline-bar__label`,children:[(0,q.jsx)(`span`,{className:`pipeline-bar__dot`,style:{background:e.color}}),e.label]}),(0,q.jsx)(`div`,{className:`pipeline-bar__track`,children:(0,q.jsx)(`div`,{className:`pipeline-bar__fill`,style:{width:`${e.pct}%`,background:e.color}})}),(0,q.jsx)(`span`,{className:`pipeline-bar__value`,children:e.value})]},t))})]})}bt.register(...Nt);var tl={Zalo:`#3b82f6`,Facebook:`#1d4ed8`,Website:`#9333ea`,LinkedIn:`#0ea5e9`,Referral:`#16a34a`};function nl({data:e}){let t=(0,K.useRef)(null),n=(0,K.useRef)(null),r=!e||e.length===0?[{label:`Zalo`,value:0,color:`#3b82f6`},{label:`Facebook`,value:0,color:`#1d4ed8`},{label:`Website`,value:0,color:`#9333ea`},{label:`Khác`,value:0,color:`#1e293b`}]:e.map(e=>{let t=typeof e._count==`number`?e._count:e._count?._all??0;return{label:e.source||`Không rõ`,value:t,color:tl[e.source]||`#`+Math.floor(Math.random()*16777215).toString(16).padStart(6,`0`)}});return(0,K.useEffect)(()=>{if(t.current)return n.current&&n.current.destroy(),n.current=new bt(t.current,{type:`doughnut`,data:{labels:r.map(e=>e.label),datasets:[{data:r.map(e=>e.value),backgroundColor:r.map(e=>e.color),borderWidth:0}]},options:{responsive:!0,maintainAspectRatio:!1,cutout:`65%`,plugins:{legend:{display:!1}}}}),()=>{n.current?.destroy()}},[e]),(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsx)(`div`,{className:`card__header`,children:(0,q.jsx)(`div`,{className:`card__title`,children:`Nguồn khách hàng`})}),(0,q.jsxs)(`div`,{className:`donut-wrapper`,children:[(0,q.jsx)(`div`,{className:`donut-chart`,children:(0,q.jsx)(`canvas`,{ref:t})}),(0,q.jsx)(`div`,{className:`donut-legend`,children:r.map((e,t)=>(0,q.jsxs)(`div`,{className:`donut-legend__item`,children:[(0,q.jsx)(`span`,{className:`donut-legend__dot`,style:{background:e.color}}),(0,q.jsx)(`span`,{children:e.label}),(0,q.jsx)(`span`,{className:`donut-legend__value`,children:e.value})]},t))})]})]})}function rl(e){return e.split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase()}function il(e){switch(e){case`contact_created`:return`#16a34a`;case`contact_updated`:return`#f59e0b`;case`message_sent`:return`#3b82f6`;case`appointment`:return`#9333ea`;default:return`#94a3b8`}}function al(e){let t=new Date(e),n=Math.floor((Date.now()-t.getTime())/1e3);if(n<60)return`Vừa xong`;if(n<3600)return`${Math.floor(n/60)} phút trước`;if(n<86400)return`${Math.floor(n/3600)} giờ trước`;let r=Math.floor(n/86400);return r===1?`Hôm qua`:`${r} ngày trước`}function ol(){let e=d(),[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),a=(0,K.useCallback)(async()=>{i(!0);try{n((await G.get(`/activity`,{params:{limit:10}})).data.activities||[])}catch{n([])}finally{i(!1)}},[]);(0,K.useEffect)(()=>{a()},[a]);function o(t){t.type===`message_sent`?e(t.contactId?`/conversations?contactId=${t.contactId}`:`/conversations`):t.type===`contact_created`||t.type===`contact_updated`?e(`/customers`):t.type===`appointment`&&e(`/dashboard/appointments`)}return(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsx)(`div`,{className:`card__title`,children:`Hoạt động gần đây`}),(0,q.jsxs)(`span`,{className:`card__link`,onClick:a,style:{cursor:`pointer`},children:[(0,q.jsx)(Yt,{size:12,className:r?`spin`:``}),` Làm mới`]})]}),(0,q.jsxs)(`div`,{className:`activity-feed`,children:[t.length===0&&!r&&(0,q.jsx)(`div`,{style:{textAlign:`center`,padding:`20px 0`,color:`var(--gray-400)`,fontSize:13},children:`Chưa có hoạt động nào.`}),r&&t.length===0&&(0,q.jsx)(`div`,{style:{textAlign:`center`,padding:`20px 0`,color:`var(--gray-400)`,fontSize:13},children:`Đang tải...`}),t.map((e,t)=>(0,q.jsxs)(`div`,{className:`activity-item`,style:{cursor:`pointer`},onClick:()=>o(e),children:[(0,q.jsx)(`div`,{className:`activity-item__avatar`,
2style:{background:il(e.type),color:`#fff`},children:rl(e.name)}),(0,q.jsxs)(`div`,{className:`activity-item__text`,children:[(0,q.jsx)(`strong`,{children:e.name}),` `,e.action]}),(0,q.jsx)(`span`,{className:`activity-item__time`,children:al(e.time)})]},t))]})]})}var sl={unreplied:`Chờ trả lời`,quote_expiring:`Báo giá sắp hết hạn`,quote_unviewed:`Báo giá chưa mở`,contract_unsigned:`Hợp đồng chờ ký`,contract_expiring:`Hợp đồng sắp hết hạn`,pending_action:`AI chờ duyệt`,knowledge_gap:`AI thiếu kiến thức`,channel_down:`Kênh mất kết nối`,appointment:`Lịch hẹn`,credit_low:`Credit sắp cạn`,note:`Ngoài ra`},cl=Array.from({length:7},(e,t)=>5+t);function ll(e){let t=e??{},n=typeof t.digestHour==`number`&&Number.isInteger(t.digestHour)?t.digestHour:7;return{digestEnabled:typeof t.digestEnabled==`boolean`?t.digestEnabled:!0,digestHour:Math.min(11,Math.max(5,n)),digestEmail:t.digestEmail===!0}}function ul(e,t){return e?.response?.data?.error||t}function dl(e=!0){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(null),l=(0,K.useCallback)(async()=>{i(!0),c(null);try{n((await G.get(`/ai/digest/today`)).data)}catch(e){c(ul(e,`Không tải được bản tin sáng`))}finally{i(!1)}},[]),u=(0,K.useCallback)(async()=>{o(!0),c(null);try{let e=await G.post(`/ai/digest/run`);return n(e.data),e.data}catch(e){return c(ul(e,`Gá»­i bản tin thất bại`)),null}finally{o(!1)}},[]);return(0,K.useEffect)(()=>{e&&l()},[e,l]),{digest:t,loading:r,running:a,error:s,refresh:l,runNow:u}}var fl={scheduled:`Bản đã gá»­i`,adhoc:`Vừa tổng hợp`,manual:`Vừa gá»­i`};function pl(e){let[t,n,r]=e.split(`-`);return t&&n&&r?`${r}/${n}/${t}`:e}function ml(e,t){let n=new Date(e);if(Number.isNaN(n.getTime()))return``;let r=`Asia/Ho_Chi_Minh`;return n.toLocaleDateString(`en-CA`,{timeZone:r})===t?`hôm nay ${n.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`,timeZone:r})}`:`hạn ${n.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,timeZone:r})}`}function hl({item:e,index:t,today:n,onOpen:r}){let i=e.kind===`note`;return(0,q.jsxs)(`li`,{className:[`ai-digest__item`,i&&`ai-digest__item--note`,e.moneyAtStake&&`ai-digest__item--money`,!e.moneyAtStake&&e.windowClosesAt&&`ai-digest__item--window`].filter(Boolean).join(` `),children:[(0,q.jsx)(`div`,{className:`ai-digest__rank`,children:i?`+`:t+1}),(0,q.jsxs)(`div`,{className:`ai-digest__body`,children:[(0,q.jsxs)(`div`,{className:`ai-digest__headline`,children:[(0,q.jsx)(`span`,{children:e.headline}),!i&&(0,q.jsx)(`span`,{className:`ai-digest__kind`,children:sl[e.kind]??e.kind})]}),(0,q.jsx)(`div`,{className:`ai-digest__why`,children:e.whyItMatters})]}),(0,q.jsxs)(`div`,{className:`ai-digest__side`,children:[e.moneyAtStake?(0,q.jsxs)(`span`,{className:`ai-digest__money`,children:[Mn(e.moneyAtStake),`đ`]}):null,e.windowClosesAt?(0,q.jsx)(`span`,{className:`ai-digest__window`,children:ml(e.windowClosesAt,n)}):null,!i&&(0,q.jsxs)(`button`,{type:`button`,className:`ai-digest__open`,onClick:()=>r(e.link),children:[`Mở `,(0,q.jsx)(Xt,{size:12})]})]})]})}function gl({canRun:e}){let t=d(),{digest:n,loading:r,running:i,error:a,refresh:o,runNow:s}=dl(),c=async()=>{let e=await s();e?W(`Đã gá»­i bản tin cho ${e.notified??0} người${e.emailed?`, ${e.emailed} email`:``}`,`success`,3500):W(`Gá»­i bản tin thất bại`,`error`)};return(0,q.jsxs)(`section`,{className:`ai-digest`,"aria-label":`Việc cần chú ý sáng nay`,children:[(0,q.jsxs)(`div`,{className:`ai-digest__head`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`ai-digest__title`,children:[(0,q.jsx)(Qt,{size:18}),` Việc cần chú ý sáng nay`]}),(0,q.jsxs)(`div`,{className:`ai-digest__meta`,children:[n&&(0,q.jsx)(`span`,{children:pl(n.date)}),n?.source&&(0,q.jsx)(`span`,{className:`ai-digest__source`,children:fl[n.source]}),n&&n.stats.hidden>0&&(0,q.jsxs)(`span`,{children:[`· `,n.stats.hidden,` mục gộp`]})]})]}),(0,q.jsxs)(`div`,{className:`ai-digest__actions`,children:[(0,q.jsxs)(`button`,{type:`button`,className:`btn btn--outline`,onClick:()=>void o(),disabled:r||i,title:`Tổng hợp lại`,children:[(0,q.jsx)(Ye,{size:13}),` `,r?`Đang tải`:`Làm mới`]}),e&&(0,q.jsxs)(`button`,{type:`button`,className:`btn btn--primary`,onClick:()=>void c(),disabled:r||i,title:`Tạo thông báo + email (nếu bật) + tóm tá
2º¯t AI ngay bây giờ`,children:[(0,q.jsx)(Qe,{size:13}),` `,i?`Đang gá»­i...`:`Gá»­i ngay`]})]})]}),a&&!n&&(0,q.jsxs)(`div`,{className:`ai-digest__state ai-digest__state--error`,children:[(0,q.jsx)(v,{size:16}),` `,a]}),a&&n&&(0,q.jsxs)(`div`,{className:`ai-digest__state ai-digest__state--error`,children:[(0,q.jsx)(v,{size:16}),` `,a,` — đang hiện bản tổng hợp trước đó.`]}),!a&&!n&&r&&(0,q.jsx)(`div`,{className:`ai-digest__state`,children:`Đang tổng hợp việc cần chú ý...`}),n&&n.summary&&(0,q.jsx)(`p`,{className:`ai-digest__summary`,children:n.summary}),n&&n.items.length===0&&(0,q.jsxs)(`div`,{className:`ai-digest__empty`,children:[(0,q.jsx)(_e,{size:22}),(0,q.jsxs)(`div`,{children:[n.emptyMessage||`Hôm nay không có việc gấp`,(0,q.jsx)(`small`,{children:`Không có báo giá sắp hết hạn, hợp đồng chờ ký hay khách chờ trả lời quá 2 giờ.`})]})]}),n&&n.items.length>0&&(0,q.jsx)(`ol`,{className:`ai-digest__list`,children:n.items.map((e,r)=>(0,q.jsx)(hl,{item:e,index:r,today:n.date,onOpen:e=>t(e)},`${e.kind}-${e.refId}`))})]})}var _l=[{key:`channelConnected`,icon:xt,label:`Kênh khách nhắn tới`,desc:`Zalo cá nhân, Zalo OA hoặc Fanpage — không nối thì khách không có đường nhắn tới`,route:`/integrations`},{key:`hasKnowledgeItem`,icon:Vt,label:`Dữ liệu để AI trả lời`,desc:`Sản phẩm và kiến thức — AI chỉ trả lời được những gì có trong đây`,route:`/knowledge-base`},{key:`aiKeyReady`,icon:ft,label:`Khoá AI`,desc:`Chưa có khoá thì trợ lý AI không chạy được. Gói dùng khoá nền tảng thì bước này tá»± xong`,route:`/ai/setup`},{key:`aiBrainReady`,icon:Ge,label:`Dạy AI về đơn vị bạn`,desc:`Dán địa chỉ website — AI đọc rồi soạn sẵn persona, kịch bản, quy tắc chuyển người`,route:`/ai/setup?buoc=boNao`},{key:`aiTested`,icon:At,label:`Thá»­ một câu với AI`,desc:`Hỏi thá»­ vài câu khách hay hỏi, xem AI đáp thế nào và gọi công cụ gì`,route:`/ai/setup?buoc=daThu`},{key:`staffInvited`,icon:qt,label:`Mời một nhân viên`,desc:`Làm việc cùng đội nhóm`,route:`/settings/staff`}];function vl(){let e=d(),{user:t}=J(),[n,r]=(0,K.useState)(null),i=t?.role===`owner`||t?.role===`admin`;(0,K.useEffect)(()=>{i&&G.get(`/onboarding/status`).then(e=>r(e.data)).catch(()=>r(null))},[i]);async function a(){r(e=>e&&{...e,dismissed:!0});try{await G.post(`/onboarding/dismiss`)}catch{}}if(!i||!n||n.dismissed||n.allDone)return null;let o=Object.values(n.steps).filter(Boolean).length;return(0,q.jsxs)(`div`,{className:`card`,style:{marginBottom:20},children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`card__title`,children:`Bắt đầu với Bizino AI`}),(0,q.jsxs)(`div`,{className:`onboarding-checklist__note`,children:[`Bấm vào một dòng là tới thẳng chỗ làm việc đó. Bốn dòng liên quan tới AI cÅ©ng chính là các bước trong `,(0,q.jsx)(`strong`,{children:`Trợ lý AI → Bật trợ lý AI`}),`.`]})]}),(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:12},children:[(0,q.jsxs)(`span`,{className:`onboarding-checklist__progress`,children:[o,`/`,_l.length,` hoàn thành`]}),(0,q.jsx)(`button`,{className:`onboarding-checklist__dismiss`,onClick:a,"aria-label":`Ẩn danh sách việc cần làm`,children:(0,q.jsx)(U,{size:16})})]})]}),(0,q.jsx)(`div`,{className:`onboarding-checklist__list`,children:_l.map(({key:t,icon:r,label:i,desc:a,route:o})=>{let s=n.steps[t];return(0,q.jsxs)(`button`,{type:`button`,className:`onboarding-checklist__item ${s?`onboarding-checklist__item--done`:``}`,onClick:()=>e(o),children:[(0,q.jsx)(`span`,{className:`onboarding-checklist__check`,children:s?(0,q.jsx)(_e,{size:20,color:`var(--success)`}):(0,q.jsx)(De,{size:20,color:`var(--gray-300)`})}),(0,q.jsxs)(`span`,{className:`onboarding-checklist__body`,children:[(0,q.jsxs)(`div`,{className:`onboarding-checklist__label`,children:[(0,q.jsx)(r,{size:14,style:{marginRight:6,verticalAlign:-2}}),i]}),(0,q.jsx)(`div`,{className:`onboarding-checklist__desc`,children:a})]})]},t)})})]})}
2var yl=[{text:`Đã lên lịch`,value:`scheduled`},{text:`Hoàn thành`,value:`completed`},{text:`Đã huỷ`,value:`cancelled`},{text:`Vắng mặt`,value:`no_show`}],bl=[{text:`Tái khám`,value:`follow_up`},{text:`Khám mới`,value:`new_visit`},{text:`Tư vấn`,value:`consultation`},{text:`Khác`,value:`other`}];function xl(e){return yl.find(t=>t.value===e)?.text??e}function Sl(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)([]),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(0),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)({from:``,to:``,status:``,contactId:``}),m=(0,K.useRef)(f);m.current=f;let h=(0,K.useCallback)(async()=>{l(!0);try{let e=m.current,n=await G.get(`/appointments`,{params:{dateFrom:e.from||void 0,dateTo:e.to||void 0,status:e.status||void 0,contactId:e.contactId||void 0}});t(n.data.appointments??n.data),s(n.data.total??0)}catch(e){console.error(`Failed to fetch appointments:`,e)}finally{l(!1)}},[]),g=(0,K.useCallback)(async()=>{try{let e=await G.get(`/appointments/today`);r(e.data.appointments??e.data)}catch(e){console.error(`Failed to fetch today appointments:`,e)}},[]),_=(0,K.useCallback)(async()=>{try{let e=await G.get(`/appointments/upcoming`);a(e.data.appointments??e.data)}catch(e){console.error(`Failed to fetch upcoming appointments:`,e)}},[]),v=(0,K.useCallback)(async e=>{d(!0);try{return(await G.post(`/appointments`,e)).data}catch(e){return console.error(`Failed to create appointment:`,e),null}finally{d(!1)}},[]),y=(0,K.useCallback)(async(e,n)=>{d(!0);try{return await G.put(`/appointments/${e}`,n),t(t=>t.map(t=>t.id===e?{...t,...n}:t)),!0}catch(e){return console.error(`Failed to update appointment:`,e),!1}finally{d(!1)}},[]);return{appointments:e,todayAppointments:n,upcomingAppointments:i,total:o,loading:c,saving:u,filters:f,setFilters:p,fetchAppointments:h,fetchToday:g,fetchUpcoming:_,createAppointment:v,updateAppointment:y,deleteAppointment:(0,K.useCallback)(async e=>{try{return await G.delete(`/appointments/${e}`),t(t=>t.filter(t=>t.id!==e)),!0}catch(e){return console.error(`Failed to delete appointment:`,e),!1}},[]),markComplete:(0,K.useCallback)(e=>y(e,{status:`completed`}),[y]),cancelAppointment:(0,K.useCallback)(e=>y(e,{status:`cancelled`}),[y])}}var Cl={all:`Tất cả`,today:`Hôm nay`,upcoming:`Sắp tới`,overdue:`Quá hạn`,completed:`Hoàn thành`,cancelled:`Đã hủy`},wl=[{key:`all`,label:`Tất cả`,icon:Be},{key:`today`,label:`Hôm nay`,icon:Jt},{key:`upcoming`,label:`Sắp tới`,icon:V},{key:`overdue`,label:`Quá hạn`,icon:v},{key:`completed`,label:`Hoàn thành`,icon:_e},{key:`cancelled`,label:`Đã hủy`,icon:D}];function Tl({filter:e=`all`,onChangeFilter:t}){let n=d(),{appointments:r,todayAppointments:i,upcomingAppointments:a,loading:o,saving:s,fetchAppointments:c,fetchToday:l,fetchUpcoming:u,createAppointment:f,markComplete:p,cancelAppointment:m,setFilters:h}=Sl(),g=(0,K.useCallback)(e=>{t&&t(e)},[t]),[_,y]=(0,K.useState)(null),[b,x]=(0,K.useState)(``),[S,C]=(0,K.useState)(``),[w,T]=(0,K.useState)(!1),[E,O]=(0,K.useState)(null),[k,A]=(0,K.useState)(``),[j,M]=(0,K.useState)(`09:00`),[N,P]=(0,K.useState)(`follow_up`),[ee,te]=(0,K.useState)(``),[ne,F]=(0,K.useState)(``),[re,I]=(0,K.useState)([]),[ie,ae]=(0,K.useState)(!1),[oe,se]=(0,K.useState)(!1),L=(0,K.useRef)(void 0),ce=(0,K.useRef)(null),[le,ue]=(0,K.useState)([]),de=(0,K.useCallback)(async()=>{try{y((await G.get(`/appointments/stats`)).data)}catch(e){console.error(`Failed to fetch appointment stats:`,e)}},[]),fe=(0,K.useCallback)(async()=>{try{ue((await G.get(`/appointments/overdue`)).data.appointments??[])}catch(e){console.error(`Failed to fetch overdue:`,e)}},[]),R=(0,K.useCallback)(()=>{de(),l(),u(),c(),fe()},[de,l,u,c,fe]);(0,K.useEffect)(()=>{R()},[R]),(0,K.useEffect)(()=>{if(!ne||ne.length<1){I([]),se(!1);return}return clearTimeout(L.current),L.current=setTimeout(async()=>{ae(!0);try{let e=await G.get(`/contacts`,{params:{search:ne,limit:8}}),t=(e.data.contacts??e.data??[]).map(e=>({id:e.id,fullName:e.fullName,phone:e.phone,avatarUrl:e.avatarUrl}));I(t),se(t.length>0)}catch{I([])}finally{ae(!1)}},300),()=>clearTimeout(L.current)},[ne]),(0,K.useEffect)(()=>
2{if(!oe)return;let e=e=>{ce.current&&!ce.current.contains(e.target)&&se(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[oe]);let pe=()=>{h(e=>({...e,from:b,to:S})),c()},me=(()=>{switch(e){case`today`:return i;case`upcoming`:return a;case`overdue`:return le;case`completed`:return r.filter(e=>e.status===`completed`);case`cancelled`:return r.filter(e=>e.status===`cancelled`);default:return r}})(),he=(0,K.useCallback)(async()=>{k&&await f({contactId:E?.id||void 0,appointmentDate:k,appointmentTime:j,type:N,notes:ee||void 0,status:`scheduled`})&&(T(!1),O(null),F(``),A(``),M(`09:00`),P(`follow_up`),te(``),R())},[E,k,j,N,ee,f,R]),ge=(0,K.useCallback)(async(e,t)=>{t===`complete`?await p(e):await m(e),R()},[p,m,R]),ve=e=>{try{return new Date(e).toLocaleDateString(`vi-VN`,{weekday:`short`,day:`2-digit`,month:`2-digit`,year:`numeric`})}catch{return e}},ye=e=>e?e.split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase():`?`,be=e=>e.status===`scheduled`&&new Date(e.appointmentDate)<new Date(new Date().toDateString());return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`dashboard__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`dashboard__breadcrumb`,children:[`Tổng quan > Lịch hẹn > `,Cl[e]]}),(0,q.jsx)(`h1`,{className:`dashboard__greeting`,children:`📅 Lịch hẹn`}),(0,q.jsx)(`p`,{className:`dashboard__subtitle`,children:`Quản lý, theo dõi và nhắc nhở tự động lịch hẹn khách hàng.`})]}),(0,q.jsx)(`div`,{className:`dashboard__actions`,children:(0,q.jsxs)(`button`,{className:`btn btn--primary`,onClick:()=>T(!0),children:[(0,q.jsx)(B,{size:14}),` Tạo lịch hẹn`]})})]}),(0,q.jsx)(`div`,{style:{padding:`24px 24px 0`},children:(0,q.jsx)(`div`,{className:`appt-kpi-row`,children:[{key:`today`,label:`Hôm nay`,value:_?.today??0,icon:Jt,variant:`today`},{key:`upcoming`,label:`Sắp tới`,value:_?.upcoming??0,icon:V,variant:`upcoming`},{key:`completed`,label:`Hoàn thành`,value:_?.completed??0,icon:_e,variant:`completed`},{key:`overdue`,label:`Quá hạn`,value:_?.overdue??0,icon:v,variant:`overdue`},{key:`cancelled`,label:`Đã hủy`,value:_?.cancelled??0,icon:D,variant:`cancelled`}].map(t=>{let n=t.icon;return(0,q.jsxs)(`div`,{className:`appt-kpi-card appt-kpi-card--${t.variant} ${e===t.key?`appt-kpi-card--active`:``}`,onClick:()=>g(t.key),children:[(0,q.jsxs)(`div`,{className:`appt-kpi-card__header`,children:[(0,q.jsx)(`div`,{className:`appt-kpi-card__icon`,children:(0,q.jsx)(n,{size:16})}),t.label]}),(0,q.jsx)(`div`,{className:`appt-kpi-card__value`,children:t.value}),(0,q.jsx)(`div`,{className:`appt-kpi-card__label`,children:`lịch hẹn`})]},t.key)})})}),(0,q.jsxs)(`div`,{style:{padding:`0 24px`},children:[(0,q.jsx)(`div`,{className:`appt-tab-strip`,children:wl.map(t=>{let n=t.icon;return(0,q.jsxs)(`button`,{className:`appt-tab-strip__btn ${e===t.key?`appt-tab-strip__btn--active`:``}`,onClick:()=>g(t.key),children:[(0,q.jsx)(n,{size:14}),t.label]},t.key)})}),(0,q.jsxs)(`div`,{className:`appt-filter-bar`,children:[(0,q.jsxs)(`div`,{className:`appt-filter-bar__label`,children:[(0,q.jsx)(Le,{size:14}),` Lọc khoảng ngày`]}),(0,q.jsx)(`input`,{type:`date`,className:`appt-filter-bar__input`,value:b,onChange:e=>x(e.target.value),placeholder:`Từ ngày`}),(0,q.jsx)(`span`,{style:{color:`var(--gray-400)`,fontSize:13},children:`→`}),(0,q.jsx)(`input`,{type:`date`,className:`appt-filter-bar__input`,value:S,onChange:e=>C(e.target.value),placeholder:`Đến ngày`}),(0,q.jsxs)(`button`,{className:`appt-filter-bar__btn`,onClick:pe,children:[(0,q.jsx)(_t,{size:14}),` Áp dụng`]})]})]}),(0,q.jsx)(`div`,{style:{padding:`0 24px 24px`},children:(0,q.jsxs)(`div`,{className:`appt-table-card`,children:[(0,q.jsx)(`div`,{className:`appt-table-card__header`,children:(0,q.jsxs)(`div`,{className:`appt-table-card__title`,children:[(0,q.jsx)(Be,{size:16}),Cl[e],(0,q.jsx)(`span`,{className:`appt-table-card__count`,children:me.length})]})}),o&&me.length===0?(0,q.jsx)(`div`,{className:`appt-loading`,children:`Đang tải...`}):me.length===0?(0,q.jsxs)(`div`,{className:`appt-empty-state`,children:[(0,q.jsx)(Be,{size:48,color:`#cbd5e1`}),(0,q.jsxs)(`h3`,{children:[`Chưa có lịch hẹn nào`,e===`all`?``:` ${Cl[e].toLowerCase()}`]}),(0,q.jsx)(`p`,{children:`Nhấn "Tạo lịch hẹn" để bắt đầu.`}),(0,q.jsxs)(`button`,{className:`btn btn--primary`,onClick:()=>T(!0),style:{marginTop:8},children:[(0,q.jsx)(B,{size:14}),` Tạo lịch hẹn`]})]}):(0,q.jsx)(`div`,{style:{overflowX:`auto`}
2,children:(0,q.jsxs)(`table`,{className:`appt-table`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{children:[(0,q.jsx)(`th`,{style:{width:`25%`},children:`Khách hàng`}),(0,q.jsx)(`th`,{style:{width:`14%`},children:`Ngày hẹn`}),(0,q.jsx)(`th`,{style:{width:`12%`},children:`Loại`}),(0,q.jsx)(`th`,{style:{width:`10%`},children:`Trạng thái`}),(0,q.jsx)(`th`,{style:{width:`22%`},children:`Ghi chú`}),(0,q.jsx)(`th`,{style:{width:`120px`,textAlign:`center`},children:`Thao tác`})]})}),(0,q.jsx)(`tbody`,{children:me.map(e=>{let t=be(e),r=t?`overdue`:e.status,i=t?`Quá hạn`:xl(e.status);return(0,q.jsxs)(`tr`,{children:[(0,q.jsx)(`td`,{children:(0,q.jsxs)(`div`,{className:`appt-contact-cell`,children:[(0,q.jsx)(`div`,{className:`appt-contact-cell__avatar`,children:ye(e.contact?.fullName??null)}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{className:`appt-contact-cell__name`,children:e.contact?.fullName||`Khách hàng`}),e.contact?.phone&&(0,q.jsxs)(`div`,{className:`appt-contact-cell__phone`,children:[(0,q.jsx)(z,{size:10}),` `,pn(e.contact.phone)]})]})]})}),(0,q.jsx)(`td`,{children:(0,q.jsxs)(`div`,{className:`appt-date-cell`,children:[(0,q.jsx)(`div`,{className:`appt-date-cell__date`,children:ve(e.appointmentDate)}),(0,q.jsx)(`div`,{className:`appt-date-cell__time`,children:e.appointmentTime||`--:--`})]})}),(0,q.jsx)(`td`,{children:(0,q.jsxs)(`div`,{className:`appt-type-badge`,children:[(0,q.jsx)(zt,{size:12}),bl.find(t=>t.value===e.type)?.text||e.type]})}),(0,q.jsx)(`td`,{children:(0,q.jsx)(`span`,{className:`appt-status-badge appt-status-badge--${r}`,children:i})}),(0,q.jsx)(`td`,{children:(0,q.jsx)(`div`,{className:`appt-notes-cell`,title:e.notes||``,children:e.notes||`—`})}),(0,q.jsx)(`td`,{children:(0,q.jsxs)(`div`,{className:`appt-action-group`,style:{justifyContent:`center`},children:[e.contactId&&(0,q.jsx)(`button`,{className:`appt-action-btn appt-action-btn--chat`,onClick:()=>n(`/conversations?contactId=${e.contactId}`),title:`Nhắn tin`,children:(0,q.jsx)(xt,{size:14})}),(e.status===`scheduled`||t)&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{className:`appt-action-btn appt-action-btn--complete`,onClick:()=>ge(e.id,`complete`),title:`Hoàn thành`,children:(0,q.jsx)(_e,{size:14})}),(0,q.jsx)(`button`,{className:`appt-action-btn appt-action-btn--cancel`,onClick:()=>ge(e.id,`cancel`),title:`Hủy`,children:(0,q.jsx)(D,{size:14})})]})]})})]},e.id)})})]})})]})}),(0,q.jsx)(jc,{open:w,onClose:()=>T(!1),title:`Tạo lịch hẹn mới`,subtitle:`Thêm lịch hẹn với khách hàng`,width:480,footer:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{className:`drawer-btn drawer-btn--ghost`,onClick:()=>T(!1),children:`Hủy`}),(0,q.jsxs)(`button`,{className:`drawer-btn drawer-btn--primary`,onClick:he,disabled:s||!k,children:[(0,q.jsx)(B,{size:14}),` `,s?`Đang tạo...`:`Tạo lịch hẹn`]})]}),children:(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(qe,{size:14}),` Khách hàng`]}),E?(0,q.jsxs)(`div`,{className:`contact-selected`,children:[(0,q.jsx)(`div`,{className:`contact-selected__avatar`,children:ye(E.fullName)}),(0,q.jsxs)(`div`,{className:`contact-selected__info`,children:[(0,q.jsx)(`div`,{className:`contact-selected__name`,children:E.fullName||`Không tên`}),E.phone&&(0,q.jsxs)(`div`,{className:`contact-selected__phone`,children:[(0,q.jsx)(z,{size:10}),` `,pn(E.phone)]})]}),(0,q.jsx)(`button`,{className:`contact-selected__clear`,onClick:()=>{O(null),F(``)},children:(0,q.jsx)(U,{size:14})})]}):(0,q.jsxs)(`div`,{className:`contact-search-wrap`,ref:ce,children:[(0,q.jsxs)(`div`,{className:`contact-search-input-wrap`,children:[(0,q.jsx)(_t,{size:14,className:`contact-search-icon`}),(0,q.jsx)(`input`,{className:`form-input contact-search-input`,placeholder:`Tìm theo tên / SĐT...`,value:ne,onChange:e=>F(e.target.value),onFocus:()=>re.length>0&&se(!0)}),ie&&(0,q.jsx)(`span`,{className:`contact-search-spinner`,children:`⏳`})]}),oe&&(0,q.jsx)(`div`,{className:`contact-search-dropdown`,children:re.map(e=>(0,q.jsxs)(`div`,{className:`contact-search-option`,onClick:()=>{O(e),F(``),se(!1)},children:[(0,q.jsx)(`div`,{className:`contact-search-option__avatar`,children:ye(e.fullName)}),(0,q.jsxs)(`div`,{className:`contact-search-option__info`,children:[(0,q.jsx)(`div`,{className:`contact-search-option__name`,children:e.fullName||`Không tên`}),e.phone&&(0,q.jsx)(`div`,{className:`contact-search-option__phone`,children:pn(e.phone)})]})]},e.id))})]})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Be,{size:14}),` Ngày hẹn `,(0,q.jsx)(`span`,{className:`form-required`,children:`*`})]}),(0,q.jsx)(`input`,{className:`form-input`,type:`date`,value:k,onChange:e=>A(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Jt,{size:14}),` Giờ hẹn`]}),(0,q.jsx)(`input`,{className:`form-input`,type:`time`,value:j,onChange:e=>M(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(zt,{size:14}),` Loại`]}
2),(0,q.jsx)(`div`,{className:`form-select-wrap`,children:(0,q.jsx)(`select`,{className:`form-select`,value:N,onChange:e=>P(e.target.value),children:bl.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.text},e.value))})})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(zt,{size:14}),` Ghi chú`]}),(0,q.jsx)(`textarea`,{className:`form-textarea`,placeholder:`Ghi chú cho lịch hẹn...`,value:ee,onChange:e=>te(e.target.value),rows:3})]})]})})]})}function El(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)([]),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)([]),[c,l]=(0,K.useState)(!1);return{kpi:e,messageVolume:n,pipeline:i,sources:o,loading:c,fetchAll:(0,K.useCallback)(async()=>{l(!0);try{let[e,n,i,o]=await Promise.all([G.get(`/dashboard/kpi`),G.get(`/dashboard/message-volume`),G.get(`/dashboard/pipeline`),G.get(`/dashboard/sources`)]);t(e.data),r(n.data.data||n.data),a(i.data),s(o.data)}catch(e){console.error(`Dashboard fetch error:`,e)}finally{l(!1)}},[])}}var Dl=[`not_started`,`in_progress`,`testing`,`awaiting_feedback`,`complete`],Ol={not_started:`Chưa bắt đầu`,in_progress:`Đang tiến hành`,testing:`Đang kiểm tra`,awaiting_feedback:`Đang chờ phản hồi`,complete:`Hoàn thành`},kl={not_started:`grey`,in_progress:`blue`,testing:`purple`,awaiting_feedback:`amber`,complete:`green`},Al=[`low`,`medium`,`high`,`urgent`],jl={low:`Thấp`,medium:`Bình thường`,high:`Cao`,urgent:`Khẩn cấp`},Ml=[`contact`,`company`,`conversation`,`quote`,`contract`,`appointment`],Nl={contact:`Khách hàng`,company:`Công ty`,conversation:`Hội thoại`,quote:`Báo giá`,contract:`Hợp đồng`,appointment:`Lịch hẹn`},Pl=[`daily`,`weekly`,`monthly`,`quarterly`,`yearly`],Fl={daily:`Hằng ngày`,weekly:`Hằng tuần`,monthly:`Hằng tháng`,quarterly:`Hằng quý`,yearly:`Hằng năm`};function Il(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,year:`numeric`})}function Ll(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toISOString().slice(0,10)}function Rl(e,t){return!e||t===`complete`?!1:new Date(e).getTime()<Date.now()}function zl(){let e={};for(let t of Dl)e[t]={total:0,mine:0};return{byStatus:e,active:0}}function Bl(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(0),[i,a]=(0,K.useState)(zl),[o,s]=(0,K.useState)([]),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(null);return{tasks:e,total:n,counts:i,tags:o,loading:c,error:u,fetchTasks:(0,K.useCallback)(async e=>{l(!0),d(null);try{let n=await G.get(`/tasks`,{params:e});t(n.data.tasks),r(n.data.total)}catch(e){d(`Không tải được danh sách công việc`),console.error(`[tasks] fetch lỗi:`,e)}finally{l(!1)}},[]),fetchCounts:(0,K.useCallback)(async()=>{try{a((await G.get(`/tasks/counts`)).data)}catch(e){console.error(`[tasks] counts lỗi:`,e)}},[]),fetchTags:(0,K.useCallback)(async()=>{try{s((await G.get(`/tasks/tags`)).data.tags??[])}catch{s([])}},[]),getTask:(0,K.useCallback)(async e=>(await G.get(`/tasks/${e}`)).data,[]),createTask:(0,K.useCallback)(async e=>(await G.post(`/tasks`,e)).data,[]),updateTask:(0,K.useCallback)(async(e,n)=>{let r=await G.put(`/tasks/${e}`,n);return t(t=>t.map(t=>t.id===e?{...t,...r.data}:t)),r.data},[]),deleteTask:(0,K.useCallback)(async e=>{await G.delete(`/tasks/${e}`),t(t=>t.filter(t=>t.id!==e)),r(e=>Math.max(0,e-1))},[]),bulkAction:(0,K.useCallback)(async(e,t,n)=>(await G.post(`/tasks/bulk`,{ids:e,action:t,value:n})).data,[])}}var Vl=[{key:`conversation`,icon:xt,label:`Cuộc hội thoại mới`,route:`/conversations`},{key:`customer`,icon:qt,label:`Thêm khách hàng`,route:`/customers`},{key:`appointment`,icon:Be,label:`Tạo lịch hẹn`,route:`/dashboard/appointments`}],Hl=[`all`,`today`,`upcoming`,`overdue`,`completed`,`cancelled`],Ul=new Set([`dashboard`,`inbox`,`activity`,`tasks`,`appointments`]);function Wl(e){let t=e.replace(/^\/dashboard\/?/,``).split(`?`)[0].split(`/`).filter(Boolean),n=t[0]&&Ul.has(t[0])?t[0]:`dashboard`,r=t[1];return{section:n,apptFilter:r&&Hl.includes(r)?r:`all`}}function Gl(){Ii();let e=d(),t=s(),{section:n,apptFilter:r}=(0,K.useMemo)(()=>Wl(t.pathname),[t.pathname]),{kpi:i,messageVolume:a,pipeline:o,sources:c,fetchAll:l}=El(),{user:u}=J(),[f,p]=(0,K.useState)(0),[m,h]=(0,K.useState)([]),[g,_]=(0,K.useState)(0),{tasks:y,counts:b,loading:x,fetchTasks:S,fetchCounts:C,createTask:w,updateTask:E,deleteTask:D}=Bl(),[O,k]=(0,K.useState)(``),[A,M]=(0,K.useState)(`all`),[N,P]=(0,K.useState)(!1),ee=(0,K.useRef)(null);(0,K.useEffect)(()=>
2{l()},[l]),(0,K.useEffect)(()=>{G.get(`/conversations/counts`).then(e=>p(e.data.unread??0)).catch(()=>{}),G.get(`/appointments/stats`).then(e=>_(e.data.today??0)).catch(()=>{}),C()},[]),(0,K.useEffect)(()=>{n===`inbox`&&G.get(`/conversations`,{params:{limit:20,page:1}}).then(e=>{h((e.data.conversations??e.data??[]).filter(e=>e.unreadCount>0).map(e=>({id:e.id,contactId:e.contact?.id||e.contactId,contactName:e.contact?.fullName||`Khách hàng`,lastMessage:e.messages?.[0]?.content||`Tin nhắn mới`,time:e.lastMessageAt||e.messages?.[0]?.sentAt||``,unreadCount:e.unreadCount})))}).catch(()=>{})},[n]),(0,K.useEffect)(()=>{if(n!==`tasks`)return;let e={limit:50};A===`todo`?e.status=`not_started`:A===`done`&&(e.status=`complete`),S(e)},[n,A,S]),(0,K.useEffect)(()=>{if(!N)return;let e=e=>{ee.current&&!ee.current.contains(e.target)&&P(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[N]);let te=(0,K.useMemo)(()=>[{key:`dashboard`,icon:T,label:`Dashboard`},{key:`inbox`,icon:pe,label:`Hộp thư tổng hợp`,badge:f},{key:`activity`,icon:Jt,label:`Hoạt động gần đây`},{key:`tasks`,icon:j,label:`Việc cần làm`,badge:b.active},{key:`appointments`,icon:Be,label:`Lịch hẹn`,badge:g}],[f,b.active,g]),ne=(0,K.useCallback)(t=>{e(t===`dashboard`?`/dashboard`:`/dashboard/${t}`)},[e]),re=(0,K.useCallback)(t=>{e(t===`all`?`/dashboard/appointments`:`/dashboard/appointments/${t}`)},[e]),I=()=>{if(!i)return alert(`Đang tải dữ liệu, vui lòng thử lại.`);let e=[[`Chỉ số`,`Giá trị`],[`Tin nhắn hôm nay`,String(i.messagesToday)],[`Chưa trả lời`,String(i.messagesUnreplied)],[`Chưa đọc`,String(i.messagesUnread)],[`Lịch hẹn hôm nay`,String(i.appointmentsToday)],[`KH mới tuần này`,String(i.newContactsThisWeek)],[`Tổng khách hàng`,String(i.totalContacts)]].map(e=>e.join(`,`)).join(`
3`),t=new Blob([``+e],{type:`text/csv;charset=utf-8;`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`bizino-dashboard-${new Date().toISOString().slice(0,10)}.csv`,r.click(),URL.revokeObjectURL(n)};function ie(e){if(!e)return``;let t=Math.floor((Date.now()-new Date(e).getTime())/1e3);return t<60?`Vừa xong`:t<3600?`${Math.floor(t/60)}p`:t<86400?`${Math.floor(t/3600)}h`:`${Math.floor(t/86400)}d`}return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Dc,{title:`Tổng quan`,titleIcon:L,items:te,activeKey:n,onChange:ne}),(0,q.jsxs)(`main`,{className:`layout__content`,children:[n!==`appointments`&&(0,q.jsxs)(`div`,{className:`dashboard__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{className:`dashboard__breadcrumb`,children:[`Tổng quan > `,te.find(e=>e.key===n)?.label]}),(0,q.jsxs)(`h1`,{className:`dashboard__greeting`,children:[`Xin chào, `,u?.fullName||`bạn`,` 👋`]}),(0,q.jsx)(`p`,{className:`dashboard__subtitle`,children:`Đây là tổng quan hoạt động hôm nay của bạn.`})]}),(0,q.jsxs)(`div`,{className:`dashboard__actions`,children:[(0,q.jsxs)(`button`,{className:`btn btn--outline`,onClick:I,children:[(0,q.jsx)(Ut,{size:14}),` Xuất báo cáo`]}),(0,q.jsxs)(`div`,{className:`dashboard__quick-add-wrap`,ref:ee,children:[(0,q.jsxs)(`button`,{className:`btn btn--primary`,onClick:()=>P(e=>!e),children:[(0,q.jsx)(B,{size:14}),` Thêm nhanh`]}
3),N&&(0,q.jsx)(`div`,{className:`dashboard__quick-add-dropdown`,children:Vl.map(t=>{let n=t.icon;return(0,q.jsxs)(`div`,{className:`dashboard__quick-add-option`,onClick:()=>{e(t.route),P(!1)},children:[(0,q.jsx)(n,{size:14}),(0,q.jsx)(`span`,{children:t.label})]},t.key)})})]})]})]}),n===`dashboard`&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(vl,{}),[`owner`,`admin`,`manager`].includes(u?.role??``)&&(0,q.jsx)(gl,{canRun:[`owner`,`admin`].includes(u?.role??``)}),(0,q.jsx)(Qc,{data:i}),(0,q.jsxs)(`div`,{className:`chart-row`,children:[(0,q.jsx)($c,{data:a}),(0,q.jsx)(el,{data:o})]}),(0,q.jsxs)(`div`,{className:`chart-row`,children:[(0,q.jsx)(nl,{data:c}),(0,q.jsx)(ol,{})]})]}),n===`inbox`&&(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsx)(`div`,{className:`card__title`,children:`Hộp thư tổng hợp`}),(0,q.jsxs)(`span`,{className:`card__subtitle`,children:[f,` tin nhắn chưa đọc`]})]}),m.length===0?(0,q.jsxs)(`div`,{className:`dashboard__empty-state`,children:[(0,q.jsx)(pe,{size:48,color:`#94a3b8`}),(0,q.jsx)(`h3`,{children:`Không có tin nhắn chưa đọc`}),(0,q.jsx)(`p`,{children:`Tất cả tin nhắn đã được xử lý.`})]}):(0,q.jsxs)(`div`,{className:`dashboard__inbox-list`,children:[m.map(t=>(0,q.jsxs)(`div`,{className:`dashboard__inbox-item`,style:{cursor:`pointer`},onClick:()=>e(t.contactId?`/conversations?contactId=${t.contactId}`:`/conversations`),children:[(0,q.jsx)(`div`,{className:`dashboard__inbox-avatar`,children:t.contactName.split(` `).map(e=>e[0]).slice(0,2).join(``).toUpperCase()}),(0,q.jsxs)(`div`,{className:`dashboard__inbox-body`,children:[(0,q.jsx)(`div`,{className:`dashboard__inbox-name`,children:t.contactName}),(0,q.jsx)(`div`,{className:`dashboard__inbox-preview`,children:t.lastMessage.slice(0,60)})]}),(0,q.jsxs)(`div`,{className:`dashboard__inbox-meta`,children:[(0,q.jsx)(`span`,{className:`dashboard__inbox-time`,children:ie(t.time)}),t.unreadCount>0&&(0,q.jsx)(`span`,{className:`dashboard__inbox-badge`,children:t.unreadCount})]})]},t.id)),(0,q.jsx)(`button`,{className:`dashboard__inbox-viewall`,onClick:()=>e(`/conversations`),children:`Xem tất cả hội thoại →`})]})]}),n===`activity`&&(0,q.jsx)(`div`,{className:`chart-row`,style:{display:`block`},children:(0,q.jsx)(ol,{})}),n===`tasks`&&(0,q.jsxs)(`div`,{className:`card`,children:[(0,q.jsxs)(`div`,{className:`card__header`,children:[(0,q.jsxs)(`div`,{className:`card__title`,children:[`Việc cần làm`,(0,q.jsx)(`button`,{type:`button`,className:`dashboard__task-more`,onClick:()=>e(`/tasks`),children:`Mở trang Công việc →`})]}),(0,q.jsx)(`div`,{className:`dashboard__task-filters`,children:[`all`,`todo`,`done`].map(e=>(0,q.jsx)(`button`,{className:`dashboard__task-filter ${A===e?`dashboard__task-filter--active`:``}`,onClick:()=>M(e),children:e===`all`?`Tất cả`:e===`todo`?`Cần làm`:`Hoàn thành`},e))})]}),(0,q.jsxs)(`form`,{className:`dashboard__task-create`,onSubmit:async e=>{e.preventDefault(),O.trim()&&(await w({title:O.trim()}),k(``),C())},children:[(0,q.jsx)(B,{size:16,color:`#94a3b8`}),(0,q.jsx)(`input`,{className:`dashboard__task-input`,placeholder:`Thêm việc cần làm...`,value:O,onChange:e=>k(e.target.value)})]}),y.length===0&&!x?(0,q.jsxs)(`div`,{className:`dashboard__empty-state`,children:[(0,q.jsx)(j,{size:48,color:`#94a3b8`}),(0,q.jsx)(`h3`,{children:`Chưa có việc cần làm`}),(0,q.jsx)(`p`,{children:`Thêm việc mới ở ô bên trên.`})]}):(0,q.jsx)(`div`,{className:`dashboard__task-list`,children:y.map(e=>(0,q.jsxs)(`div`,{className:`dashboard__task-item ${e.status===`complete`?`dashboard__task-item--done`:``}`,children:[(0,q.jsx)(`button`,{className:`dashboard__task-check`,onClick:async()=>{await E(e.id,{status:e.status===`complete`?`not_started`:`complete`}),C()},children:e.status===`complete`?(0,q.jsx)(_e,{size:18,color:`#22c55e`}):(0,q.jsx)(De,{size:18,color:`#cbd5e1`})}),(0,q.jsxs)(`div`,{className:`dashboard__task-body`,children:[(0,q.jsx)(`span`,{className:`dashboard__task-title`,children:e.title}),(0,q.jsxs)(`div`,{className:`dashboard__task-meta`,children:[e.priority!==`medium`&&(0,q.jsxs)(`span`,{className:`dashboard__task-priority dashboard__task-priority--${e.priority}`,children:[e.priority===`urgent`&&(0,q.jsx)(v,{size:10}),e.priority===`high`&&(0,q.jsx)(F,{size:10}),e.priority===`low`&&(0,q.jsx)(be,{size:10}),e.priority]}),e.dueDate&&(0,q.jsx)(`span`,{className:`dashboard__task-due`,children:new Date(e.dueDate).toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`})}),e.assignees.length>0&&(0,q.jsx)(`span`,{className:`dashboard__task-assignee`,children:e.assignees.map(e=>e.user.fullName).join(`, `)})]})]}),(0,q.jsx)(`button`,{className:`dashboard__task-delete`,onClick:async()=>{await D(e.id),C()},children:(0,q.jsx)(R,{size:14})})]},e.id))})]}),n===`appointments`&&(0,q.jsx)(Tl,{filter:r,onChangeFilter:re})]})]})}var Kl=`ai-sandbox-`,ql={zalo:`/platform/zalo.png`,zalo_oa:`/platform/zalo_oa.png`,zalo_personal:`/platform/zalo.png`,facebook:`/platform/facebook.png`,messenger:`/platform/messenger.png`,instagram:`/platform/instagram.png`,telegram:`/platform/telegram.png`,whatsapp:`/platform/whatsapp.png`,line:`/platform/line.png`,tiktok:`/platform/tiktok.png`,shopee:`/platform/shopee_official.png`,lazada:`/platform/lazada.png`,email:`/platform/icon_email.png`,gmail:`/platform/gmail.png`,google:`/platform/google.png`,webhook:`/platform/webhook.jpg`,pancake:`/platform/pancake.png`,pancake_fb:`/platform/facebook.png`,pancake_ig:`/platform/instagram.png`,pancake_tiktok:`/platform/tiktok.png`};function Jl({platform:e,size:t=16,className:n,style:r}){if(e===`sandbox`)return(0,q.jsx)(ye,{size:t,className:n,style:{color:`#7c3aed`,flexShrink:0,...r}});if(e===`webchat`)return(0,q.jsx)(M,{size:t,className:n,style:{color:`#2563eb`,flexShrink:0,...r}});if(e===`linkedin`)return(0,q.jsx)(Pt,{size:t,className:n,style:{color:`#0a66c2`,flexShrink:0,...r}});let i=ql[e];return i?(0,q.jsx)(`img`,{src:i,alt:e,width:t,height:t,className:n,style:{borderRadius:t>20?6:3,objectFit:`contain`,flexShrink:0,...r}}):null}function Yl(e){return e?e.externalUid?.startsWith(Kl)?`sandbox`:e.platform===20?`webchat`:e.platform===1?`zalo_oa`:e.platform===2?`zalo_personal`:e.platform===10?`facebook`:Pn(e.platform)?`whatsapp`:Xl(e.platform)?Zl(e.platform):e.externalPageId?`zalo_oa`:`zalo`:`zalo`}function Xl(e){return typeof e==`number`?e>=30&&e<=39:!1}function Zl(e){return e===30?`pancake_fb`:e===31?`pancake_ig`:e===32?`pancake_tiktok`:`pancake`}function Ql(e){return e?e.externalUid?.startsWith(Kl)?`AI Sandbox`:e.platform===20?`Web Chat`:e.platform===1?`Zalo OA`:e.platform===2?`Zalo Cá nhân`:e.platform===10?`Facebook Page`:Pn(e.platform)?In[e.platform]:e.platform===30?`Pancake (Facebook)`:e.platform===31?`Pancake (Instagram)`:e.platform===32?`Pancake (TikTok)`:Xl(e.platform)?`Pancake`:`Zalo`:`Zalo`}function $l(e){let t=e,n=t?.response?.status,r=t?.response?.data?.code;return r===`CHANNEL_NOT_GRANTED`?{title:`Bạn chưa được cấp quyền xem kênh của hội thoại này`,hint:`Hội thoại có thật trong công ty bạn. Nhờ chủ sở hữu hoặc quản trị viên cấp quyền kênh cho tài khoản của bạn.`}
3:r===`RETENTION_HIDDEN`?{title:t?.response?.data?.error||`Hội thoại này nằm ngoài hạn lưu trữ của gói hiện tại`,hint:`Dữ liệu vẫn còn nguyên — nâng gói là xem lại được ngay.`}:n===403||n===404?{title:`Không mở được hội thoại này`,hint:`Hội thoại không tồn tại, đã bị xoá, hoặc thuộc một tài khoản/công ty khác. Kiểm tra lại đường dẫn, hoặc đăng nhập đúng tài khoản đang giữ hội thoại đó.`}:n===401?{title:`Phiên đăng nhập đã hết hạn`,hint:`Đăng nhập lại rồi mở đường dẫn này một lần nữa.`}:{title:`Không tải được hội thoại`,hint:`Kiểm tra kết nối mạng rồi thử lại. Nếu vẫn lỗi, báo cho quản trị viên.`}}var eu={unread:{unread:`true`},unreplied:{unreplied:`true`},mine:{assignedToMe:`true`},pinned:{pinned:`true`},auto:{aiMode:`auto`}},tu=300;function nu(e,t,n){return{search:e||void 0,accountId:t||void 0,...eu[n]}}function ru(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(null),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),[m,h]=(0,K.useState)(!1),[g,_]=(0,K.useState)(``),[v,y]=(0,K.useState)(null),[b,x]=(0,K.useState)(`all`),[S,C]=(0,K.useState)(``);(0,K.useEffect)(()=>{let e=setTimeout(()=>C(g),tu);return()=>clearTimeout(e)},[g]);let w=S.trim(),T=(0,K.useRef)(0),E=(0,K.useRef)(!1),[,D]=(0,K.useState)(1),[O,k]=(0,K.useState)(0),[,A]=(0,K.useState)(1),[j,M]=(0,K.useState)(0),[N,P]=(0,K.useState)(null),[ee,te]=(0,K.useState)(!1),[ne,F]=(0,K.useState)(null),re=(0,K.useRef)(1),I=(0,K.useRef)(1),ie=(0,K.useRef)(!1),ae=(0,K.useRef)(!1),oe=(0,K.useRef)(null),[se,L]=(0,K.useState)(``),[ce]=(0,K.useState)(!1),[le,ue]=(0,K.useState)(null),[de,fe]=(0,K.useState)({}),R=(0,K.useRef)(n);R.current=n;let pe=(0,K.useRef)(e);pe.current=e;let z=(0,K.useRef)(null),me=(0,K.useCallback)(e=>{let t=z.current;return!t||e.some(e=>e.id===t.id)?e:[t,...e]},[]),he=(0,K.useRef)(w),ge=(0,K.useRef)(v),B=(0,K.useRef)(b);(0,K.useEffect)(()=>{he.current=w,ge.current=v,B.current=b},[w,v,b]);let _e=e.find(e=>e.id===n)||null,{joinConv:ve,leaveConv:ye,on:V,connected:be,emitTypingStart:xe,emitTypingStop:Se}=lr(),[Ce,we]=(0,K.useState)([]),[Te,Ee]=(0,K.useState)({}),De=(0,K.useRef)({}),Oe=(0,K.useCallback)(e=>{let t=De.current[e];t&&(clearTimeout(t),delete De.current[e]),Ee(t=>{if(!t[e])return t;let n={...t};return delete n[e],n})},[]),[ke,Ae]=(0,K.useState)(null),[je,Me]=(0,K.useState)({}),[H,Ne]=(0,K.useState)({});(0,K.useEffect)(()=>{let e=[V(`chat:message`,e=>{let n=e.conversationId,r=n===R.current;r&&a(t=>t.find(t=>t.id===e.id)?t:[...t,e]),n&&Oe(n);let i={id:e.id,content:e.content,contentType:e.contentType,senderType:e.senderType,senderName:e.senderName,sentAt:e.sentAt,isDeleted:e.isDeleted};t(t=>t.map(t=>t.id===n?{...t,lastMessageAt:e.sentAt,unreadCount:r?0:t.unreadCount+1,messages:[i],isReplied:e.senderType===`self`?!0:t.isReplied}:t))}),V(`chat:message-updated`,({messageId:e,updates:t})=>{a(n=>n.map(n=>n.id===e?{...n,...t,isError:!1}:n))}),V(`chat:deleted`,({messageId:e})=>{a(t=>t.map(t=>t.id===e?{...t,isDeleted:!0}:t))}),V(`chat:zns-status`,({messageId:e,status:t,deliveredAt:n})=>{a(r=>r.map(r=>r.id===e?{...r,znsLog:{status:t,deliveredAt:n??r.znsLog?.deliveredAt??null}}:r))}),V(`chat:conv-updated`,()=>{let e=Math.max(30,I.current*30),n=T.current,r=I.current;G.get(`/conversations`,{params:{limit:e,page:1,...nu(he.current,ge.current,B.current)}}).then(e=>{n!==T.current||r!==I.current||(t(me(e.data.conversations??e.data)),M(e.data.total??0))}).catch(()=>{})}),V(`chat:pinned`,({convId:e})=>{t(t=>t.map(t=>t.id===e?{...t,isPinned:!0}:t))}),V(`chat:unpinned`,({convId:e})=>{t(t=>t.map(t=>t.id===e?{...t,isPinned:!1}:t))}),V(`chat:conv-deleted`,({convId:e})=>{z.current?.id===e&&(z.current=null),t(t=>t.filter(t=>t.id!==e)),r(t=>t===e?null:t)}),V(`chat:ai-mode-changed`,({convId:e,aiMode:n,aiModeReason:r})=>{t(t=>t.map(t=>t.id===e?{...t,aiMode:n,aiModeReason:r??null}:t))}),V(`chat:ai-draft`,e=>{fe(t=>({...t,[e.convId]:e}))}),V(`typing:start`,e=>{we(t=>t.find(t=>t.userId===e.userId&&t.convId===e.convId)?t:[...t,e])}),V(`typing:stop`,({convId:e,userId:t})=>{we(n=>n.filter(n=>!(n.userId===t&&n.convId===e)))}),V(`chat:ai-typing`,({convId:e,isTyping:t})=>{if(!e)return;if(!t){Oe(e);return}Ee(t=>t[e]?t:{...t,[e]:!0});let n=De.current[e];n&&clearTimeout(n),De.current[e]=setTimeout(()=>Oe(e),45e3)}),V(`chat:send-error`,e=>{Ae(e),e.messageId&&Me(t=>({...t,[e.messageId]:e.reason})),setTimeout(()=>Ae(null),6e3)}),V(`chat:seen`,e=>{Ne(t=>({...t,[e.threadId]:{msgId:e.msgId,seenUids:e.seenUids}}))}),V(`chat:reaction-sync`,e=>{a(t=>t.map(t=>{if(t.id!==e.messageId)return t;let n=(t.reactions||[]).map(e=>({...e}));if(e.action===`removed`)n=n.map(t=>t.emoji===e.emoji?{...t,count:Math.max(0,t.count-1)}:t).filter(e=>e.count>0);else{let t=n.findIndex(t=>t.emoji===e.emoji);n=t>=0?n.map((e,n)=>n===t?{...e,count:e.count+1}:e):[...n,{emoji:e.emoji,count:1,reacted:!1}]}return{...t,reactions:n}}))})];return()=>
3e.forEach(e=>e?.())},[V,Oe,me]);function Pe(){L(``),ue(null)}let Fe=(0,K.useCallback)(async()=>{let e=++T.current;E.current=!0,s(!0);try{let n=await G.get(`/conversations`,{params:{limit:30,page:1,...nu(w,v,b)}});if(e!==T.current)return;t(me(n.data.conversations??n.data)),M(n.data.total??0),P(n.data.retention??null),te(n.data.noChannelAccess===!0),A(1),I.current=1}catch(t){e===T.current&&console.error(`Failed to fetch conversations:`,t)}finally{e===T.current&&(E.current=!1,s(!1))}},[w,v,b,me]),Ie=(0,K.useCallback)(async()=>{if(ae.current||E.current)return;ae.current=!0,p(!0);let e=I.current+1,n=T.current;try{let r=await G.get(`/conversations`,{params:{limit:30,page:e,...nu(w,v,b)}});if(n!==T.current)return;let i=r.data.conversations??r.data;i.length>0&&(t(e=>{let t=new Set(e.map(e=>e.id));return[...e,...i.filter(e=>!t.has(e.id))]}),A(e),I.current=e)}catch(e){console.error(`Failed to load more conversations:`,e)}finally{ae.current=!1,p(!1)}},[w,v,b]),Le=e.length<j,Re=(0,K.useCallback)(async e=>{l(!0),D(1),re.current=1;try{let t=await G.get(`/conversations/${e}/messages`,{params:{limit:50,page:1}}),n=t.data.messages??t.data;a(n),k(t.data.total??0),oe.current=n.length>0?n[n.length-1].id:null}catch(e){console.error(`Failed to fetch messages:`,e),a([]),k(0),oe.current=null,F($l(e))}finally{l(!1)}},[]),ze=(0,K.useCallback)(async()=>{let e=R.current;if(!e||ie.current)return;ie.current=!0,d(!0);let t=re.current+1;try{let n=await G.get(`/conversations/${e}/messages`,{params:{limit:50,page:t}}),r=n.data.messages??n.data;r.length>0&&(a(e=>[...r,...e]),D(t),re.current=t)}catch(e){console.error(`Failed to load more messages:`,e)}finally{ie.current=!1,d(!1)}},[]),Be=i.length<O,Ve=(0,K.useCallback)(async e=>{if(R.current&&R.current!==e&&ye(R.current),F(null),pe.current.some(t=>t.id===e))z.current=null;else try{let n=await G.get(`/conversations/${e}`);z.current=n.data,t(t=>t.some(t=>t.id===e)?t:[n.data,...t])}catch(e){console.error(`Failed to open conversation:`,e),F($l(e));return}r(e),Pe(),await Re(e),ve(e);try{await G.post(`/conversations/${e}/mark-read`),t(t=>t.map(t=>t.id===e?{...t,unreadCount:0}:t))}catch{}},[Re]),He=(0,K.useCallback)(async e=>{F(null);try{let t=await G.get(`/conversations`,{params:{contactId:e,limit:1}}),n=t.data.conversations??t.data;if(n&&n.length>0){Ve(n[0].id);return}F({title:`Liên hệ này chưa có hội thoại nào`,hint:`Khi khách nhắn tin qua Zalo, Zalo OA hoặc Fanpage, hội thoại sẽ hiện ở đây.`})}catch(e){console.error(`Failed to select conversation by contact:`,e),F($l(e))}},[Ve]),Ue=(0,K.useCallback)(e=>{!e?.id||e.sentViaZalo!==!1||Me(t=>({...t,[e.id]:e.zaloError||`Chưa gửi được tới khách`}))},[]),We=(0,K.useCallback)(async(e,t,n)=>{let r=R.current;if(!(!r||!e.trim())){h(!0);try{let i={content:e};t&&(i.replyMessageId=t),n&&(i.source=n);let o=await G.post(`/conversations/${r}/messages`,i);Ue(o.data),a(e=>e.find(e=>e.id===o.data.id)?e:[...e,o.data])}catch(e){throw console.error(`Failed to send message:`,e),e}finally{h(!1)}}},[Ue]),Ge=(0,K.useCallback)(async(e,t)=>{let n=R.current;if(!(!n||!e)){h(!0);try{let r=new FormData;r.append(`file`,e),t&&r.append(`caption`,t);let i=e.type.startsWith(`image/`)?`/conversations/${n}/messages/image`:`/conversations/${n}/messages/file`,o=await G.post(i,r,{headers:{"Content-Type":`multipart/form-data`}});Ue(o.data),o.data?.sentViaZalo===!1&&o.data?.zaloError&&(Ae({convId:n,messageId:o.data.id,reason:o.data.zaloError}),setTimeout(()=>Ae(null),6e3)),a(e=>e.find(e=>e.id===o.data.id)?e:[...e,o.data])}catch(e){throw console.error(`Failed to send attachment:`,e),e}finally{h(!1)}}},[Ue]),Ke=(0,K.useCallback)(async n=>{try{let r=e.find(e=>e.id===n)?.isPinned?`unpin`:`pin`,i=await G.post(`/conversations/${n}/${r}`);t(e=>e.map(e=>e.id===n?{...e,isPinned:i.data.isPinned}:e))}catch(e){console.error(`Failed to toggle pin:`,e)}},[e]),qe=(0,K.useCallback)(async e=>{await G.delete(`/conversations/${e}`),z.current?.id===e&&(z.current=null),t(t=>t.filter(t=>t.id!==e)),r(t=>t===e?null:t)},[]),Je=(0,K.useCallback)(()=>{let e=R.current;e&&ye(e),z.current=null,r(null)},[ye]),Ye=(0,K.useCallback)(async(e,n)=>{let r;t(t=>t.map(t=>
3t.id===e?(r=t.aiMode,{...t,aiMode:n}):t));try{let r=await G.patch(`/conversations/${e}/ai-mode`,{aiMode:n}),i=r.data?.aiMode??n;t(t=>t.map(t=>t.id===e?{...t,aiMode:i,aiModeReason:r.data?.aiModeReason??null}:t))}catch(n){throw t(t=>t.map(t=>t.id===e?{...t,aiMode:r}:t)),n}},[]),U=(0,K.useCallback)(async(e,n)=>{try{let r=(await G.patch(`/conversations/${e}/ai-pause`,{minutes:n})).data?.aiPausedUntil??null;t(t=>t.map(t=>t.id===e?{...t,aiPausedUntil:r}:t))}catch(e){throw console.error(`Failed to set AI pause:`,e),e}},[]),Xe=(0,K.useCallback)(e=>{fe(t=>{if(!(e in t))return t;let n={...t};return delete n[e],n})},[]);return{conversations:e,selectedConvId:n,selectedConv:_e,messages:i,loadingConvs:o,loadingMsgs:c,sendingMsg:m,loadingMoreMsgs:u,loadingMoreConvs:f,hasMoreMsgs:Be,hasMoreConvs:Le,retentionNotice:N,noChannelAccess:ee,searchQuery:g,setSearchQuery:_,accountFilter:v,setAccountFilter:y,viewFilter:b,setViewFilter:x,aiSummary:se,aiSummaryLoading:ce,aiSentiment:le,fetchConversations:Fe,fetchMessages:Re,loadMoreMessages:ze,loadMoreConversations:Ie,selectConversation:Ve,deselectConversation:Je,selectConversationByContact:He,sendMessage:We,sendAttachment:Ge,togglePin:Ke,deleteConversation:qe,clearAiState:Pe,addReaction:(0,K.useCallback)(async(e,t)=>{if(n)try{await G.post(`/conversations/${n}/reactions`,{msgId:e,reaction:t}),a(n=>n.map(n=>{if(n.id!==e)return n;let r=n.reactions||[],i=r.find(e=>e.reacted),a=r.map(e=>({...e}));if(i&&(a=a.map(e=>e.emoji===i.emoji?{...e,count:e.count-1,reacted:!1}:e).filter(e=>e.count>0)),i?.emoji===t)return{...n,reactions:a};let o=a.findIndex(e=>e.emoji===t);return a=o>=0?a.map((e,t)=>t===o?{...e,count:e.count+1,reacted:!0}:e):[...a,{emoji:t,count:1,reacted:!0}],{...n,reactions:a}}))}catch(e){console.error(`Failed to add reaction:`,e)}},[n]),undoMessage:(0,K.useCallback)(async e=>{if(n){a(t=>t.map(t=>t.id===e?{...t,isDeleted:!0}:t));try{await G.post(`/conversations/${n}/messages/${e}/undo`)}catch(t){console.error(`Failed to undo message:`,t),a(t=>t.map(t=>t.id===e?{...t,isDeleted:!1}:t))}}},[n]),sendSticker:(0,K.useCallback)(async(e,t,r=2)=>{if(n)try{await G.post(`/conversations/${n}/sticker`,{stickerId:e,cateId:t,stickerType:r});let i={id:`temp-sticker-${Date.now()}`,content:String(e),contentType:`sticker`,senderType:`self`,senderName:`Staff`,sentAt:new Date().toISOString(),isDeleted:!1,externalMsgId:null};a(e=>[...e,i])}catch(e){console.error(`Failed to send sticker:`,e)}},[n]),setAiMode:Ye,setAiPause:U,aiDrafts:de,dismissAiDraft:Xe,connected:be,typingUsers:Ce,emitTypingStart:xe,emitTypingStop:Se,aiTypingConvs:Te,seenReceipts:H,sendError:ke,clearSendError:()=>Ae(null),tinChuaGuiDuoc:je,openConvError:ne,clearOpenConvError:()=>F(null)}}function iu(){let[e,t]=(0,K.useState)(null),[n,r]=(0,K.useState)(null),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),[m,h]=(0,K.useState)(null),[g,_]=(0,K.useState)(null),[v,y]=(0,K.useState)(null),[b,x]=(0,K.useState)(null),[S,C]=(0,K.useState)(null),w=(0,K.useCallback)(async()=>{try{let e=await G.get(`/ai/config`);return t(e.data),e.data}catch(e){return console.error(`Failed to fetch AI config:`,e),null}},[]),T=(0,K.useCallback)(async e=>{try{let n=await G.put(`/ai/config`,e);return t(e=>({...e||{},...n.data})),!0}catch(e){return console.error(`Failed to update AI config:`,e),!1}},[]),E=(0,K.useCallback)(async e=>{try{let t=e&&e>1?{params:{days:e}}:void 0,n=await G.get(`/ai/usage`,t);return r(n.data),n.data}catch(e){return console.error(`Failed to fetch AI usage:`,e),null}},[]),D=(0,K.useCallback)(async()=>{try{let e=(await G.get(`/ai/providers`)).data?.providers??[];return a(e),e}catch(e){return console.error(`Failed to fetch AI providers:`,e),[]}},[]),O=(0,K.useCallback)(async e=>{s(!0),C(null);try{let t=await G.post(`/ai/suggest`,{conversationId:e});return h(t.data),t.data}catch(e){return C(e?.response?.data?.error||`Không thể tạo gợi ý`),null}finally{s(!1)}},[]),k=(0,K.useCallback)(async e=>{l(!0),C(null);try{let t=(await G.post(`/ai/summarize`,{conversationId:e})).data.summary;return _(t),t}catch(e){return C(e?.response?.data?.error||`Không thể tóm tắt`),null}finally{l(!1)}},[]),A=(0,K.useCallback)(async e=>{d(!0),C(null);try{let t=await G.post(`/ai/sentiment`,{conversationId:e});return y(t.data),t.data}catch(e){return C(e?.response?.data?.error||`Không thể phân tích cảm xúc`),null}finally{d(!1)}},[]),j=(0,K.useCallback)(async e=>{l(!0),d(!0),C(null);try{let t=(await G.post(`/ai/conversation-analyze`,{conversationId:e})).data;return _(t.summary),y(t.sentiment),x(t.leadScore),t}catch(e){return C(e?.response?.data?.error||`Không thể phân tích hội thoại`),null}finally{l(!1),d(!1)}},[]),M=(0,K.useCallback)(async(e,t={})=>{l(!0),d(!0),C(null);try{let n=(await G.post(`/ai/contact-analyze`,{contactId:e,forceFresh:!!t.forceFresh})).data;return`noConversation`in n?n:(_(n.summary),y(n.sentiment),x(n.leadScore),n)}catch(e){return C(e?.response?.data?.error||`Không thể phân tích khách hàng`),null}finally{l(!1),d(!1)}},[]),N=(0,K.useCallback)(async(e,t)=>{try{let n={};if(t.lifecycleStage&&(n.lifecycleStage=t.lifecycleStage),t.setTags)n.tags=Array.from(new Set(t.setTags));else if(t.addTag){let r=await G.get(`/contacts/${e}`),i=Array.isArray(r.data?.tags)?r.data.tags:[];n.tags=Array.from(new Set([...i,t.addTag]))}return Object.keys(n).length===0?!1:(await G.put(`/contacts/${e}`,n),!0)}catch(e){return C(e?.response?.data?.error||`Không áp dụng được gợi ý`),!1}},[]),P=(0,K.useCallback)(async e=>{p(!0),C(null);try{let t=await G.post(`/ai/score-lead`,{conversationId:e});return x(t.data),t.data}catch(e){return C(e?.response?.data?.error||`Không thể chấm điểm lead`),null}finally{p(!1)}},[]),ee=(0,K.useCallback)(async(e,t,n={})=>{try{let r=await G.put(`/ai/api-key`,{provider:e,apiKey:t,skipVerify:n.skipVerify});return await w(),{ok:!0,verified:!!r.data?.verified}}catch(e){let t=e?.response?.data?.error||`Không lưu được API key`;return C(t),{ok:!1,error:t}}},[w]),te=(0,K.useCallback)(async e=>{try{return await G.delete(`/ai/api-key/${e}`),await w(),!0}catch(e){return C(e?.response?.data?.error||`Không xóa được API key`),!1}},[w]);return{config:e,usage:n,providers:i,suggesting:o,summarizing:c,analyzing:u,scoring:f,lastSuggestion:m,lastSummary:g,lastSentiment:v,lastLeadScore:b,error:S,fetchConfig:w,updateConfig:T,fetchUsage:E,fetchProvi
3ders:D,getSuggestion:O,summarize:k,analyzeSentiment:A,scoreLead:P,analyzeConversation:j,analyzeContact:M,applyContactSuggestion:N,acceptSuggestion:(0,K.useCallback)(async e=>{try{await G.post(`/ai/suggestions/${e}/accept`)}catch(e){console.error(`Failed to mark suggestion accepted:`,e)}},[]),reportSuggestionOutcome:(0,K.useCallback)(async(e,t,n)=>{try{await G.post(`/ai/suggestions/${e}/outcome`,{outcome:t,finalText:n})}catch(e){console.error(`Failed to report suggestion outcome:`,e)}},[]),saveApiKey:ee,removeApiKey:te}}var au=0;function ou(e=4e3){let[t,n]=(0,K.useState)([]);return{toast:(0,K.useCallback)((t,r=`info`)=>{let i=++au;n(e=>[...e,{id:i,message:t,type:r}]),setTimeout(()=>{n(e=>e.filter(e=>e.id!==i))},e)},[e]),ToastContainer:(0,K.useCallback)(()=>{if(t.length===0)return null;let e={success:{bg:`#f0fdf4`,border:`#bbf7d0`,text:`#16a34a`},error:{bg:`#fef2f2`,border:`#fecaca`,text:`#dc2626`},info:{bg:`#eff6ff`,border:`#bfdbfe`,text:`#2563eb`},warning:{bg:`#fffbeb`,border:`#fde68a`,text:`#d97706`}},n={success:`✓`,error:`✕`,info:`ℹ`,warning:`⚠`};return(0,q.jsx)(`div`,{style:{position:`fixed`,top:20,right:20,zIndex:9999,display:`flex`,flexDirection:`column`,gap:8,maxWidth:360},children:t.map(t=>{let r=e[t.type];return(0,q.jsxs)(`div`,{style:{background:r.bg,border:`1px solid ${r.border}`,borderRadius:10,padding:`12px 18px`,fontSize:13,color:r.text,display:`flex`,alignItems:`center`,gap:8,boxShadow:`0 4px 16px rgba(0,0,0,0.08)`,animation:`slideInRight 0.25s ease-out`},children:[(0,q.jsx)(`span`,{style:{fontWeight:700,fontSize:15},children:n[t.type]}),t.message]},t.id)})})},[t])}}function su(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1),o=(0,K.useCallback)(async()=>{r(!0);try{let e=await G.get(`/zalo-accounts`);t(e.data.accounts??e.data??[])}catch(e){console.error(`Failed to fetch Zalo accounts:`,e)}finally{r(!1)}},[]);return{accounts:e,loading:n,saving:i,fetchAccounts:o,startConnect:(0,K.useCallback)(async()=>{a(!0);try{return(await G.post(`/zalo-accounts/connect`)).data.accountId}catch(e){return console.error(`Failed to start Zalo connect:`,e),null}finally{a(!1)}},[]),loginQR:(0,K.useCallback)(async e=>{a(!0);try{return await G.post(`/zalo-accounts/${e}/login`),t(t=>t.map(t=>t.id===e?{...t,status:`qr_pending`}:t)),!0}catch(e){return console.error(`Failed to initiate QR login:`,e),!1}finally{a(!1)}},[]),updateAccountStatus:(0,K.useCallback)((e,n,r)=>{t(t=>t.map(t=>t.id===e?{...t,status:n,...r}:t))},[]),deleteAccount:(0,K.useCallback)(async e=>{a(!0);try{return await G.delete(`/zalo-accounts/${e}`),t(t=>t.filter(t=>t.id!==e)),!0}catch(e){return console.error(`Failed to delete Zalo account:`,e),!1}finally{a(!1)}},[]),reconnectAccount:(0,K.useCallback)(async e=>{a(!0);try{return await G.post(`/zalo-accounts/${e}/reconnect`),await o(),!0}catch(e){return console.error(`Failed to reconnect:`,e),!1}finally{a(!1)}},[o]),renameAccount:(0,K.useCallback)(async(e,n)=>{try{return await G.patch(`/zalo-accounts/${e}`,{displayName:n}),t(t=>t.map(t=>t.id===e?{...t,displayName:n}:t)),!0}catch(e){return console.error(`Failed to rename account:`,e),!1}},[]),toggleAccount:(0,K.useCallback)(async(e,n)=>{try{return await G.patch(`/zalo-accounts/${e}`,{isDisabled:n}),t(t=>t.map(t=>t.id===e?{...t,isDisabled:n}:t)),!0}catch(e){return console.error(`Failed to toggle account:`,e),!1}},[]),toggleAiOnChannel:(0,K.useCallback)(async(e,n)=>{try{return await G.patch(`/zalo-accounts/${e}`,{aiEnabled:n}),t(t=>t.map(t=>t.id===e?{...t,aiEnabled:n}:t)),!0}catch(e){return console.error(`Failed to toggle AI on channel:`,e),!1}},[])}}function cu(e){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(null),s=(0,K.useCallback)(async(t=!1)=>{if(e){i(!0),o(null);try{let{data:r}=await G.get(`/zns/templates`,{params:{accountId:e,refresh:t?`1`:void 0}});n(r??[])}catch(e){o(e?.response?.data?.error??`Failed to load templates`)}finally{i(!1)}}},[e]);return(0,K.useEffect)(()=>{s(!1)},[s]),{templates:t,loading:r,error:a,refresh:()=>s(!0)}}function lu(){let[e,t]=(0,K.useState)(!1);return{send:(0,K.useCallback)(async e=>{t(!0);try{let{data:t}=await G.post(`/zns/send`,e);return t}finally{t(!1)}},[]),sending:e}}function uu({open:e,onClose:t,contact:n,accountId:r,conversationId:i,onSent:a}){let{accounts:o,fetchAccounts:s}=su(),{toast:c,ToastContainer:l}=ou(),[u,d]=(0,K.useState)(r??``),[f,p]=(0,K.useState)(n?.phone??``),[m,h]=(0,K.useState)(null),[g,_]=(0,K.useState)({}),[v,y]=(0,K.useState)(null),b=(0,K.useMemo)(()=>o.filter(e=>e.platform===1&&e.status!==`archived`),[o]);(0,K.useEffect)(()=>
3{e&&(s(),p(n?.phone??``),y(null),h(null),_({}))},[e,n?.id,s,n?.phone]),(0,K.useEffect)(()=>{e&&(r?d(r):b.length>0&&!u&&d(b[0].id))},[e,r,b,u]);let{templates:x,loading:S,refresh:C}=cu(u||null),{send:w,sending:T}=lu();if(!e)return null;let E=b.length>0,D=!!m&&!!f.trim()&&!!u&&(m?.params??[]).every(e=>!e.require||g[e.name]?.trim());async function O(){if(!(!m||!u)){y(null);try{let e=await w({accountId:u,contactId:n?.id,phone:f,templateId:m.templateId,templateData:g,conversationId:i});c(`ZNS đã được gửi`,`success`),a?.(e.znsLogId),t()}catch(e){y(e?.response?.data?.error??e?.message??`Gửi ZNS thất bại`)}}}return(0,q.jsx)(`div`,{className:`zns-modal-backdrop`,onClick:t,children:(0,q.jsxs)(`div`,{className:`zns-modal`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{className:`zns-modal__header`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h2`,{className:`zns-modal__title`,children:`Gửi tin Zalo ZNS`}),(0,q.jsx)(`p`,{className:`zns-modal__subtitle`,children:n?.fullName?`Đến: ${n.fullName}`:`Chọn template đã được duyệt`})]}),(0,q.jsx)(`button`,{className:`zns-modal__close`,onClick:t,children:(0,q.jsx)(U,{size:18})})]}),!E&&(0,q.jsxs)(`div`,{className:`zns-modal__empty`,children:[(0,q.jsx)(ce,{size:20}),(0,q.jsx)(`p`,{children:`Chưa có tài khoản Zalo OA nào được kết nối. Vào Integrations để kết nối trước.`})]}),E&&(0,q.jsxs)(`div`,{className:`zns-modal__body`,children:[b.length>1&&!r&&(0,q.jsxs)(`div`,{className:`zns-modal__field`,children:[(0,q.jsx)(`label`,{children:`Tài khoản OA`}),(0,q.jsx)(`select`,{value:u,onChange:e=>d(e.target.value),children:b.map(e=>(0,q.jsx)(`option`,{value:e.id,children:e.displayName??e.externalPageId},e.id))})]}),(0,q.jsxs)(`div`,{className:`zns-modal__field`,children:[(0,q.jsxs)(`div`,{className:`zns-modal__field-row`,children:[(0,q.jsx)(`label`,{children:`Template`}),(0,q.jsxs)(`button`,{type:`button`,className:`zns-modal__refresh`,onClick:()=>C(),disabled:S,children:[(0,q.jsx)(Ye,{size:12,className:S?`spin`:``}),` Làm mới`]})]}),S?(0,q.jsxs)(`div`,{className:`zns-modal__loading`,children:[(0,q.jsx)(Zt,{size:16,className:`spin`}),` Đang tải…`]}):(0,q.jsxs)(`div`,{className:`zns-modal__templates`,children:[x.length===0&&(0,q.jsx)(`p`,{className:`zns-modal__hint`,children:`Chưa có template nào được duyệt.`}),x.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:`zns-modal__template ${m?.id===e.id?`is-selected`:``}`,onClick:()=>{h(e),_({})},children:[(0,q.jsx)(`div`,{className:`zns-modal__template-name`,children:e.templateName}),e.templateType&&(0,q.jsx)(`div`,{className:`zns-modal__template-type`,children:e.templateType})]},e.id))]})]}),m&&(0,q.jsxs)(`div`,{className:`zns-modal__field`,children:[(0,q.jsx)(`label`,{children:`Thông số template`}),(m.params??[]).length===0&&(0,q.jsx)(`p`,{className:`zns-modal__hint`,children:`Template không cần thông số.`}),(m.params??[]).map(e=>(0,q.jsxs)(`div`,{className:`zns-modal__param`,children:[(0,q.jsxs)(`label`,{className:`zns-modal__param-label`,children:[e.name,e.require&&(0,q.jsx)(`span`,{className:`zns-modal__required`,children:`*`})]}),(0,q.jsx)(`input`,{type:e.type===`DATE`?`date`:e.type===`NUMBER`||e.type===`CURRENCY`?`number`:`text`,value:g[e.name]??``,maxLength:e.maxLength,onChange:t=>_(n=>({...n,[e.name]:t.target.value}))})]},e.name))]}),(0,q.jsxs)(`div`,{className:`zns-modal__field`,children:[(0,q.jsx)(`label`,{children:`Số điện thoại nhận`}),(0,q.jsx)(`input`,{type:`tel`,value:f,onChange:e=>p(e.target.value),placeholder:`84xxxxxxxxx hoặc 0xxxxxxxxx`})]}),v&&(0,q.jsxs)(`div`,{className:`zns-modal__error`,children:[(0,q.jsx)(ce,{size:14}),` `,v]})]}),(0,q.jsxs)(`div`,{className:`zns-modal__footer`,children:[(0,q.jsx)(`button`,{className:`btn-secondary`,onClick:t,disabled:T,children:`Hủy`}),(0,q.jsxs)(`button`,{className:`btn-primary`,onClick:O,disabled:!D||T,children:[T?(0,q.jsx)(Zt,{size:14,className:`spin`}):(0,q.jsx)(Qe,{size:14}),T?`Đang gửi…`:`Gửi ZNS`]})]}),(0,q.jsx)(l,{})]})})}var du={name:``,taxCode:``,industry:``,size:``,website:``,address:``,phone:``,email:``,notes:``},fu=[`1–10`,`11–50`,`51–200`,`201–1000`,`1000+`];
3function pu({open:e,onClose:t,onSubmit:n}){let[r,i]=(0,K.useState)(du),[a,o]=(0,K.useState)({}),[s,c]=(0,K.useState)(!1),l=e=>t=>{i(n=>({...n,[e]:t.target.value})),a[e]&&o(t=>({...t,[e]:``}))},u=()=>{let e={};return r.name.trim()||(e.name=`Vui lòng nhập tên công ty`),r.email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(r.email)&&(e.email=`Email không hợp lệ`),o(e),Object.keys(e).length===0},d=async()=>{if(u()){c(!0);try{await n({name:r.name.trim(),taxCode:r.taxCode.trim()||null,industry:r.industry.trim()||null,size:r.size||null,website:r.website.trim()||null,address:r.address.trim()||null,phone:r.phone.trim()||null,email:r.email.trim()||null,notes:r.notes.trim()||null})&&(i(du),o({}),t())}finally{c(!1)}}},f=()=>{i(du),o({}),t()};return(0,q.jsxs)(jc,{open:e,onClose:f,title:`Thêm công ty mới`,subtitle:`Nhập thông tin công ty B2B`,width:520,footer:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{className:`drawer-btn drawer-btn--ghost`,onClick:f,children:`Hủy`}),(0,q.jsxs)(`button`,{className:`drawer-btn drawer-btn--primary`,onClick:d,disabled:s,children:[(0,q.jsx)(B,{size:14}),` Tạo công ty`]})]}),children:[(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Thông tin cơ bản`}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Pt,{size:14}),` Tên công ty `,(0,q.jsx)(`span`,{className:`form-required`,children:`*`})]}),(0,q.jsx)(`input`,{className:`form-input ${a.name?`form-input--error`:``}`,placeholder:`VD: Công ty TNHH ABC`,value:r.name,onChange:l(`name`),autoFocus:!0}),a.name&&(0,q.jsx)(`span`,{className:`form-error`,children:a.name})]}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,children:`Mã số thuế`}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`0123456789`,value:r.taxCode,onChange:l(`taxCode`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,children:`Ngành nghề`}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`VD: Bán lẻ, Công nghệ...`,value:r.industry,onChange:l(`industry`)})]})]}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,children:`Quy mô (nhân sự)`}),(0,q.jsx)(`div`,{className:`form-select-wrap`,children:(0,q.jsxs)(`select`,{className:`form-select`,value:r.size,onChange:l(`size`),children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn quy mô —`}),fu.map(e=>(0,q.jsx)(`option`,{value:e,children:e},e))]})})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(M,{size:14}),` Website`]}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`https://...`,value:r.website,onChange:l(`website`)})]})]})]}),(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Liên hệ`}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(z,{size:14}),` Số điện thoại`]}),(0,q.jsx)(`input`,{className:`form-input`,value:r.phone,onChange:l(`phone`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)($e,{size:14}),` Email`]}),(0,q.jsx)(`input`,{className:`form-input ${a.email?`form-input--error`:``}`,type:`email`,value:r.email,onChange:l(`email`)}),a.email&&(0,q.jsx)(`span`,{className:`form-error`,children:a.email})]})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Ht,{size:14}),` Địa chỉ`]}),(0,q.jsx)(`input`,{className:`form-input`,value:r.address,onChange:l(`address`)})]})]}),(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Ghi chú`}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(zt,{size:14}),` Ghi chú nội bộ`]}),(0,q.jsx)(`textarea`,{className:`form-textarea`,value:r.notes,onChange:l(`notes`),rows:3})]})]})]})}function mu({value:e,displayName:t,onChange:n,compact:r=!1}){let[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(``),[c,l]=(0,K.useState)([]),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),m=(0,K.useRef)(null),h=(0,K.useRef)(null),g=(0,K.useRef)(void 0),_=(0,K.useCallback)(async e=>{d(!0);try{l((await G.get(`/companies`,{params:{search:e||void 0,limit:15}})).data.companies??[])}catch{l([])}finally{d(!1)}},[]);(0,K.useEffect)(()=>
3{if(i)return g.current&&clearTimeout(g.current),g.current=setTimeout(()=>_(o),300),()=>{g.current&&clearTimeout(g.current)}},[o,i,_]),(0,K.useEffect)(()=>{if(!i)return;let e=e=>{m.current&&!m.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]),(0,K.useEffect)(()=>{i&&setTimeout(()=>h.current?.focus(),50)},[i]);let v=e=>{n(e.id,e.name),a(!1),s(``)},y=e=>{e.stopPropagation(),n(null,null)},b=async e=>{try{let t=(await G.post(`/companies`,e)).data;return n(t.id,t.name),p(!1),a(!1),s(``),!0}catch{return!1}},x=r?12:13;return(0,q.jsxs)(`div`,{ref:m,style:{position:`relative`,marginLeft:`auto`},children:[e&&t?(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:4,fontSize:x,color:`var(--primary)`,cursor:`pointer`,padding:`1px 6px`,borderRadius:4,maxWidth:180,transition:`background 0.15s`},onClick:()=>a(!i),onMouseEnter:e=>e.currentTarget.style.background=`var(--primary-bg)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,title:`Công ty: ${t}`,children:[(0,q.jsx)(Pt,{size:12,style:{flexShrink:0}}),(0,q.jsx)(`span`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:t}),(0,q.jsx)(`button`,{onClick:y,style:{background:`none`,border:`none`,cursor:`pointer`,padding:0,color:`var(--gray-400)`,display:`flex`,flexShrink:0},title:`Gỡ liên kết công ty`,children:(0,q.jsx)(U,{size:12})})]}):(0,q.jsx)(`span`,{onClick:()=>a(!i),style:{fontSize:x,color:`var(--gray-400)`,cursor:`pointer`,padding:`2px 6px`,borderRadius:4,transition:`background 0.15s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,children:`Chưa có`}),i&&(0,q.jsxs)(`div`,{style:{position:`absolute`,top:`100%`,right:0,marginTop:4,width:280,background:`var(--bg-card, #fff)`,borderRadius:8,boxShadow:`0 4px 24px rgba(0,0,0,0.12)`,border:`1px solid var(--gray-100)`,zIndex:1e3,overflow:`hidden`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,padding:`8px 10px`,borderBottom:`1px solid var(--gray-100)`},children:[(0,q.jsx)(_t,{size:14,color:`var(--gray-400)`}),(0,q.jsx)(`input`,{ref:h,type:`text`,value:o,onChange:e=>s(e.target.value),placeholder:`Tìm công ty...`,style:{border:`none`,outline:`none`,flex:1,fontSize:12,background:`transparent`,color:`var(--gray-700)`}}),u&&(0,q.jsx)(Zt,{size:14,color:`var(--primary)`,className:`spin`})]}),(0,q.jsxs)(`div`,{style:{maxHeight:200,overflowY:`auto`},children:[c.length===0&&!u&&(0,q.jsx)(`div`,{style:{padding:`12px 10px`,fontSize:12,color:`var(--gray-400)`,textAlign:`center`},children:o?`Không tìm thấy`:`Chưa có công ty nào`}),c.map(e=>(0,q.jsxs)(`div`,{onClick:()=>v(e),style:{padding:`8px 10px`,cursor:`pointer`,fontSize:12,display:`flex`,alignItems:`center`,gap:8,transition:`background 0.1s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,children:[(0,q.jsx)(Pt,{size:14,color:`var(--gray-400)`,style:{flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontWeight:500,color:`var(--gray-700)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.name}),e.industry&&(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:1},children:e.industry})]}),e._count?.contacts!=null&&(0,q.jsxs)(`span`,{style:{fontSize:11,color:`var(--gray-400)`,flexShrink:0},children:[e._count.contacts,` KH`]})]},e.id))]}),(0,q.jsxs)(`div`,{onClick:()=>{p(!0),a(!1)},style:{padding:`8px 10px`,cursor:`pointer`,fontSize:12,display:`flex`,alignItems:`center`,gap:6,borderTop:`1px solid var(--gray-100)`,color:`var(--primary)`,fontWeight:500,transition:`background 0.1s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--primary-bg, #f0f5ff)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,children:[(0,q.jsx)(B,{size:14}),`Tạo công ty mới`]})]}),(0,q.jsx)(pu,{open:f,onClose:()=>p(!1),onSubmit:b})]})}function hu(e){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(0),[a,o]=(0,K.useState)(!1),s=(0,K.useCallback)(async(t=50,r=0)=>{if(e){o(!0);try{let{data:a}=await G.get(`/contacts/${e}/timeline`,{params:{limit:t,offset:r}});n(a.items),i(a.total)}catch(e){console.error(`Failed to load timeline:`,e)}
3finally{o(!1)}}},[e]);return(0,K.useEffect)(()=>{s()},[s]),{items:t,total:r,loading:a,fetchTimeline:s}}function gu(e){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!1),a=(0,K.useCallback)(async()=>{if(e){i(!0);try{let{data:t}=await G.get(`/contacts/${e}/lifecycle`);n(t)}catch(e){console.error(`Failed to load lifecycle:`,e)}finally{i(!1)}}},[e]);return(0,K.useEffect)(()=>{a()},[a]),{lifecycle:t,loading:r,fetchLifecycle:a,updateStage:(0,K.useCallback)(async(t,n)=>{e&&(await G.post(`/contacts/${e}/lifecycle`,{toStage:t,reason:n}),await a())},[e,a])}}function _u(e){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(0),[a,o]=(0,K.useState)(!1),s=(0,K.useCallback)(async t=>{o(!0);try{let r={...t};e&&(r.contactId=e);let{data:a}=await G.get(`/cdp/events`,{params:r});n(a.events),i(a.total)}catch(e){console.error(`Failed to load events:`,e)}finally{o(!1)}},[e]);return(0,K.useEffect)(()=>{s()},[s]),{events:t,total:r,loading:a,fetchEvents:s,trackEvent:(0,K.useCallback)(async(t,n,r)=>{let{data:i}=await G.post(`/cdp/events`,{contactId:r||e,eventName:t,properties:n,source:`manual`});return i.event},[e])}}function vu(e,t=30){let[n,r]=(0,K.useState)(null),[i,a]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{let n=!1;return(async()=>{a(!0);try{let i={days:t};e&&(i.contactId=e);let{data:a}=await G.get(`/cdp/events/stats`,{params:i});n||r(a)}catch(e){console.error(`Failed to load event stats:`,e)}finally{n||a(!1)}})(),()=>{n=!0}},[e,t]),{stats:n,loading:i}}function yu(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(!1),i=(0,K.useCallback)(async()=>{r(!0);try{let{data:e}=await G.get(`/cdp/segments`);t(e.segments)}catch(e){console.error(`Failed to load segments:`,e)}finally{r(!1)}},[]);return(0,K.useEffect)(()=>{i()},[i]),{segments:e,loading:n,fetchSegments:i,createSegment:(0,K.useCallback)(async e=>{let{data:n}=await G.post(`/cdp/segments`,e);return t(e=>[n.segment,...e]),n.segment},[]),updateSegment:(0,K.useCallback)(async(e,n)=>{let{data:r}=await G.put(`/cdp/segments/${e}`,n);return t(t=>t.map(t=>t.id===e?r.segment:t)),r.segment},[]),deleteSegment:(0,K.useCallback)(async e=>{await G.delete(`/cdp/segments/${e}`),t(t=>t.filter(t=>t.id!==e))},[]),recalculate:(0,K.useCallback)(async e=>{let{data:n}=await G.post(`/cdp/segments/${e}/calculate`);t(t=>t.map(t=>t.id===e?{...t,contactCount:n.contactCount,lastCalculatedAt:n.lastCalculatedAt}:t))},[])}}function bu(e){if(!e)return null;let t=new Date(e);return Number.isNaN(t.getTime())?null:t.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`})}function xu({call:e}){if(!e||typeof e!=`object`||!e.status)return(0,q.jsx)(`div`,{className:`call-tl`,children:`Cuộc gọi`});let t=e.direction===`inbound`,n=ba(e),r=n?A:t?le:ve,i=bu(e.startedAt),a=bu(e.endedAt),o=Sn(e.endReason),s=e.status!==`ended`||!e.talkSec;return(0,q.jsxs)(`div`,{className:`call-tl`,children:[(0,q.jsxs)(`div`,{className:`call-tl__title ${n?`call-tl__title--failed`:``}`,children:[(0,q.jsx)(r,{size:13}),(0,q.jsxs)(`span`,{children:[t?`Cuộc gọi đến`:`Cuộc gọi đi`,e.providerLabel?` · ${e.providerLabel}`:``]})]}),(0,q.jsxs)(`div`,{className:`call-tl__meta`,children:[e.assignedAgent&&(0,q.jsxs)(`span`,{children:[`NV: `,e.assignedAgent.fullName]}),i&&(0,q.jsx)(`span`,{children:a?`${i} → ${a}`:i}),e.talkSec?(0,q.jsxs)(`span`,{children:[`Thời lượng: `,Dn(e.talkSec)]}):null,s&&(0,q.jsxs)(`span`,{className:n?`call-tl__bad`:void 0,children:[bn(e.status),o?` · ${o}`:``]})]}),(e.outcome||e.note)&&(0,q.jsxs)(`div`,{className:`call-tl__result`,children:[e.outcome&&(0,q.jsx)(`span`,{className:`call-tl__outcome`,children:wn(e.outcome)}),e.note&&(0,q.jsx)(`span`,{className:`call-tl__note`,children:e.note})]})]})}var Su={message:{label:`Tin nhắn`,color:`#3b82f6`,icon:xt},call:{label:`Cuộc gọi`,color:`#0d9488`,icon:z},note:{label:`Ghi chú`,color:`#f59e0b`,icon:zt},appointment:{label:`Lịch hẹn`,color:`#9333ea`,icon:Be},event:{label:`Sự kiện`,color:`#16a34a`,icon:Ct},lifecycle:{label:`Vòng đời`,color:`#ef4444`,icon:Je}};function Cu(e){let t=new Date(e),n=new Date().getTime()-t.getTime();return n<6e4?`Vừa xong`:n<36e5?`${Math.floor(n/6e4)} phút trước`:n<864e5?`${Math.floor(n/36e5)} giờ trước`:n<6048e5?`${Math.floor(n/864e5)} ngày trước`:t.toLocaleDateString(`vi-VN`)}var wu={ad_click:`Bấm quảng cáo mở chat`,quote_sent:`Đã gửi báo giá`,quote_accepted:`Khách chấp nhận báo giá`,contract_signed:`Hợp đồng đã ký`};function Tu(e){let t=wu[e.eventName]||e.eventName,n=e.properties?.adTitle;return n?`${t}: "${n}"`:`${t} (${e.source||`api`})`}function Eu(e){switch(e.type){case`message`:return`${e.data.senderName||e.data.senderType}: ${e.data.content?.slice(0,80)||`(media)`}`;case`note`:return`${e.data.authorName}: ${e.data.content?.slice(0,80)||``}`;case`appointment`:return`${e.data.title} — ${e.data.assignedName||`Chưa giao`}`;case`event`:return Tu(e.data);case`lifecycle`:return`${e.data.fromStage||`—`} → ${e.data.toStage}${e.data.reason?`: ${e.data.reason}`:``}`;default:return JSON.stringify(e.data).slice(0,80)}}function Du({contactId:e}){let{items:t,total:n,loading:r}=hu(e),[i,a]=(0,K.useState)(null),o=i?t.filter(e=>e.type===i):t;return r?(0,q.jsx)(`div`,{style:{padding:16,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Đang tải dòng thời gian...`}):(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{style:{display:`flex`,gap:4,marginBottom:12,flexWrap:`wrap`},children:[(0,q.jsxs)(`button`,{onClick:()=>a(null),style:{padding:`3px 10px`,borderRadius:12,fontSize:11,fontWeight:500,border:`1px solid var(--gray-200)`,cursor:`pointer`,background:i?`#fff`:`var(--primary)`,color:i?`var(--gray-600)`:`#fff`},children:[`Tất cả (`,n,`)`]}),Object.entries(Su).map(([e,n])=>{let r=t.filter(t=>t.type===e).length;return r===0?null:(0,q.jsxs)(`button`,{onClick:()=>a(i===e?null:e),style:{padding:`3px 10px`,borderRadius:12,fontSize:11,fontWeight:500,border:`1px solid ${i===e?n.color:`var(--gray-200)`}`,background:i===e?`${n.color}18`:`#fff`,color:i===e?n.color:`var(--gray-600)`,cursor:`pointer`},children:[n.label,` (`,r,`)`]},e)})]}),(0,q.jsx)(`div`,{className:`cdp-timeline`,children:o.map((e,t)=>{let n=Su[e.type]||Su.event;return(0,q.jsxs)(`div`,{className:`cdp-timeline-item`,"data-type":e.type,children:[(0,q.jsxs)(`div`,{className:`cdp-timeline-item__header`,children:[(0,q.jsx)(`span`,{className:`cdp-timeline-item__type`,style:{background:`${n.color}18`,color:n.color},children:n.label}),(0,q.jsxs)(`span`,{className:`cdp-timeline-item__time`,children:[(0,q.jsx)(Jt,{size:10}
3),Cu(e.timestamp)]})]}),(0,q.jsx)(`div`,{className:`cdp-timeline-item__content`,children:e.type===`call`?(0,q.jsx)(xu,{call:e.data}):Eu(e)})]},t)})}),o.length===0&&(0,q.jsx)(`div`,{style:{textAlign:`center`,padding:20,color:`var(--gray-400)`,fontSize:13},children:`Chưa có hoạt động nào`})]})}function Ou(e){if(!e)return`—`;try{return new Date(e).toLocaleString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`,day:`2-digit`,month:`2-digit`})}catch{return`—`}}function ku(e){if(!e)return``;try{let t=new Date(e),n=Date.now()-t.getTime(),r=Math.floor(n/6e4);if(r<1)return`vừa xong`;if(r<60)return`${r} phút trước`;let i=Math.floor(r/60);return i<24?`${i} giờ trước`:`${Math.floor(i/24)} ngày trước`}catch{return``}}var Au={positive:`😊 Tích cực`,neutral:`😐 Trung lập`,negative:`😠 Tiêu cực`},ju={hot:`🔥 Hot`,warm:`🌤️ Warm`,cold:`❄️ Cold`};function Mu(e){return rs[e]?.label??e}var Nu={pricing_question:`Quan tâm giá`,product_interest:`Quan tâm sản phẩm`,urgency:`Gấp`,budget_mention:`Có ngân sách`,contact_share:`Chia sẻ liên hệ`,engagement_depth:`Tương tác cao`};function Pu(e){if(!e.aiAnalyzedAt||!e.aiSummary)return null;let t=Array.isArray(e.aiPainPoints)?e.aiPainPoints:[],n=Array.isArray(e.aiCompetitors)?e.aiCompetitors:[],r=Array.isArray(e.aiSignals)?e.aiSignals:[];return{summary:e.aiSummary,sentiment:{label:e.aiSentimentLabel||`neutral`,confidence:e.aiSentimentConfidence??0,reason:e.aiSentimentReason??``},leadScore:{score:e.leadScore??0,intent:e.aiIntent||`cold`,signals:r,summary:e.aiSummary,painPoints:t,competitors:n},conversationId:e.aiConversationId??``,lastMessageAt:null,contactLifecycleStage:e.lifecycleStage??`subscriber`,contactTags:Array.isArray(e.tags)?e.tags:[],fromCache:!0}}function Fu(e){let t=[],n=e.contactLifecycleStage??`subscriber`,r=new Set((e.contactTags??[]).map(e=>e.toLowerCase())),i=n===`customer`||n===`evangelist`||n===`churned`;e.leadScore.intent===`hot`&&n!==`qualified`&&!i?t.push({id:`stage:qualified`,label:`Đổi giai đoạn → ${Mu(`qualified`)}`,apply:{lifecycleStage:`qualified`},kind:`status`}):e.leadScore.intent===`warm`&&n===`subscriber`&&t.push({id:`stage:lead`,label:`Đổi giai đoạn → ${Mu(`lead`)}`,apply:{lifecycleStage:`lead`},kind:`status`});for(let n of e.leadScore.signals){let e=Nu[n.type];if(e&&!r.has(e.toLowerCase())&&!t.some(t=>t.apply.addTag===e)&&(t.push({id:`tag:${e}`,label:`+ ${e}`,apply:{addTag:e},kind:`tag`}),t.length>=5))break}return e.leadScore.competitors.length>0&&!r.has(`so sánh đối thủ`)&&t.push({id:`tag:competitor`,label:`+ So sánh đối thủ`,apply:{addTag:`So sánh đối thủ`},kind:`tag`}),t}function Iu({contact:e,variant:t=`drawer`,title:n,onContactUpdated:r}){let{analyzeContact:i,applyContactSuggestion:a,summarizing:o,analyzing:s,error:c}=iu(),[l,u]=(0,K.useState)(new Set),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),[h,g]=(0,K.useState)(!1),[_,v]=(0,K.useState)(null),y=o||s,b=(0,K.useRef)(e.id);(0,K.useEffect)(()=>{e.id!==b.current&&(v(null),g(!1),u(new Set),f(null),b.current=e.id)},[e.id]),(0,K.useEffect)(()=>{e.aiAnalyzedAt&&_&&v(null)},[e.aiAnalyzedAt,_]);let x=(0,K.useMemo)(()=>_||Pu(e),[_,e]),S=(0,K.useCallback)(async(t={})=>{g(!1);let n=await i(e.id,t);n&&(`noConversation`in n?g(!0):(v(n),u(new Set),r?.()))},[i,e.id,r]),C=(0,K.useMemo)(()=>x?Fu(x):[],[x]),w=async t=>{if(l.has(t.id)||p)return;f(null),m(t.id);let n=await a(e.id,t.apply);if(m(null),!n){f(`Không áp dụng được: ${t.label}`);return}u(e=>new Set(e).add(t.id)),r?.()};return(0,q.jsxs)(`div`,{className:t===`sidebar`?`chat-detail__section contact-ai contact-ai--sidebar`:`form-section contact-ai`,children:[(0,q.jsxs)(`div`,{className:`contact-ai__header`,children:[(0,q.jsxs)(`div`,{className:t===`sidebar`?`chat-detail__section-title contact-ai__title`:`form-section__title contact-ai__title`,children:[(0,q.jsx)(At,{size:14}),` `,n??`Customer 360`]}),x&&(0,q.jsxs)(`button`,{type:`button`,className:`contact-ai__refresh`,onClick:()=>S({forceFresh:!0}),disabled:y,title:`Chạy lại phân tích AI`,children:[(0,q.jsx)(Ye,{size:12,className:y?`contact-ai__spin`:``}),y?`Đang phân tích…`:`Phân tích lại`]})]}),!y&&!x&&!h&&!c&&(0,q.jsxs)(`div`,{className:`contact-ai__idle`,children:[(0,q.jsx)(`p`,{className:`contact-ai__idle-hint`,children:`Nhấn để AI phân tích cuộc trò chuyện gần nhất.`}),(0,q.jsxs)(`button`,{type:`button`,className:`contact-ai__idle-btn`,onClick:()=>S(),children:[(0,q.jsx)(At,{size:13}),` Phân tích khách hàng`]})]}
3),y&&!x&&(0,q.jsxs)(`div`,{className:`contact-ai__skeleton`,children:[(0,q.jsx)(`span`,{className:`contact-ai__skeleton-line`}),(0,q.jsx)(`span`,{className:`contact-ai__skeleton-line contact-ai__skeleton-line--short`}),(0,q.jsx)(`span`,{className:`contact-ai__skeleton-line`})]}),!y&&h&&(0,q.jsx)(`p`,{className:`contact-ai__empty`,children:`Chưa có hội thoại nào với khách hàng này. AI sẽ phân tích khi có tin nhắn.`}),!y&&c&&!x&&!h&&(0,q.jsxs)(`p`,{className:`contact-ai__error`,children:[(0,q.jsx)(ce,{size:12}),` `,c,(0,q.jsx)(`button`,{type:`button`,className:`contact-ai__retry`,onClick:()=>S(),children:`Thử lại`})]}),x&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`p`,{className:`contact-ai__summary`,children:x.summary||`Chưa có nội dung tóm tắt.`}),(0,q.jsxs)(`div`,{className:`contact-ai__chips`,children:[x.sentiment&&(0,q.jsxs)(`span`,{className:`contact-ai__chip contact-ai__chip--sentiment-${x.sentiment.label}`,children:[Au[x.sentiment.label]||x.sentiment.label,` · `,Math.round((x.sentiment.confidence??0)*100),`%`]}),x.leadScore&&(0,q.jsxs)(`span`,{className:`contact-ai__chip contact-ai__chip--intent-${x.leadScore.intent}`,children:[ju[x.leadScore.intent]||x.leadScore.intent,` · `,x.leadScore.score,`/100`]})]}),x.leadScore.painPoints.length>0&&(0,q.jsxs)(`div`,{className:`contact-ai__section`,children:[(0,q.jsxs)(`div`,{className:`contact-ai__section-title`,children:[(0,q.jsx)(Ot,{size:12}),` Vấn đề khách quan tâm`]}),(0,q.jsx)(`ul`,{className:`contact-ai__bullets`,children:x.leadScore.painPoints.map((e,t)=>(0,q.jsx)(`li`,{children:e},t))})]}),x.leadScore.competitors.length>0&&(0,q.jsxs)(`div`,{className:`contact-ai__section`,children:[(0,q.jsxs)(`div`,{className:`contact-ai__section-title`,children:[(0,q.jsx)(se,{size:12}),` Đối thủ được nhắc`]}),(0,q.jsx)(`div`,{className:`contact-ai__competitor-row`,children:x.leadScore.competitors.map(e=>(0,q.jsx)(`span`,{className:`contact-ai__competitor`,children:e},e))})]}),C.length>0&&(0,q.jsxs)(`div`,{className:`contact-ai__suggestions`,children:[(0,q.jsxs)(`div`,{className:`contact-ai__suggestions-title`,children:[(0,q.jsx)(Ee,{size:12}),` Gợi ý áp dụng`]}),(0,q.jsx)(`div`,{className:`contact-ai__apply-row`,children:C.map(e=>{let t=l.has(e.id),n=p===e.id;return(0,q.jsxs)(`button`,{type:`button`,className:`contact-ai__apply-btn contact-ai__apply-btn--${e.kind} ${t?`contact-ai__apply-btn--done`:``}`,onClick:()=>w(e),disabled:t||n,children:[t?(0,q.jsx)(te,{size:11}):n?(0,q.jsx)(Ye,{size:11,className:`contact-ai__spin`}):e.kind===`status`?(0,q.jsx)(Xt,{size:11}):(0,q.jsx)(Ct,{size:11}),t?`Đã áp dụng · ${e.label}`:n?`Đang áp dụng…`:e.label]},e.id)})}),d&&(0,q.jsxs)(`p`,{className:`contact-ai__apply-error`,children:[(0,q.jsx)(ce,{size:12}),` `,d]})]}),(0,q.jsxs)(`p`,{className:`contact-ai__meta`,children:[`💾 Đã lưu vào hồ sơ`,` · `,`Cập nhật `,ku(e.aiAnalyzedAt),` (`,Ou(e.aiAnalyzedAt),`)`]})]})]})}var Lu={search:``,status:``,type:``,contactId:``};function Ru(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(0),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(Lu),[u,d]=(0,K.useState)(1),f=(0,K.useCallback)(async()=>{a(!0);try{let e=c,n={page:u,limit:20};e.search&&(n.search=e.search),e.status&&(n.status=e.status),e.type&&(n.type=e.type),e.contactId&&(n.contactId=e.contactId);let i=await G.get(`/quotes`,{params:n});t(i.data.data??[]),r(i.data.meta?.total??0)}catch{t([]),r(0)}finally{a(!1)}},[c,u]),p=(0,K.useCallback)(async e=>{try{return(await G.get(`/quotes/${e}`)).data.data}catch{return null}},[]),m=(0,K.useCallback)(async e=>{try{return(await G.get(`/quotes/${e}/events`)).data.data??[]}catch{return[]}},[]),h=(0,K.useCallback)(async e=>{s(!0);try{return(await G.post(`/quotes`,e)).data.data}finally{s(!1)}},[]),g=(0,K.useCallback)(async(e,t)=>{s(!0);try{return(await G.patch(`/quotes/${e}`,t)).data.data}finally{s(!1)}},[]),_=(0,K.useCallback)(async e=>{await G.delete(`/quotes/${e}`)},[]),v=(0,K.useCallback)(async(e,t)=>{s(!0);try{return(await G.post(`/quotes/${e}/send`,{channel:t})).data.data.delivery}finally{s(!1)}},[]),y=(0,K.useCallback)(async e=>(await G.post(`/quotes/${e}/revise`)).data.data,[]),b=(0,K.useCallback)(async(e,t)=>(await G.post(`/quotes/${e}/duplicate`,t?{contactId:t}:{})).data.data,[]),x=(0,K.useCallback)(async e=>{let t={};
3e.search&&(t.search=e.search),e.status&&(t.status=e.status),e.type&&(t.type=e.type);let n=await G.get(`/quotes/export`,{params:t,responseType:`blob`}),r=URL.createObjectURL(n.data),i=document.createElement(`a`);i.href=r,i.download=`bao-gia-${new Date().toISOString().slice(0,10)}.csv`,i.click(),URL.revokeObjectURL(r)},[]);return{quotes:e,total:n,loading:i,saving:o,filters:c,setFilters:l,page:u,setPage:d,limit:20,fetchQuotes:f,fetchQuote:p,fetchEvents:m,createQuote:h,updateQuote:g,deleteQuote:_,sendQuote:v,reviseQuote:y,duplicateQuote:b,convertToContract:(0,K.useCallback)(async e=>(await G.post(`/quotes/${e}/convert-to-contract`)).data.data,[]),respondQuote:(0,K.useCallback)(async(e,t,n)=>(await G.post(`/quotes/${e}/respond`,{action:t,reason:n})).data.data,[]),exportCsv:x}}function zu(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(!1);return{templates:e,loading:n,fetchTemplates:(0,K.useCallback)(async()=>{r(!0);try{let e=(await G.get(`/quote-templates`)).data.data??[];return t(e),e}catch{return t([]),[]}finally{r(!1)}},[]),saveTemplate:(0,K.useCallback)(async(e,t)=>(t?await G.patch(`/quote-templates/${t}`,e):await G.post(`/quote-templates`,e)).data.data,[]),deleteTemplate:(0,K.useCallback)(async e=>{await G.delete(`/quote-templates/${e}`)},[])}}function Bu(e){return Number.isFinite(e)?Math.round((e+2**-52)*100)/100:0}var Vu=e=>e==null||!Number.isFinite(e)?0:Math.min(100,Math.max(0,e)),Hu=e=>e==null||!Number.isFinite(e)?0:Math.max(0,e);function Uu(e,t,n=0){return Bu(Hu(e)*Hu(t)*(1-Vu(n)/100))}function Wu(e,t={}){let n=Bu(e.reduce((e,t)=>e+Uu(t.quantity,t.unitPrice,t.discountPercent),0)),r=t.discountType??`none`,i=Hu(t.discountValue),a=0;r===`percent`?a=Bu(n*(Vu(i)/100)):r===`amount`&&(a=Bu(Math.min(i,n)));let o=Bu(n-a),s=Bu(o*(Vu(t.taxRate)/100));return{subtotal:n,discountAmount:a,taxAmount:s,total:Bu(o+s)}}function Gu(e){switch(e.priceType){case`free`:return`Miễn phí`;case`contact`:return`Liên hệ báo giá`;case`description`:return`Theo mô tả`;case`range`:return e.price!=null&&e.priceMax!=null?`${Mn(e.price)} – ${Mn(e.priceMax)}`:e.price==null?`Liên hệ báo giá`:`Từ ${Mn(e.price)}`;default:return e.price==null?`Liên hệ báo giá`:Mn(e.price)}}function Ku({onPick:e,onClose:t}){let[n,r]=(0,K.useState)(``),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{let e=!1,t=setTimeout(async()=>{s(!0);try{let t=await G.get(`/products`,{params:{search:n,limit:30,status:`active`}});e||a(t.data.data??[])}catch{e||a([])}finally{e||s(!1)}},300);return()=>{e=!0,clearTimeout(t)}},[n]),(0,q.jsx)(`div`,{className:`q-modal`,onClick:t,children:(0,q.jsxs)(`div`,{className:`q-modal__panel`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{className:`q-modal__head`,children:[(0,q.jsx)(`h3`,{children:`Chọn sản phẩm`}),(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--icon`,onClick:t,children:(0,q.jsx)(U,{size:16})})]}),(0,q.jsxs)(`div`,{className:`q-modal__search`,children:[(0,q.jsx)(_t,{size:15}),(0,q.jsx)(`input`,{className:`q-input`,autoFocus:!0,placeholder:`Tìm theo tên hoặc mã sản phẩm…`,value:n,onChange:e=>r(e.target.value)})]}),(0,q.jsxs)(`div`,{className:`q-modal__body`,children:[o&&(0,q.jsx)(`p`,{className:`q-muted`,children:`Đang tải…`}),!o&&i.length===0&&(0,q.jsx)(`p`,{className:`q-muted`,children:`Không tìm thấy sản phẩm nào.`}),i.map(t=>(0,q.jsxs)(`button`,{type:`button`,className:`q-pick`,onClick:()=>e({id:t.id,name:t.name,price:t.priceType===`fixed`||t.priceType===`range`?t.price:0,description:t.description}),children:[(0,q.jsxs)(`span`,{className:`q-pick__name`,children:[t.name,t.code&&(0,q.jsx)(`em`,{className:`q-pick__code`,children:t.code})]}),(0,q.jsx)(`span`,{className:`q-pick__price`,children:Gu(t)})]},t.id))]})]})})}var qu=()=>({name:``,description:null,quantity:1,unit:`cái`,unitPrice:0,discountPercent:0});function Ju({lines:e,onChange:t,disabled:n}){let[r,i]=(0,K.useState)(null),a=(n,r)=>{t(e.map((e,t)=>t===n?{...e,...r}:e))},o=(n,r)=>{let i=n+r;if(i<0||i>=e.length)return;let a=[...e];[a[n],a[i]]=[a[i],a[n]],t(a)};return(0,q.jsxs)(`div`,{className:`q-lines`,children:[(0,q.jsxs)(`div`,{className:`q-lines__head`,children:[(0,q.jsxs)(`span`,{className:`q-lines__title`,children:[`Dòng hàng (`,e.length,`)`]}),!n&&(0,q.jsxs)(`button`,{type:`button`,className:`q-btn q-btn--ghost q-btn--sm`,onClick:()=>t([...e,qu()]),children:[(0,q.jsx)(B,{size:14}),` Thêm dòng`]})]}),e.length===0&&(0,q.jsx)(`p`,{className:`q-lines__empty`,children:`Chưa có dòng hàng nào. Bấm "Thêm dòng" để bắt đầu.`}),e.map((r,s)=>{let c=Uu(r.quantity,r.unitPrice,r.discountPercent);return(0,q.jsxs)(`div`,{className:`q-line`,children:[(0,q.jsx)(`div`,{className:`q-line__no`,children:s+1}),(0,q.jsxs)(`div`,{className:`q-line__body`,children:[(0,q.jsxs)(`div`,{className:`q-line__row`,children:[(0,q.jsx)(`input`,{className:`q-input q-line__name`,placeholder:`Tên hàng hoá / dịch vụ`,value:r.name,disabled:n,onChange:e=>a(s,{name:e.target.value})}),!n&&(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--ghost q-btn--icon`,title:`Chọn từ danh má
3»¥c sản phẩm`,onClick:()=>i(s),children:(0,q.jsx)(ie,{size:15})})]}),(0,q.jsx)(`input`,{className:`q-input q-line__desc`,placeholder:`Mô tả (không bắt buộc)`,value:r.description??``,disabled:n,onChange:e=>a(s,{description:e.target.value||null})}),(0,q.jsxs)(`div`,{className:`q-line__grid`,children:[(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Số lượng`}),(0,q.jsx)(`input`,{className:`q-input`,type:`number`,min:0,step:`0.001`,value:r.quantity,disabled:n,onChange:e=>a(s,{quantity:Number(e.target.value)})})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`ĐVT`}),(0,q.jsx)(`input`,{className:`q-input`,list:`q-units`,value:r.unit,disabled:n,onChange:e=>a(s,{unit:e.target.value})})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Đơn giá`}),(0,q.jsx)(`input`,{className:`q-input`,type:`number`,min:0,step:`1000`,value:r.unitPrice,disabled:n,onChange:e=>a(s,{unitPrice:Number(e.target.value)})})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`CK %`}),(0,q.jsx)(`input`,{className:`q-input`,type:`number`,min:0,max:100,step:`1`,value:r.discountPercent,disabled:n,onChange:e=>a(s,{discountPercent:Number(e.target.value)})})]}),(0,q.jsxs)(`div`,{className:`q-field q-field--amount`,children:[(0,q.jsx)(`span`,{children:`Thành tiền`}),(0,q.jsx)(`strong`,{children:Mn(c)})]})]})]}),!n&&(0,q.jsxs)(`div`,{className:`q-line__actions`,children:[(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--icon`,title:`Lên`,disabled:s===0,onClick:()=>o(s,-1),children:(0,q.jsx)(xe,{size:14})}),(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--icon`,title:`Xuống`,disabled:s===e.length-1,onClick:()=>o(s,1),children:(0,q.jsx)(H,{size:14})}),(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--icon q-btn--danger`,title:`Xoá dòng`,onClick:()=>t(e.filter((e,t)=>t!==s)),children:(0,q.jsx)(R,{size:14})})]})]},s)}),(0,q.jsx)(`datalist`,{id:`q-units`,children:jn.map(e=>(0,q.jsx)(`option`,{value:e},e))}),r!==null&&(0,q.jsx)(Ku,{onClose:()=>i(null),onPick:e=>{a(r,{productId:e.id,name:e.name,unitPrice:e.price??0,description:e.description??null}),i(null)}})]})}function Yu({quote:e,presetContactId:t,onClose:n,onSaved:r}){let i=!!e,[a,o]=(0,K.useState)(e?.contact?.id??t??``),[s,c]=(0,K.useState)(``),[l,u]=(0,K.useState)([]),[d,f]=(0,K.useState)(e?.title??``),[p,m]=(0,K.useState)(e?.type??`quote`),[h,g]=(0,K.useState)(e?.lines??[]),[_,v]=(0,K.useState)(e?.discountType??`none`),[y,b]=(0,K.useState)(e?.discountValue??0),[x,S]=(0,K.useState)(e?.taxRate??0),[C,w]=(0,K.useState)(e?.notes??``),[T,E]=(0,K.useState)(e?.internalNotes??``),[D,O]=(0,K.useState)(e?.validUntil?.slice(0,10)??``),[k,A]=(0,K.useState)(!1),[j,M]=(0,K.useState)(``),{fetchTemplates:N}=zu();(0,K.useEffect)(()=>{if(i)return;let e=!1;return N().then(t=>{e||t.length===0||S((t.find(e=>e.isDefault)??t[0]).defaultTaxRate)}),()=>{e=!0}},[i,N]),(0,K.useEffect)(()=>{if(i)return;let e=!1,t=setTimeout(async()=>{try{let t=await G.get(`/contacts`,{params:{search:s,limit:20}}),n=t.data?.contacts??t.data?.data??[];e||u(Array.isArray(n)?n:[])}catch{}},300);return()=>{e=!0,clearTimeout(t)}},[s,i]);let P=(0,K.useMemo)(()=>Wu(h,{discountType:_,discountValue:y,taxRate:x}),[h,_,y,x]);return(0,q.jsx)(`div`,{className:`q-drawer-overlay`,onClick:n,children:(0,q.jsxs)(`aside`,{className:`q-drawer q-drawer--wide`,onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`header`,{className:`q-drawer__head`,children:[(0,q.jsx)(`h2`,{children:i?`Sá»­a ${e.number}`:`Tạo báo giá mới`}),(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--icon`,onClick:n,children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsxs)(`div`,{className:`q-drawer__body`,children:[!i&&(0,q.jsxs)(`section`,{className:`q-section`,children:[(0,q.jsx)(`h3`,{children:`Khách hàng`}),(0,q.jsx)(`input`,{className:`q-input`,placeholder:`Tìm khách hàng…`,value:s,onChange:e=>c(e.target.value)}),(0,q.jsxs)(`select`,{className:`q-input`,value:a,onChange:e=>o(e.target.value),children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn khách hàng —`}),l.map(e=>(0,q.jsxs)(`option`,{value:e.id,children:[e.crmName||e.fullName||`Không tên`,e.phone?` — ${pn(e.phone)}`:``]},e.id))]})]}),(0,q.jsxs)(`section`,{className:`q-section`,children:[(0,q.jsxs)(`div`,{className:`q-section__grid2`,children:[(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Loại chứng từ`}),(0,q.jsxs)(`select`,{className:`q-input`,value:p,onChange:e=>m(e.target.value),children:[(0,q.jsx)(`option`,{value:`quote`,children:`Báo giá`}),(0,q.jsx)(`option`,{value:`contract`,children:`Hợp đồng`})]})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Hiệu lá»±c đến`}),(0,q.jsx)(`input`,{className:`q-input`,type:`date`,value:D,onChange:e=>O(e.target.value)})]})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Tiêu đề`}),(0,q.jsx)(`input`,{className:`q-input`,placeholder:`VD: Báo giá dịch vụ thiết kế website`,value:d,onChange:e=>f(e.target.value)})]})]}),(0,q.jsx)(`section`,{className:`q-section`,children:(0,q.jsx)(Ju,{lines:h,onChange:g})}),(0,q.jsxs)(`section`,{className:`q-section`,children:[(0,q.jsx)(`h3`,{children:`Chiết khấu & thuế`}),(0,q.jsxs)(`div`,{className:`q-section__grid3`,children:[(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Kiểu chiết khấu`}
3),(0,q.jsxs)(`select`,{className:`q-input`,value:_,onChange:e=>v(e.target.value),children:[(0,q.jsx)(`option`,{value:`none`,children:`Không chiết khấu`}),(0,q.jsx)(`option`,{value:`percent`,children:`Theo %`}),(0,q.jsx)(`option`,{value:`amount`,children:`Số tiền`})]})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Giá trị`}),(0,q.jsx)(`input`,{className:`q-input`,type:`number`,min:0,disabled:_===`none`,value:y,onChange:e=>b(Number(e.target.value))})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Thuế GTGT`}),(0,q.jsx)(`select`,{className:`q-input`,value:x,onChange:e=>S(Number(e.target.value)),children:kn.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,q.jsxs)(`div`,{className:`q-totals`,children:[(0,q.jsxs)(`div`,{className:`q-totals__row`,children:[(0,q.jsx)(`span`,{children:`Cộng tiền hàng`}),(0,q.jsx)(`span`,{children:Mn(P.subtotal)})]}),P.discountAmount>0&&(0,q.jsxs)(`div`,{className:`q-totals__row q-totals__row--minus`,children:[(0,q.jsx)(`span`,{children:`Chiết khấu`}),(0,q.jsxs)(`span`,{children:[`−`,Mn(P.discountAmount)]})]}),P.taxAmount>0&&(0,q.jsxs)(`div`,{className:`q-totals__row`,children:[(0,q.jsxs)(`span`,{children:[`Thuế GTGT (`,x,`%)`]}),(0,q.jsx)(`span`,{children:Mn(P.taxAmount)})]}),(0,q.jsxs)(`div`,{className:`q-totals__row q-totals__row--grand`,children:[(0,q.jsx)(`span`,{children:`Tổng cộng`}),(0,q.jsxs)(`span`,{children:[Mn(P.total),` ₫`]})]})]})]}),(0,q.jsxs)(`section`,{className:`q-section`,children:[(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Điều khoản / ghi chú (khách hàng nhìn thấy)`}),(0,q.jsx)(`textarea`,{className:`q-input q-textarea`,rows:3,placeholder:`VD: Thanh toán 50% khi ký hợp đồng, 50% khi bàn giao.`,value:C,onChange:e=>w(e.target.value)})]}),(0,q.jsxs)(`label`,{className:`q-field`,children:[(0,q.jsx)(`span`,{children:`Ghi chú nội bộ (khách KHÔNG thấy)`}),(0,q.jsx)(`textarea`,{className:`q-input q-textarea`,rows:2,value:T,onChange:e=>E(e.target.value)})]})]}),j&&(0,q.jsx)(`p`,{className:`q-error`,children:j})]}),(0,q.jsxs)(`footer`,{className:`q-drawer__foot`,children:[(0,q.jsx)(`button`,{type:`button`,className:`q-btn`,onClick:n,children:`Huỷ`}),(0,q.jsx)(`button`,{type:`button`,className:`q-btn q-btn--primary`,disabled:k,onClick:async()=>{if(M(``),!a)return M(`Vui lòng chọn khách hàng`);if(h.length===0)return M(`Báo giá phải có ít nhất 1 dòng hàng`);if(h.some(e=>!e.name.trim()))return M(`Có dòng hàng chưa nhập tên`);let t={contactId:a,type:p,title:d||null,lines:h.map(e=>({productId:e.productId??null,name:e.name,description:e.description??null,quantity:e.quantity,unit:e.unit,unitPrice:e.unitPrice,discountPercent:e.discountPercent})),discountType:_,discountValue:y,taxRate:x,notes:C||null,internalNotes:T||null,validUntil:D||null};A(!0);try{r((i?await G.patch(`/quotes/${e.id}`,t):await G.post(`/quotes`,t)).data.data)}catch(e){let t=e.response?.data?.error?.message;M(t??`Lưu thất bại, vui lòng thử lại`)}finally{A(!1)}},children:k?`Đang lưu…`:i?`Lưu thay đổi`:`Tạo báo giá`})]})]})})}function Xu({contactId:e,compact:t}){let[n,r]=(0,K.useState)(null),[i,a]=(0,K.useState)(!1),o=n===null,s=(0,K.useCallback)(async()=>{try{return(await G.get(`/quotes`,{params:{contactId:e,limit:20}})).data.data??[]}catch{return[]}},[e]);(0,K.useEffect)(()=>{let e=!1;return s().then(t=>{e||r(t)}),()=>{e=!0}},[s]);let c=()=>{s().then(r)},l=n??[],u=l.filter(e=>e.status===`accepted`).reduce((e,t)=>e+t.total,0);return(0,q.jsxs)(`div`,{className:`q-cpanel`,children:[(0,q.jsxs)(`div`,{className:`q-cpanel__head`,children:[(0,q.jsxs)(`span`,{className:`q-cpanel__title`,children:[`Báo giá `,l.length>0&&(0,q.jsxs)(`em`,{className:`q-muted`,children:[`(`,l.length,`)`]})]}),!t&&(0,q.jsxs)(`button`,{type:`button`,className:`q-btn q-btn--sm`,onClick:()=>a(!0),children:[(0,q.jsx)(B,{size:13}),` Tạo`]})]}),o&&(0,q.jsx)(`p`,{className:`q-muted q-small`,children:`Đang tải…`}),!o&&l.length===0&&(0,q.jsxs)(`div`,{className:`q-cpanel__empty`,children:[(0,q.jsx)(zt,{size:22}),(0,q.jsx)(`p`,{children:`Chưa có báo giá nào cho khách này.`}),(0,q.jsxs)(`button`,{type:`button`,className:`q-btn q-btn--sm q-btn--primary`,onClick:()=>a(!0),children:[(0,q.jsx)(B,{size:13}),` Tạo báo giá`]})]}),u>0&&(0,q.jsxs)(`p`,{className:`q-cpanel__won`,children:[`Đã chốt: `,(0,q.jsxs)(`strong`,{children:[Mn(u),` ₫`]})]}),l.map(e=>{let t=An(e.status);return(0,q.jsxs)(`a`,{className:`q-cquote`,href:`/quotes?id=${e.id}`,target:`_blank`,rel:`noreferrer`,children:[(0,q.jsxs)(`span`,{className:`q-cquote__top`,children:[(0,q.jsx)(`strong`,{children:e.number}),(0,q.jsx)(`span`,{className:`q-badge`,style:{background:t.bg,color:t.color},children:t.label})]}),(0,q.jsxs)(`span`,{className:`q-cquote__mid`,children:[e.title||`Không tiêu đề`,(0,q.jsx)(Rt,{size:11})]}),(0,q.jsxs)(`span`,{className:`q-cquote__bot`,children:[(0,q.jsxs)(`strong`,{children:[Mn(e.total),` ₫`]}),(0,q.jsxs)(`em`,{className:`q-muted`,children:[On(e.createdAt),e.viewCount>0&&` · ${e.viewCount} lượt xem`]})]})]},e.id)}
3),i&&(0,q.jsx)(Yu,{presetContactId:e,onClose:()=>a(!1),onSaved:()=>{a(!1),c()}})]})}function Zu(e,t){let n=e?.response?.data?.error;return typeof n==`string`?n:n?.message||t}function Qu(e){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(null),s=(0,K.useCallback)(async()=>{if(!e)return[];i(!0),o(null);try{let t=(await G.get(`/contacts/${e}/memory`)).data?.data??[];return n(t),t}catch(e){return o(Zu(e,`Không tải được trí nhớ khách hàng`)),[]}finally{i(!1)}},[e]);return{facts:t,loading:r,error:a,fetchFacts:s,updateFact:(0,K.useCallback)(async(t,n)=>{if(!e)return!1;o(null);try{return await G.put(`/contacts/${e}/memory`,n,{params:{factId:t}}),await s(),!0}catch(e){return o(Zu(e,`Không cập nhật được ghi nhớ`)),!1}},[e,s]),deleteFact:(0,K.useCallback)(async t=>{if(!e)return!1;o(null);try{return await G.delete(`/contacts/${e}/memory`,{params:{factId:t}}),await s(),!0}catch(e){return o(Zu(e,`Không xóa được ghi nhớ`)),!1}},[e,s]),clearError:()=>o(null)}}var $u={preference:`Sở thích`,fact:`Thông tin`,constraint:`Ràng buộc`,goal:`Mục tiêu`,note:`Ghi chú`};function ed(e){return $u[e]??e}function td({contactId:e}){let{facts:t,loading:n,error:r,fetchFacts:i,updateFact:a,deleteFact:o}=Qu(e),[s,c]=(0,K.useState)(null),[l,u]=(0,K.useState)(``),[d,f]=(0,K.useState)(null);(0,K.useEffect)(()=>{i()},[i]);let p=e=>{c(e.id),u(e.content)},m=()=>{c(null),u(``)},h=async e=>{let t=l.trim();if(!t||t===e.content){m();return}f(e.id),await a(e.id,{content:t}),f(null),m()},g=async e=>{f(e.id),await a(e.id,{isActive:!e.isActive}),f(null)},_=async e=>{f(e.id),await o(e.id),f(null)};return(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{className:`form-section__title`,children:[(0,q.jsx)(Ge,{size:14,style:{marginRight:6}}),` Trí nhớ AI (`,t.length,`)`]}),r&&(0,q.jsx)(`div`,{className:`cmem__error`,children:r}),n&&t.length===0?(0,q.jsxs)(`div`,{className:`cmem__loading`,children:[(0,q.jsx)(Zt,{size:14,className:`spin`}),` Đang tải…`]}):t.length===0?(0,q.jsx)(`p`,{className:`cmem__empty`,children:`Chưa có ghi nhớ nào. AI sẽ tự lưu khi trò chuyện với khách.`}):(0,q.jsx)(`ul`,{className:`cmem__list`,children:t.map(e=>{let t=s===e.id,n=d===e.id;return(0,q.jsxs)(`li`,{className:`cmem__item ${e.isActive?``:`cmem__item--inactive`}`,children:[(0,q.jsxs)(`div`,{className:`cmem__item-head`,children:[(0,q.jsx)(`span`,{className:`cmem__kind`,children:ed(e.kind)}),!e.isActive&&(0,q.jsx)(`span`,{className:`cmem__off-tag`,children:`Đã tắt`})]}),t?(0,q.jsxs)(`div`,{className:`cmem__edit`,children:[(0,q.jsx)(`textarea`,{className:`cmem__edit-input`,value:l,onChange:e=>u(e.target.value),rows:2,autoFocus:!0}),(0,q.jsxs)(`div`,{className:`cmem__edit-actions`,children:[(0,q.jsx)(`button`,{className:`cmem__icon-btn`,onClick:()=>void h(e),disabled:n,title:`Lưu`,children:n?(0,q.jsx)(Zt,{size:13,className:`spin`}):(0,q.jsx)(te,{size:13})}),(0,q.jsx)(`button`,{className:`cmem__icon-btn`,onClick:m,disabled:n,title:`Huỷ`,children:(0,q.jsx)(U,{size:13})})]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`cmem__content`,children:e.content}),(0,q.jsxs)(`div`,{className:`cmem__actions`,children:[(0,q.jsx)(`button`,{className:`cmem__icon-btn`,onClick:()=>void g(e),disabled:n,title:e.isActive?`Tắt`:`Bật`,children:e.isActive?(0,q.jsx)(Ke,{size:13}):(0,q.jsx)(Tt,{size:13})}),(0,q.jsx)(`button`,{className:`cmem__icon-btn`,onClick:()=>p(e),disabled:n,title:`Sửa`,children:(0,q.jsx)(S,{size:13})}),(0,q.jsx)(`button`,{className:`cmem__icon-btn cmem__icon-btn--danger`,onClick:()=>void _(e),disabled:n,title:`Xoá`,children:n?(0,q.jsx)(Zt,{size:13,className:`spin`}):(0,q.jsx)(R,{size:13})})]})]})]},e.id)})})]})}var nd={lead:`#3b82f6`,prospect:`#8b5cf6`,qualified:`#f59e0b`,negotiation:`#ec4899`,customer:`#16a34a`,churned:`#ef4444`,reactivated:`#0ea5e9`},rd={lead:`Lead`,prospect:`Prospect`,qualified:`Qualified`,negotiation:`Negotiation`,customer:`Customer`,churned:`Churned`,reactivated:`Reactivated`};function id(e){let t=new Date(e);return t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,year:`2-digit`})+` `+t.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`})}function ad({contactId:e}){let{lifecycle:t,loading:n,updateStage:r}=gu(e),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(``),[u,d]=(0,K.useState)(``),[f,p]=(0,K.useState)(!1),m=(0,K.useCallback)(async()=>
3{if(c){p(!0);try{await r(c,u||void 0),s(!1),l(``),d(``)}finally{p(!1)}}},[c,u,r]);if(n)return(0,q.jsx)(`div`,{style:{padding:12,fontSize:12,color:`var(--gray-400)`},children:`Đang tải vòng đời...`});if(!t)return null;let h=t.stages,g=h.indexOf(t.currentStage||``);return(0,q.jsxs)(`div`,{className:`lifecycle-widget`,children:[(0,q.jsx)(`div`,{className:`lifecycle-stepper`,children:h.map((e,n)=>{let r=nd[e]||`#94a3b8`,i=t.stageLabels[e]||rd[e]||e,a=n<g,o=n===g;return(0,q.jsxs)(`div`,{className:`lifecycle-step`,"data-state":o?`current`:a?`past`:`future`,children:[(0,q.jsx)(`div`,{className:`lifecycle-step__indicator`,style:{background:o?r:a?r+`30`:`var(--gray-100)`,borderColor:o||a?r:`var(--gray-200)`,color:o?`#fff`:a?r:`var(--gray-400)`},children:a?(0,q.jsx)(_e,{size:12}):o?(0,q.jsx)(De,{size:10,fill:`currentColor`}):(0,q.jsx)(De,{size:10})}),n<h.length-1&&(0,q.jsx)(`div`,{className:`lifecycle-step__line`,style:{background:a?r+`40`:`var(--gray-200)`}}),(0,q.jsx)(`span`,{className:`lifecycle-step__label`,style:{color:o?r:a?`var(--gray-600)`:`var(--gray-400)`,fontWeight:o?700:400},children:i})]},e)})}),(0,q.jsxs)(`div`,{className:`lifecycle-actions`,children:[(0,q.jsxs)(`button`,{className:`lifecycle-btn lifecycle-btn--primary`,onClick:()=>s(!o),children:[(0,q.jsx)(Je,{size:12}),` Chuyển giai đoạn`]}),(0,q.jsxs)(`button`,{className:`lifecycle-btn lifecycle-btn--ghost`,onClick:()=>a(!i),children:[(0,q.jsx)(Jt,{size:12}),` Lịch sử (`,t.history.length,`)`,i?(0,q.jsx)(xe,{size:12}):(0,q.jsx)(H,{size:12})]})]}),o&&(0,q.jsx)(`div`,{className:`lifecycle-transition`,children:(0,q.jsxs)(`div`,{style:{display:`flex`,gap:8,alignItems:`center`},children:[(0,q.jsxs)(`select`,{value:c,onChange:e=>l(e.target.value),style:{flex:1,padding:`6px 10px`,borderRadius:6,border:`1px solid var(--gray-200)`,fontSize:12,background:`#fff`,outline:`none`},children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn giai đoạn —`}),h.filter(e=>e!==t.currentStage).map(e=>(0,q.jsx)(`option`,{value:e,children:t.stageLabels[e]||rd[e]||e},e))]}),(0,q.jsx)(`input`,{value:u,onChange:e=>d(e.target.value),placeholder:`Lý do (tùy chọn)...`,style:{flex:1,padding:`6px 10px`,borderRadius:6,border:`1px solid var(--gray-200)`,fontSize:12,outline:`none`}}),(0,q.jsx)(`button`,{onClick:m,disabled:!c||f,style:{padding:`6px 14px`,borderRadius:6,border:`none`,background:`var(--primary)`,color:`#fff`,fontSize:12,fontWeight:500,cursor:c?`pointer`:`not-allowed`,opacity:!c||f?.5:1,whiteSpace:`nowrap`},children:f?`Đang chuyển...`:`Chuyển`})]})}),i&&t.history.length>0&&(0,q.jsx)(`div`,{className:`lifecycle-history`,children:t.history.map(e=>(0,q.jsxs)(`div`,{className:`lifecycle-history__item`,children:[(0,q.jsx)(`div`,{className:`lifecycle-history__icon`,children:(0,q.jsx)(Xt,{size:10})}),(0,q.jsxs)(`div`,{className:`lifecycle-history__content`,children:[(0,q.jsxs)(`span`,{className:`lifecycle-history__stages`,children:[(0,q.jsx)(`span`,{style:{color:nd[e.fromStage||``]||`var(--gray-400)`},children:t.stageLabels[e.fromStage||``]||rd[e.fromStage||``]||e.fromStage||`—`}),(0,q.jsx)(Xt,{size:10,style:{color:`var(--gray-300)`,flexShrink:0}}),(0,q.jsx)(`span`,{style:{color:nd[e.toStage]||`var(--gray-600)`,fontWeight:600},children:t.stageLabels[e.toStage]||rd[e.toStage]||e.toStage})]}),e.reason&&(0,q.jsx)(`span`,{className:`lifecycle-history__reason`,children:e.reason})]}),(0,q.jsx)(`span`,{className:`lifecycle-history__time`,children:id(e.createdAt)})]},e.id))}),i&&t.history.length===0&&(0,q.jsx)(`div`,{style:{padding:`12px 0`,fontSize:12,color:`var(--gray-400)`,textAlign:`center`},children:`Chưa có lịch sử chuyển đổi`})]})}var od=[{text:`Zalo`,value:`Zalo`},{text:`Facebook`,value:`Facebook`},{text:`WhatsApp`,value:`WhatsApp`},{text:`Website`,value:`Website`},{text:`LinkedIn`,value:`LinkedIn`},{text:`Giới thiệu`,value:`Referral`},{text:`Khác`,value:`Other`}];function sd(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(0),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(null),[u,d]=(0,K.useState)({search:``,source:[],lifecycleStage:[],companyId:null,assignedUserId:[]}),[f,p]=(0,K.useState)(1),[m]=(0,K.useState)(20),h=(0,K.useRef)(u);h.current=u;let g=(0,K.useRef)(f);g.current=f;let _=(0,K.useCallback)(async()=>{a(!0);try{let e=h.current,n=await G.get(`/contacts`,{params:{page:g.current,limit:m,search:e.search||void 0,source:e.source.length?e.source.join(`,`):void 0,lifecycleStage:e.lifecycleStage.length?e.lifecycleStage.join(`,`):void 0,companyId:e.companyId||void 0,assignedUserId:e.assignedUserId.length?e.assignedUserId.join(`,`):void 0}});t(n.data.contacts??n.data),r(n.data.total??0)}catch(e){console.error(`Failed to fetch contacts:`,e)}finally{a(!1)}},[m]),v=(0,K.useCallback)(async e=>{try{return(await G.get(`/contacts/${e}`)).data}catch(e){return console.error(`Failed to fetch contact:`,e),null}},[]),y=(0,K.useCallback)(async e=>{s(!0),l(null);try{let t=await G.post(`/contacts`,e);return await _(),t.data}catch(e){return console.error(`Failed to create contact:`,e),l(rn(e)),null}finally{s(!1)}},[_]),b=(0,K.useCallback)(async(e,n)=>{s(!0);try{let r=await G.put(`/contacts/${e}`,n);return t(t=>t.map(t=>
3t.id===e?r.data:t)),r.data}catch(e){return console.error(`Failed to update contact:`,e),null}finally{s(!1)}},[]),x=(0,K.useCallback)(async e=>{try{return await G.delete(`/contacts/${e}`),await _(),!0}catch(e){return console.error(`Failed to delete contact:`,e),!1}},[_]),S=(0,K.useCallback)(async e=>{try{let n=await G.post(`/contacts/${e}/recompute-score`);return t(t=>t.map(t=>t.id===e?n.data:t)),n.data}catch(e){return console.error(`Failed to recompute lead score:`,e),null}},[]),C=(0,K.useCallback)(()=>{d({search:``,source:[],lifecycleStage:[],companyId:null,assignedUserId:[]}),p(1)},[]),w=(0,K.useCallback)(async(e,n=`customer`,r)=>{s(!0);try{await G.post(`/contacts/${e}/convert`,{toStage:n,reason:r});let i=await G.get(`/contacts/${e}`);return t(t=>t.map(t=>t.id===e?i.data:t)),i.data}catch(e){return console.error(`Failed to convert contact:`,e),null}finally{s(!1)}},[]);return{contacts:e,total:n,loading:i,saving:o,filters:u,page:f,limit:m,setPage:p,setFilters:d,updateFilter:(0,K.useCallback)((e,t)=>{d(n=>({...n,[e]:t})),p(1)},[]),fetchContacts:_,fetchContact:v,saveError:c,createContact:y,updateContact:b,deleteContact:x,convertContact:w,mergeContacts:(0,K.useCallback)(async(e,t)=>{s(!0);try{return await G.post(`/contacts/merge`,{primaryId:e,mergeIds:t}),await _(),!0}catch(e){return console.error(`Failed to merge contacts:`,e),!1}finally{s(!1)}},[_]),recomputeLeadScore:S,resetFilters:C}}function cd(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(0),[i,a]=(0,K.useState)(!1),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(!1);return{duplicateGroups:e,duplicateTotal:n,loadingDuplicates:i,merging:o,scanning:c,fetchDuplicateGroups:(0,K.useCallback)(async(e=1,n=20)=>{a(!0);try{let i=await G.get(`/contacts/duplicates`,{params:{page:e,limit:n,resolved:`false`}});t(i.data.groups??[]),r(i.data.total??0)}catch(e){console.error(`Failed to fetch duplicate groups:`,e)}finally{a(!1)}},[]),mergeDuplicateGroup:(0,K.useCallback)(async(e,t)=>{s(!0);try{return await G.post(`/contacts/duplicates/${e}/merge`,{primaryContactId:t}),!0}catch(e){return console.error(`Failed to merge contacts:`,e),!1}finally{s(!1)}},[]),scanDuplicates:(0,K.useCallback)(async()=>{l(!0);try{return(await G.post(`/contacts/duplicates/scan`)).data}catch(e){return console.error(`Failed to scan duplicates:`,e),null}finally{l(!1)}},[]),dismissDuplicateGroup:(0,K.useCallback)(async e=>{try{return await G.post(`/contacts/duplicates/${e}/dismiss`),!0}catch(e){return console.error(`Failed to dismiss duplicate group:`,e),!1}},[])}}function ld(e,t){return an.isAxiosError(e)?e.response?.data?.error??t:t}var ud={text:`Văn bản`,number:`Số`,date:`Ngày`,boolean:`Có/Không`,single_select:`Chọn đơn`,multi_select:`Chọn nhiều`},dd=Object.keys(ud);function fd(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(null),o=(0,K.useCallback)(async()=>{r(!0);try{let{data:e}=await G.get(`/cdp/properties`);t(e.properties),a(null)}catch(e){a(ld(e,`Failed to load properties`))}finally{r(!1)}},[]);return(0,K.useEffect)(()=>{o()},[o]),{properties:e,loading:n,error:i,fetchProperties:o,createProperty:(0,K.useCallback)(async e=>{let{data:n}=await G.post(`/cdp/properties`,e);return t(e=>[...e,n.property]),n.property},[]),updateProperty:(0,K.useCallback)(async(e,n)=>{let{data:r}=await G.put(`/cdp/properties/${e}`,n);return t(t=>t.map(t=>t.id===e?r.property:t)),r.property},[]),deleteProperty:(0,K.useCallback)(async e=>{await G.delete(`/cdp/properties/${e}`),t(t=>t.filter(t=>t.id!==e))},[])}}function pd(e){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),a=(0,K.useCallback)(async()=>{if(e){i(!0);try{let{data:t}=await G.get(`/contacts/${e}/properties`);n(t.properties)}catch(e){console.error(`Failed to load contact properties:`,e)}finally{i(!1)}}},[e]);return(0,K.useEffect)(()=>{a()},[a]),{propertyValues:t,loading:r,fetchValues:a,saveValues:(0,K.useCallback)(async t=>{e&&(await G.put(`/contacts/${e}/properties`,{values:t}),await a())},[e,a])}}function md(e){let t=typeof e==`number`?e:0;return t>=70?`cust-score--high`:t>=30?`cust-score--medium`:`cust-score--low`}function hd(){return{fullName:``,crmName:``,phone:``,email:``,source:``,lifecycleStage:os,nextAppointment:``,firstContactDate:``,notes:``,tags:``}}function gd(e){if(!e)return``;try{return new Date(e).toISOString().split(`T`)[0]}catch{return``}}function _d({contactId:e}){let{propertyValues:t,loading:n,saveValues:r}=pd(e),[i,a]=(0,K.useState)({}),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(()=>{try{return JSON.parse(localStorage.getItem(`cdp-accordion`)||`{}`)}catch{return{}}});(0,K.useEffect)(()=>{let e={};t.forEach(t=>{e[t.id]=t.value}),a(e),s(!1);let n={},r={};
3t.forEach(e=>{let t=e.groupName||`Chung`;(r[t]??=[]).push(e)});for(let[e,t]of Object.entries(r))n[e]=!t.some(e=>e.value&&e.value!==``&&e.value!==`false`);d(e=>({...n,...e}))},[t]);let f=e=>{d(t=>{let n={...t,[e]:!t[e]};return localStorage.setItem(`cdp-accordion`,JSON.stringify(n)),n})},p=(e,t)=>{a(n=>({...n,[e]:t})),s(!0)},m=async()=>{l(!0);try{await r(Object.entries(i).map(([e,t])=>({propertyId:e,value:t}))),s(!1)}finally{l(!1)}};if(n)return(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{className:`form-section__title`,children:[(0,q.jsx)(Re,{size:14}),` Trường tùy chỉnh`]}),(0,q.jsx)(`p`,{style:{fontSize:12,color:`var(--gray-400)`},children:`Đang tải...`})]});if(t.length===0)return null;let h={};t.forEach(e=>{let t=e.groupName||`Chung`;(h[t]??=[]).push(e)});let g=e=>{let t=i[e.id]??e.value;if(e.fieldType===`boolean`)return(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,style:{fontSize:12},children:e.name}),(0,q.jsxs)(`label`,{style:{display:`flex`,alignItems:`center`,gap:6,cursor:`pointer`},children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:t===`true`,onChange:t=>p(e.id,t.target.checked?`true`:`false`)}),(0,q.jsx)(`span`,{style:{fontSize:13,color:`var(--gray-700)`},children:t===`true`?`Có`:`Không`})]})]},e.id);if(e.fieldType===`single_select`){let n=e.options;return(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,style:{fontSize:12},children:e.name}),(0,q.jsx)(`div`,{className:`form-select-wrap`,children:(0,q.jsxs)(`select`,{className:`form-select`,value:t,onChange:t=>p(e.id,t.target.value),children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn —`}),n.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.label},e.value))]})})]},e.id)}return(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsx)(`label`,{className:`form-label`,style:{fontSize:12},children:e.name}),(0,q.jsx)(`input`,{className:`form-input`,type:e.fieldType===`number`?`number`:e.fieldType===`date`?`date`:`text`,value:t,onChange:t=>p(e.id,t.target.value),placeholder:e.description||``})]},e.id)};return(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,q.jsxs)(`div`,{className:`form-section__title`,style:{margin:0},children:[(0,q.jsx)(Re,{size:14,style:{marginRight:6}}),`Trường tùy chỉnh`]}),o&&(0,q.jsxs)(`button`,{className:`drawer-btn drawer-btn--primary`,onClick:m,disabled:c,style:{padding:`4px 10px`,fontSize:11},children:[(0,q.jsx)(kt,{size:12}),` `,c?`Lưu...`:`Lưu`]})]}),(0,q.jsx)(`div`,{className:`cdp-accordion`,style:{marginTop:10},children:Object.entries(h).map(([e,t])=>{let n=u[e],r=t.filter(e=>{let t=i[e.id]??e.value;return t&&t!==``&&t!==`false`}).length;return(0,q.jsxs)(`div`,{className:`cdp-accordion__group`,children:[(0,q.jsxs)(`div`,{className:`cdp-accordion__header`,onClick:()=>f(e),children:[(0,q.jsx)(`div`,{className:`cdp-accordion__accent`}),(0,q.jsx)(`div`,{className:`cdp-accordion__icon`,children:(0,q.jsx)(ze,{size:14})}),(0,q.jsx)(`span`,{className:`cdp-accordion__name`,children:e}),(0,q.jsxs)(`span`,{className:`cdp-accordion__count`,children:[r,`/`,t.length]}),(0,q.jsx)(H,{size:14,className:`cdp-accordion__chevron ${n?``:`cdp-accordion__chevron--open`}`})]}),!n&&(0,q.jsx)(`div`,{className:`cdp-accordion__body`,children:t.map(g)})]},e)})})]})}function vd({open:e,contact:t,onClose:n,onSave:r,onDelete:i,onRecomputeScore:a}){let[o,s]=(0,K.useState)(hd()),[c,l]=(0,K.useState)(!1),[u,f]=(0,K.useState)(!1),[p,m]=(0,K.useState)(!1),[h,g]=(0,K.useState)(!1),[_,v]=(0,K.useState)(!1),[y,b]=(0,K.useState)([]),[x,S]=(0,K.useState)([]),[,C]=(0,K.useState)(0),[w,T]=(0,K.useState)(null),[E,D]=(0,K.useState)(null),[O,k]=(0,K.useState)(!1),[A,j]=(0,K.useState)(``),[N,P]=(0,K.useState)([]),[ee,ne]=(0,K.useState)(!1),[F,re]=(0,K.useState)(new Set),[I,ie]=(0,K.useState)(!1),ae=d(),oe=async()=>{if(!(!t||!a)){g(!0);try{await a(t.id)}finally{g(!1)}}};(0,K.useEffect)(()=>{e&&t?G.get(`/contacts/${t.id}`).then(e=>{b(e.data.mergedFrom||[]),S(e.data.conversations||[]),C(e.data._count?.conversations||0)}).catch(()=>{b([]),S([]),C(0)}):(b([]),S([]),C(0))},[e,t]),(0,K.useEffect)(()=>{t?(s({fullName:t.fullName??``,crmName:t.crmName??``,phone:t.phone??``,email:t.email??``,source:t.source??``,lifecycleStage:t.lifecycleStage??`subscriber`,nextAppointment:gd(t.nextAppointment),firstContactDate:gd(t.firstContactDate),notes:t.notes??``,tags:(t.tags??[]).join(`, `)}),m(!1),T(t.companyId??null),D(t.company?.name??null)):(s(hd()),T(null),D(null))},[t]);let L=e=>t=>{s(n=>({...n,[e]:t.target.value}))},ce=async()=>
3{if(t){l(!0);try{let e={fullName:o.fullName||null,crmName:o.crmName||null,phone:o.phone||null,email:o.email||null,source:o.source||null,lifecycleStage:o.lifecycleStage,nextAppointment:o.nextAppointment?new Date(o.nextAppointment+`T00:00:00`).toISOString():null,companyId:w,notes:o.notes||null,tags:o.tags?o.tags.split(`,`).map(e=>e.trim()).filter(Boolean):[]};await r(t.id,e)&&n()}finally{l(!1)}}},le=async()=>{if(t){if(!p){m(!0);return}f(!0);try{await i(t.id)&&n()}finally{f(!1),m(!1)}}},ue=(0,K.useCallback)(()=>{k(!0),j(``),P([]),re(new Set)},[]),de=(0,K.useCallback)(async e=>{if(j(e),!e.trim()||e.trim().length<2){P([]);return}ne(!0);try{P(((await G.get(`/contacts?search=${encodeURIComponent(e.trim())}&limit=10`)).data.contacts||[]).filter(e=>e.id!==t?.id&&!e.mergedInto&&!e.deletedAt))}catch{P([])}finally{ne(!1)}},[t]),fe=(0,K.useCallback)(e=>{re(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),pe=(0,K.useCallback)(async()=>{if(!(!t||F.size===0)&&window.confirm(`Gộp ${F.size} hồ sơ vào "${t.fullName||`Khách hàng`}"?\n\nTất cả hội thoại, ghi chú, lịch hẹn sẽ được chuyển về hồ sơ chính. Hành động này không thể hoàn tác.`)){ie(!0);try{await G.post(`/contacts/merge`,{primaryId:t.id,mergeIds:Array.from(F)}),k(!1);let e=await G.get(`/contacts/${t.id}`);b(e.data.mergedFrom||[]),S(e.data.conversations||[]),C(e.data._count?.conversations||0),r(t.id,{})}catch(e){alert(e.response?.data?.error||`Lỗi gộp hồ sơ`)}finally{ie(!1)}}},[t,F,r]);return(0,q.jsxs)(jc,{open:e,onClose:n,title:`Chi tiết khách hàng`,subtitle:t?`ID: ${t.id.slice(0,8)}`:``,width:560,footer:(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`button`,{className:`drawer-btn drawer-btn--danger`,onClick:le,disabled:u,style:{marginRight:`auto`},children:[(0,q.jsx)(R,{size:14}),` `,p?`Xác nhận xoá?`:`Xoá`]}),(0,q.jsx)(`button`,{className:`drawer-btn drawer-btn--ghost`,onClick:n,children:`Hủy`}),(0,q.jsxs)(`button`,{className:`drawer-btn drawer-btn--primary`,onClick:ce,disabled:c,children:[(0,q.jsx)(kt,{size:14}),` `,c?`Đang lưu...`:`Lưu`]})]}),children:[(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,q.jsx)(`div`,{className:`form-section__title`,style:{margin:0},children:`Pipeline`}),(0,q.jsxs)(`button`,{type:`button`,onClick:ue,style:{display:`inline-flex`,alignItems:`center`,gap:5,padding:`5px 12px`,borderRadius:8,border:`1px solid #c7d2fe`,background:`#eef2ff`,color:`#4f46e5`,fontSize:12,fontWeight:600,cursor:`pointer`,transition:`all 0.15s`},onMouseEnter:e=>{e.currentTarget.style.background=`#e0e7ff`,e.currentTarget.style.borderColor=`#a5b4fc`},onMouseLeave:e=>{e.currentTarget.style.background=`#eef2ff`,e.currentTarget.style.borderColor=`#c7d2fe`},children:[(0,q.jsx)(wt,{size:13}),` Gộp hồ sơ`]})]}),(0,q.jsx)(`div`,{className:`pipeline-chips`,style:{marginTop:10},children:es.map(e=>{let t=o.lifecycleStage===e.value;return(0,q.jsxs)(`button`,{className:`pipeline-chip ${t?`pipeline-chip--active`:``}`,style:{"--chip-color":e.color,borderColor:t?e.color:void 0,background:t?e.color+`18`:void 0,color:t?e.color:void 0},onClick:()=>s(t=>({...t,lifecycleStage:e.value})),children:[(0,q.jsx)(`span`,{className:`pipeline-chip__dot`,style:{background:e.color}}),e.label]},e.value)})}),t&&!ns.includes(o.lifecycleStage)&&(0,q.jsx)(`div`,{style:{marginTop:12},children:(0,q.jsxs)(`button`,{type:`button`,className:`drawer-btn drawer-btn--primary`,style:{background:`#16a34a`,borderColor:`#16a34a`},onClick:async()=>{if(t&&confirm(`Chuyển "${t.fullName||`liên hệ này`}" thành Khách hàng?`))try{await G.post(`/contacts/${t.id}/convert`,{toStage:`customer`}),s(e=>({...e,lifecycleStage:`customer`})),await r(t.id,{})}catch(e){console.error(`Convert failed:`,e),alert(`Chuyển đổi thất bại. Vui lòng thử lại.`)}},children:[(0,q.jsx)(te,{size:14}),` Chuyển thành khách hàng`]})})]}),O&&(0,q.jsx)(`div`,{style:{position:`fixed`,inset:0,background:`rgba(0,0,0,0.35)`,zIndex:9999,display:`flex`,alignItems:`center`,justifyContent:`center`},onClick:()=>k(!1),children:(0,q.jsxs)(`div`,{style:{background:`#fff`,borderRadius:14,width:440,maxHeight:`70vh`,boxShadow:`0 20px 60px rgba(0,0,0,0.2)`,display:`flex`,flexDirection:`column`,overflow:`hidden`},onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{style:{padding:`16px 20px 12px`,borderBottom:`1px solid var(--gray-100)`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,marginBottom:12},children:[(0,q.jsxs)(`h3`,{style:{margin:0,fontSize:16,fontWeight:600,display:`flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(wt,{size:16}),` Gộp hồ sơ`]}),(0,q.jsx)(`button`,{onClick:()=>k(!1),style:{background:`none`,border:`none`,cursor:`pointer`,padding:4,color:`var(--gray-400)`},children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsxs)(`p`,{style:{fontSize:12,color:`var(--gray-500)`,margin:`0 0 10px`,lineHeight:1.4},children:[`Tìm và chọn hồ sơ để gộp vào `,(0,q.jsx)(`strong`,{children:t?.fullName||`khách hàng này`}),`. Tất cả hội thoại, ghi chú sẽ được chuyển về.`]}),(0,q.jsxs)(`div`,{style:{position:`relative`},children:[(0,q.jsx)(_t,{size:14,style:{position:`absolute`,left:10,top:10,color:`var(--gray-400)`}}),(0,q.jsx)(`input`,{type:`text`,placeholder:`Tìm theo tên, SĐT, email...`,value:A,onChange:e=>de(e.target.value),style:{width:`100%`,padding:`8px 12px 8px 32px`,border:`1px solid var(--gray-200)`,borderRadius:8,fontSize:13,outline:`none`,boxSizing:`border-box`,background:`var(--gray-50)`},autoFocus:!0})]}),F.size>0&&(0,q.jsxs)(`div`,{style:{marginTop:8,fontSize:12,color:`#4f46e5`,fontWeight:500},children:[`Đã chọn `,F.size,` hồ sơ để gộp`]})]}),(0,q.jsx)(`div`,{style:{flex:1,overflowY:`auto`,padding:`8px 12px`,minHeight:180,maxHeight:340},children:ee?(0,q.jsxs)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:[(0,q.jsx)(Ye,{size:18,style:{animation:`spin 1s linear infinite`,marginBottom:8}}),(0,q.jsx)(`div`,{children:`Đang tìm...`})]}):A.trim().length<2?(0,q.jsx)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:12},children:`Nhập ít nhất 2 ký tự để tìm kiếm`}):N.length===0?(0,q.jsx)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Không tìm thấy khách hàng phù hợp`}):N.map(e=>(0,q.jsxs)(`div`,{onClick:()=>fe(e.id),style:{display:`flex`,alignItems:`center`,gap:10,padding:`8px 8px`,borderRadius:8,cursor:`pointer`,transition:`background 0.1s`,background:F.has(e.id)?`rgba(79,70,229,0.08)`:`transparent`},onMouseEnter:t=>{t.currentTarget.style.background=F.has(e.id)?`rgba(79,70,229,0.12)`:`var(--gray-50)`},onMouseLeave:t=>{t.currentTarget.style.background=F.has(e.id)?`rgba(79,70,229,0.08)`:`transparent`},children:[(0,q.jsx)(`div`,{style:{width:18,height:18,borderRadius:4,flexShrink:0,border:F.has(e.id)?`2px solid #4f46e5`:`2px solid var(--gray-300)`,background:F.has(e.id)?`#4f46e5`:`#fff`,display:`flex`,alignItems:`center`,justifyContent:`center`}
3,children:F.has(e.id)&&(0,q.jsx)(te,{size:12,color:`#fff`,strokeWidth:3})}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,color:`var(--gray-800)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.fullName||`Chưa có tên`}),(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,display:`flex`,gap:8},children:[e.phone&&(0,q.jsxs)(`span`,{children:[`📞 `,pn(e.phone)]}),e.email&&(0,q.jsxs)(`span`,{children:[`✉️ `,e.email]}),e.source&&(0,q.jsxs)(`span`,{children:[`· `,e.source]})]})]}),e._count?.conversations>0&&(0,q.jsxs)(`span`,{style:{fontSize:10,color:`var(--gray-400)`,flexShrink:0},children:[e._count.conversations,` hội thoại`]})]},e.id))}),(0,q.jsxs)(`div`,{style:{padding:`12px 20px`,borderTop:`1px solid var(--gray-100)`,display:`flex`,gap:8,justifyContent:`flex-end`},children:[(0,q.jsx)(`button`,{onClick:()=>k(!1),style:{padding:`8px 20px`,border:`1px solid var(--gray-200)`,borderRadius:8,background:`#fff`,cursor:`pointer`,fontSize:13,fontWeight:500},children:`Há»§y`}),(0,q.jsxs)(`button`,{onClick:pe,disabled:I||F.size===0,style:{padding:`8px 20px`,border:`none`,borderRadius:8,cursor:`pointer`,background:`#4f46e5`,color:`#fff`,fontSize:13,fontWeight:600,opacity:I||F.size===0?.5:1,display:`flex`,alignItems:`center`,gap:5,transition:`opacity 0.15s`},children:[(0,q.jsx)(wt,{size:13}),I?`Đang gộp...`:`Gộp${F.size>0?` (${F.size})`:``}`]})]})]})}),(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Thông tin cÆ¡ bản`}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(qe,{size:14}),` Tên CRM (tên thật)`]}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`Tên thật dùng cho automation`,value:o.crmName,onChange:L(`crmName`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(qe,{size:14}),` Tên hiển thị Zalo`]}),(0,q.jsx)(`input`,{className:`form-input`,value:o.fullName,onChange:L(`fullName`)})]})]}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(z,{size:14}),` Số điện thoại`]}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`0912 345 678`,value:o.phone,onChange:L(`phone`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)($e,{size:14}),` Email`]}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`[email protected]`,type:`email`,value:o.email,onChange:L(`email`)})]})]}),t&&(0,q.jsx)(`div`,{style:{marginTop:8},children:(0,q.jsxs)(`button`,{type:`button`,className:`drawer-btn drawer-btn--ghost`,onClick:()=>v(!0),disabled:!o.phone.trim(),title:o.phone.trim()?``:`Cần số điện thoại để gá»­i ZNS`,children:[(0,q.jsx)(Qe,{size:14}),` Gá»­i ZNS`]})}),(0,q.jsx)(`div`,{className:`form-row`,children:(0,q.jsxs)(`div`,{className:`form-group`,style:{flex:1},children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Pt,{size:14}),` Công ty`]}),(0,q.jsx)(`div`,{style:{border:`1px solid var(--gray-200)`,borderRadius:8,padding:`6px 10px`,display:`flex`,alignItems:`center`,minHeight:34},children:(0,q.jsx)(mu,{value:w,displayName:E,onChange:(e,t)=>
3{T(e),D(t)}})})]})}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(M,{size:14}),` Nguồn`]}),(0,q.jsx)(`div`,{className:`form-select-wrap`,children:(0,q.jsxs)(`select`,{className:`form-select`,value:o.source,onChange:L(`source`),children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn nguồn —`}),od.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.text},e.value))]})})]})]}),(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Ngày quan trọng`}),(0,q.jsxs)(`div`,{className:`form-row`,children:[(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Be,{size:14}),` Ngày tái hẹn`]}),(0,q.jsx)(`input`,{className:`form-input`,type:`date`,value:o.nextAppointment,onChange:L(`nextAppointment`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(Be,{size:14}),` Ngày tiếp nhận`]}),(0,q.jsx)(`input`,{className:`form-input`,type:`date`,value:o.firstContactDate,onChange:L(`firstContactDate`)})]})]})]}),(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Ghi chú`}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(se,{size:14}),` Nhãn / Tags`]}),(0,q.jsx)(`input`,{className:`form-input`,placeholder:`VIP, Tiềm năng, Hot... (phân cách bằng dấu phẩy)`,value:o.tags,onChange:L(`tags`)})]}),(0,q.jsxs)(`div`,{className:`form-group`,children:[(0,q.jsxs)(`label`,{className:`form-label`,children:[(0,q.jsx)(zt,{size:14}),` Ghi chú nội bộ`]}),(0,q.jsx)(`textarea`,{className:`form-textarea`,placeholder:`Thêm ghi chú về khách hàng...`,value:o.notes,onChange:L(`notes`),rows:3})]})]}),t&&(0,q.jsx)(_d,{contactId:t.id}),t&&(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{className:`form-section__title`,children:[(0,q.jsx)(Je,{size:14,style:{marginRight:6}}),` Vòng đời khách hàng`]}),(0,q.jsx)(ad,{contactId:t.id})]}),t&&(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Thông tin hệ thống`}),(0,q.jsxs)(`div`,{className:`contact-meta-grid`,children:[(0,q.jsxs)(`div`,{className:`contact-meta`,children:[(0,q.jsx)(`span`,{className:`contact-meta__label`,children:`Điểm lead`}),(0,q.jsxs)(`span`,{className:`contact-meta__value`,style:{display:`inline-flex`,alignItems:`center`,gap:8},children:[(0,q.jsx)(`span`,{className:`cust-score ${md(t.leadScore)}`,children:t.leadScore??0}),a&&(0,q.jsx)(`button`,{type:`button`,onClick:oe,disabled:h,title:`Tính lại điểm theo quy tắc (không dùng AI)`,"aria-label":`Tính lại điểm theo quy tắc`,style:{display:`inline-flex`,alignItems:`center`,justifyContent:`center`,width:22,height:22,padding:0,borderRadius:4,border:`1px solid #d1d5db`,background:`white`,cursor:`pointer`,color:`#6b7280`,opacity:h?.5:1},children:(0,q.jsx)(Ye,{size:12,className:h?`spin`:void 0})})]})]}),(0,q.jsxs)(`div`,{className:`contact-meta`,children:[(0,q.jsx)(`span`,{className:`contact-meta__label`,children:`Zalo UID`}),(0,q.jsx)(`span`,{className:`contact-meta__value`,children:t.zaloUid||`—`})]}),(0,q.jsxs)(`div`,{className:`contact-meta`,children:[(0,q.jsx)(`span`,{className:`contact-meta__label`,children:`Ngày tạo`}),(0,q.jsx)(`span`,{className:`contact-meta__value`,children:t.createdAt?new Date(t.createdAt).toLocaleDateString(`vi-VN`):`—`})]}),(0,q.jsxs)(`div`,{className:`contact-meta`,children:[(0,q.jsx)(`span`,{className:`contact-meta__label`,children:`Hoạt động gần nhất`}),(0,q.jsx)(`span`,{className:`contact-meta__value`,children:t.lastActivity?new Date(t.lastActivity).toLocaleDateString(`vi-VN`):`—`})]})]})]}),t&&x.length>0&&(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsxs)(`div`,{className:`form-section__title`,children:[(0,q.jsx)(ut,{size:14,style:{marginRight:6}}),`Hội thoại (`,x.length,`)`]}),(0,q.jsx)(`div`,{style:{background:`var(--gray-50)`,borderRadius:8,border:`1px solid var(--gray-200)`,overflow:`hidden`},children:x.map((e,r)=>{let i=e.messages?.[0],a=e.channelAccount?.displayName||`Zalo`,o=e.threadType===`group`,s=i?i.contentType===`image`?`📷 Hình ảnh`:i.contentType===`sticker`?`🎯 Sticker`:i.contentType===`file`?`📎 File`:i.contentType===`video`?`🎬 Video`
3:i.contentType===`voice`?`🎤 Thoại`:(i.content||``).slice(0,60)+((i.content?.length||0)>60?`...`:``):`Chưa có tin nhắn`,c=e.lastMessageAt?(()=>{let t=new Date(e.lastMessageAt),n=Math.floor((Date.now()-t.getTime())/1e3);return n<60?`vừa xong`:n<3600?`${Math.floor(n/60)}p`:n<86400?`${Math.floor(n/3600)}h`:t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`})})():``;return(0,q.jsxs)(`div`,{onClick:()=>{n(),ae(`/conversations?selectConv=${e.id}`)},style:{display:`flex`,alignItems:`center`,gap:10,padding:`10px 14px`,borderBottom:r<x.length-1?`1px solid var(--gray-100)`:`none`,cursor:`pointer`,transition:`background 0.15s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-100)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,children:[(0,q.jsx)(`div`,{style:{width:32,height:32,borderRadius:8,background:o?`#dbeafe`:`#e0e7ff`,color:o?`#2563eb`:`#4f46e5`,display:`flex`,alignItems:`center`,justifyContent:`center`,flexShrink:0},children:(0,q.jsx)(ut,{size:15})}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:4,marginBottom:2,flexWrap:`wrap`},children:[(0,q.jsx)(`span`,{style:{padding:`1px 6px`,borderRadius:4,background:`#f0fdf4`,color:`#15803d`,fontSize:10,fontWeight:600},children:a}),(0,q.jsx)(`span`,{style:{fontSize:10,color:`var(--gray-300)`},children:`—`}),(0,q.jsx)(`span`,{style:{padding:`1px 6px`,borderRadius:4,background:`#eff6ff`,color:`#2563eb`,fontSize:10,fontWeight:600,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,maxWidth:140},children:e.displayName||t?.fullName||`Khách hàng`}),o&&(0,q.jsx)(`span`,{style:{padding:`1px 5px`,borderRadius:4,background:`#dbeafe`,color:`#2563eb`,fontSize:10,fontWeight:500},children:`Nhóm`}),(0,q.jsx)(`span`,{style:{fontSize:11,color:`var(--gray-400)`,marginLeft:`auto`,flexShrink:0},children:c})]}),(0,q.jsxs)(`div`,{style:{fontSize:12,color:`var(--gray-500)`,whiteSpace:`nowrap`,overflow:`hidden`,textOverflow:`ellipsis`},children:[i?.senderType===`self`&&(0,q.jsx)(`span`,{style:{color:`var(--gray-400)`},children:`Bạn: `}),s]})]}),e.unreadCount>0&&(0,q.jsx)(`span`,{style:{minWidth:18,height:18,borderRadius:9,background:`#ef4444`,color:`#fff`,fontSize:10,fontWeight:700,display:`flex`,alignItems:`center`,justifyContent:`center`,padding:`0 5px`,flexShrink:0},children:e.unreadCount})]},e.id)})}),y.length>0&&(0,q.jsxs)(`p`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:6},children:[(0,q.jsx)(wt,{size:11,style:{marginRight:4}}),`Bao gồm hội thoại từ `,y.length,` KH đã gộp`]})]}),t&&(0,q.jsx)(Iu,{contact:t}),t&&(0,q.jsx)(td,{contactId:t.id}),t&&(0,q.jsx)(`div`,{className:`form-section`,children:(0,q.jsx)(Xu,{contactId:t.id})}),t&&(0,q.jsxs)(`div`,{className:`form-section`,children:[(0,q.jsx)(`div`,{className:`form-section__title`,children:`Dòng thời gian (360°)`}),(0,q.jsx)(Du,{contactId:t.id})]}),t&&(0,q.jsx)(uu,{open:_,onClose:()=>v(!1),contact:{id:t.id,fullName:t.fullName,phone:o.phone}})]})}var yd=`Bạn đang trong một cuộc gọi khác`,bd=`Hội thoại chưa gắn với khách hàng nên chưa xin quyền gọi được`;function xd(e){return e.enabled?`call`:e.reasonCode===`PROVIDER_PERMISSION_REQUIRED`?e.permission===`requested`?`requested`:`request`:`disabled`}function Sd(e){return Tn(e.providerLabel,e.accountName)}function Cd(e,t,n,r){return t===`call`?n?yd:null:t===`request`?r?null:bd:wd(e,t)}function wd(e,t){return t===`call`?`Gọi qua ${Sd(e)}${e.address?` tới ${e.address}`:``}`:t===`request`?`Khách cần cho phép trước khi bạn gọi qua ${Sd(e)}`:t===`requested`?`Đã gửi lời xin quyền gọi — đang chờ khách đồng ý`:e.reason||`Chưa gọi được qua nguồn này`}function Td({conversationId:e,contactId:t}){let{enabled:n,calls:r,userId:i,startCall:a}=Ea(),[o,s]=(0,K.useState)([]),[c,l]=(0,K.useState)(0),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),m=(0,K.useRef)(null),h=n&&_a(r,i).length>0;(0,K.useEffect)(()=>{if(!n||!e)return;let r=!1;return ca.getOptions({conversationId:e,contactId:t}).then(e=>{r||s(Array.isArray(e.options)?e.options:[])}).catch(()=>{r||s([])}),()=>{r=!0}},[n,e,t,c]);let{on:g}=lr();(0,K.useEffect)(()=>
3{if(!(!n||!t))return g(`call:permission-changed`,e=>{e.contactId===t&&(l(e=>e+1),e.status===`granted`&&W(`Khách đã đồng ý — bạn có thể gọi ngay`,`success`))})},[n,t,g]);let[_,v]=(0,K.useState)(e);_!==e&&(v(e),s([]),d(!1)),(0,K.useEffect)(()=>{if(!u)return;let e=e=>{m.current&&!m.current.contains(e.target)&&d(!1)},t=e=>{e.key===`Escape`&&d(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[u]);let y=(0,K.useCallback)(async n=>{let r=xd(n);if(f)return;let i=Cd(n,r,h,!!t);if(i){W(i,`info`);return}d(!1),p(!0);try{if(r===`call`){await a({providerAccountId:n.providerAccountId,conversationId:e,...t?{contactId:t}:{}},{mediaType:n.capabilities?.mediaType})||l(e=>e+1);return}if(!t)return;await ca.requestPermission({providerAccountId:n.providerAccountId,contactId:t}),W(`Đã gửi lời xin quyền gọi. Khi khách đồng ý, bạn có thể gọi ngay.`,`success`),l(e=>e+1)}catch(e){ia(e)}finally{p(!1)}},[f,h,a,e,t]);if(!n||o.length===0)return null;if(o.length===1){let e=o[0],n=xd(e),r=Cd(e,n,h,!!t),i=r??wd(e,n),a=r?` call-header-btn--blocked`:``;return n===`request`||n===`requested`?(0,q.jsxs)(`button`,{type:`button`,className:`call-header-btn call-header-btn--text${a}`,onClick:()=>y(e),"aria-disabled":r?!0:void 0,disabled:f,title:i,children:[(0,q.jsx)(en,{size:15}),(0,q.jsx)(`span`,{children:n===`requested`?`Đã xin quyền`:`Xin quyền gọi`})]}):(0,q.jsx)(`button`,{type:`button`,className:`chat-main__header-btn call-header-btn${a}`,onClick:()=>y(e),"aria-disabled":r?!0:void 0,disabled:f,title:i,"aria-label":i,children:(0,q.jsx)(z,{size:16})})}return(0,q.jsxs)(`div`,{className:`call-header-menu`,ref:m,children:[(0,q.jsxs)(`button`,{type:`button`,className:`chat-main__header-btn call-header-btn call-header-btn--split ${u?`chat-main__header-btn--active`:``}`,onClick:()=>d(e=>!e),disabled:f,title:h?yd:`Gọi cho khách`,"aria-haspopup":`menu`,"aria-expanded":u,children:[(0,q.jsx)(z,{size:16}),(0,q.jsx)(H,{size:12})]}),u&&(0,q.jsxs)(`div`,{className:`call-header-menu__list`,role:`menu`,children:[(0,q.jsx)(`div`,{className:`call-header-menu__label`,children:`Gọi qua`}),o.map(e=>{let n=xd(e),r=Cd(e,n,h,!!t);return(0,q.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`call-header-menu__item${r?` call-header-menu__item--blocked`:``}`,onClick:()=>y(e),"aria-disabled":r?!0:void 0,title:r??wd(e,n),children:[n===`call`?(0,q.jsx)(z,{size:14}):(0,q.jsx)(en,{size:14}),(0,q.jsxs)(`span`,{className:`call-header-menu__text`,children:[(0,q.jsx)(`span`,{className:`call-header-menu__name`,children:Sd(e)}),(0,q.jsxs)(`span`,{className:`call-header-menu__sub`,children:[n===`call`&&(h?yd:e.address||`Sẵn sàng gọi`),n===`request`&&`Bấm để xin quyền gọi`,n===`requested`&&`Đang chờ khách đồng ý`,n===`disabled`&&(e.reason||`Chưa gọi được`)]})]})]},e.providerAccountId)})]})]})}function Ed(){return null}var Dd=[`👍`,`❤️`,`😂`,`😮`,`😢`,`😡`];function Od({align:e=`left`,onReact:t,triggerLabel:n=`Thả cảm xúc`}){let[r,i]=(0,K.useState)(!1),a=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!r)return;function e(e){a.current?.contains(e.target)||i(!1)}function t(e){e.key===`Escape`&&i(!1)}return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[r]);function o(e){t(e),i(!1)}return(0,q.jsxs)(`div`,{className:`reaction-picker`,ref:a,children:[(0,q.jsx)(`button`,{type:`button`,className:`reaction-picker__trigger`,"aria-label":n,"aria-expanded":r,title:n,onClick:()=>i(e=>!e),children:(0,q.jsx)(Ie,{size:14})}),r&&(0,q.jsx)(`div`,{className:`reaction-picker__panel reaction-picker__panel--${e}`,role:`menu`,children:Dd.map(e=>(0,q.jsx)(`button`,{type:`button`,role:`menuitem`,className:`reaction-picker__emoji`,"aria-label":`React ${e}`,onClick:()=>o(e),children:e},e))})]})}function kd({src:e,type:t,alt:n,onClose:r}){let i=(0,K.useCallback)(e=>{e.key===`Escape`&&r()},[r]);return(0,K.useEffect)(()=>
3(document.addEventListener(`keydown`,i),document.body.style.overflow=`hidden`,()=>{document.removeEventListener(`keydown`,i),document.body.style.overflow=``}),[i]),(0,q.jsxs)(`div`,{className:`media-lightbox`,onClick:r,style:{position:`fixed`,inset:0,zIndex:1e4,background:`rgba(0,0,0,0.85)`,backdropFilter:`blur(8px)`,display:`flex`,alignItems:`center`,justifyContent:`center`,animation:`lightbox-fade-in 0.2s ease-out`},children:[(0,q.jsxs)(`div`,{onClick:e=>e.stopPropagation(),style:{position:`absolute`,top:0,left:0,right:0,display:`flex`,alignItems:`center`,justifyContent:`flex-end`,gap:8,padding:`12px 16px`,background:`linear-gradient(to bottom, rgba(0,0,0,0.5), transparent)`},children:[(0,q.jsx)(`button`,{onClick:()=>window.open(e,`_blank`),style:Ad,title:`Mở tab mới`,children:(0,q.jsx)(Rt,{size:16})}),(0,q.jsx)(`a`,{href:e,download:!0,onClick:e=>e.stopPropagation(),style:{...Ad,textDecoration:`none`},title:`Tải xuống`,children:(0,q.jsx)(Ut,{size:16})}),(0,q.jsx)(`button`,{onClick:r,style:Ad,title:`Đóng (Esc)`,children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsx)(`div`,{onClick:e=>e.stopPropagation(),style:{maxWidth:`90vw`,maxHeight:`85vh`},children:t===`image`?(0,q.jsx)(`img`,{src:e,alt:n||`Ảnh`,style:{maxWidth:`90vw`,maxHeight:`85vh`,objectFit:`contain`,borderRadius:8,boxShadow:`0 8px 40px rgba(0,0,0,0.4)`,animation:`lightbox-zoom-in 0.25s ease-out`}}):(0,q.jsx)(`video`,{src:e,controls:!0,autoPlay:!0,style:{maxWidth:`90vw`,maxHeight:`85vh`,borderRadius:8,boxShadow:`0 8px 40px rgba(0,0,0,0.4)`,animation:`lightbox-zoom-in 0.25s ease-out`}})})]})}var Ad={background:`rgba(255,255,255,0.15)`,border:`none`,borderRadius:8,color:`#fff`,cursor:`pointer`,padding:8,display:`flex`,alignItems:`center`,justifyContent:`center`,transition:`background 0.15s`},jd=new Set([`http:`,`https:`]);function Md(e){if(!e)return!1;let t;try{t=new URL(e)}catch{return!1}return jd.has(t.protocol)}function Nd(e){return Md(e)?e:null}function Pd(e){let t=Nd(e);t&&window.open(t,`_blank`,`noopener,noreferrer`)}var Fd={concise:`Ngắn gọn`,friendly:`Thân thiện`,detailed:`Chi tiết`},Id=[{key:`all`,label:`Tất cả`},{key:`unread`,label:`Chưa đọc`},{key:`mine`,label:`Của tôi`}],Ld=[{key:`all`,label:`Tất cả`},{key:`user`,label:`Cá nhân`},{key:`group`,label:`Nhóm`}];function Rd(e){return e?{platform:e.platform,externalUid:e.externalUid??void 0}:null}function zd(e){return e?e.split(` `).map(e=>e[0]).filter(Boolean).slice(0,2).join(``).toUpperCase():`?`}function Bd(e){if(!e)return`#94a3b8`;let t=[`#3b82f6`,`#9333ea`,`#ef4444`,`#f59e0b`,`#16a34a`,`#0ea5e9`,`#8b5cf6`,`#ec4899`],n=0;for(let t=0;t<e.length;t++)n=e.charCodeAt(t)+((n<<5)-n);return t[Math.abs(n)%t.length]}function Vd(e){if(!e)return``;let t=new Date(e),n=Math.floor((Date.now()-t.getTime())/1e3);return n<60?`vừa xong`:n<3600?`${Math.floor(n/60)}p`:n<86400?`${Math.floor(n/3600)}h`:`${Math.floor(n/86400)}d`}function Hd(e){return e?new Date(e).toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`}):``}function Ud(e){let t=new Date(e),n=new Date,r=new Date;return r.setDate(r.getDate()-1),t.toDateString()===n.toDateString()?`HÔM NAY`:t.toDateString()===r.toDateString()?`HÔM QUA`:t.toLocaleDateString(`vi-VN`,{weekday:`long`,day:`2-digit`,month:`2-digit`,year:`numeric`})}function Wd(e){if(!e)return null;let t=e.match(/^\[📷\s+(.+)\]$/);if(t)return t[1];try{let t=JSON.parse(e);return t.href||t.thumb||t.hdUrl||t.normalUrl||null}catch{return e.startsWith(`http`)&&/\.(jpg|jpeg|png|gif|webp)/i.test(e)?e:null}}function Gd(e){if(!e)return null;let t=e.match(/^\[📷\s+(.+)\]$/);if(t){let e=t[1];return{thumb:e,full:e}}try{let t=JSON.parse(e),n=t.thumb||t.normalUrl||t.href||t.hdUrl||null,r=t.hdUrl||t.href||t.normalUrl||t.thumb||null;return!n&&!r?null:{thumb:n||r,full:r||n}}catch{return e.startsWith(`http`)&&/\.(jpg|jpeg|png|gif|webp)/i.test(e)?{thumb:e,full:e}:null}}function Kd(e){if(!e)return null;try{let t=JSON.parse(e),n=t.href||t.url||t.videoUrl||t.normalUrl||null,r=t.thumb||t.thumbnail||null;return!n&&!r?null:{url:n,thumb:r}}catch{return e.startsWith(`http`)&&/\.(mp4|mov|avi|webm)/i.test(e)?{url:e,thumb:null}:null}}function qd(e){if(!e)return null;try{let t=JSON.parse(e);return t.id&&t.catId?{id:t.id,catId:t.catId}:null}catch{let t=Number(e);return!isNaN(t)&&t>0?{id:t,catId:0}:null}}function Z(e,t,n){return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:4,color:n},children:[(0,q.jsx)(e,{size:13,style:{flexShrink:0}}),t]})}function Jd(e,t){let n=e;if(n===`rich`||n===`contact_card`){let e=Q(t);(e?.action===`recommened.calltime`||e?.action===`recommened.misscall`)&&(n=`call`),e?.action===`recommened.link`&&(n=`link`)}switch(n){case`image`:return Z(jt,`Hình ảnh`,`#3b82f6`);case`video`:return Z(Ve,`Video`,`#8b5cf6`);case`voice`:return Z(_,`Tin nhắn thoại`,`#f59e0b`);case`gif`:return Z(nt,`GIF`,`#ec4899`);case`location`:return Z(Ht,`Vị trí`,`#10b981`);case`sticker`:return Z(I,`Sticker`,`#f59e0b`);case`file`:return Z(oe,`File đính kèm`,`#64748b`);case`contact_card`:{let e=Q(t),n=e?.title||``,r=e?.description||``;if(e?.action===`show.profile`&&/\d{2}\/\d{2}\s+Sinh nhật/i.test(n)){let e=n.match(/Sinh nhật\s+của\s+(.+)/i);return Z(et,e?`Sinh nhật: ${e[1].trim()}`:`Sinh nhật`,`#f97316`)}return e?.action===`show.profile`&&r?Z(ge,r,`#10b981`):Z(ge,n?`Danh thiếp: ${n}`:`Danh thiếp`,`#3b82f6`)}case`birthday_notification`:{let e=(Q(t)?.title||``).match(/Sinh nhật\s+của\s+(.+)/i);return Z(et,e?`Sinh nhật: ${e[1].trim()}`:`Sinh nhật`,`#f97316`)}case`bank_transfer`:{let e=Q(t),n=e?.bankName||e?.bankCode||``;return Z(ht,n?`Chuyển khoản (${n})`:`Chuyển khoản`,`#16a34a`)}case`bank_card`:return Z(ht,`Tài khoản ngân hàng`,`#16a34a`);
3case`call`:{let e=Q(t),n=typeof e?.params==`string`?Q(e.params):e?.params,r=e?.callType||``,i=n?.calltype??-1,a=String(r).toLowerCase().includes(`video`)||i===1,o=n?.duration??e?.callDuration??e?.duration??0;if(String(r).toLowerCase().includes(`miss`)||e?.action===`recommened.misscall`||o===0)return Z(A,a?`Gọi video nhỡ`:`Cuộc gọi nhỡ`,`#ef4444`);let s=o>0?` (${Math.floor(o/60)}p${o%60}s)`:``;return Z(z,(a?`Cuộc gọi video`:`Cuộc gọi`)+s,`#3b82f6`)}case`call_log`:return Q(t)?.status===`missed`?Z(A,`Cuộc gọi nhỡ`,`#ef4444`):Z(z,`Cuộc gọi`,`#3b82f6`);case`qr_code`:return Z(Oe,`Mã QR`,`#6366f1`);case`reminder`:return Z(Jt,Q(t)?.title||`Nhắc hẹn`,`#f59e0b`);case`poll`:return Z(ae,Q(t)?.title||`Bình chọn`,`#0ea5e9`);case`note`:return Z(y,Q(t)?.title||`Ghi chú`,`#a855f7`);case`forwarded`:return Z(Pe,`Tin nhắn chuyển tiếp`,`#64748b`);case`rich`:return Z(ut,Q(t)?.title||`Tin nhắn đặc biệt`,`#64748b`);case`link`:{if(!t)return Z(Rt,`Liên kết`,`#2563eb`);let e=Q(t);return e?Z(Rt,e.title||e.href||`Liên kết`,`#2563eb`):Z(Rt,(t.startsWith(`http`),t),`#2563eb`)}default:return t||``}}function Q(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}function Yd(e){if(!e)return``;if(!e.startsWith(`{`)&&!e.startsWith(`[`))return e;let t=Q(e);return t?t.title&&t.href||t.title?t.title:t.href?t.description||t.href:t.description?t.description:t.displayText?t.displayText:`Tin nhắn đặc biệt`:e}function Xd(e){if(!e?.startsWith(`{`))return null;let t=Q(e);if(!t)return null;let n=typeof t.params==`string`?Q(t.params):t.params;if(n?.fileExt||n?.fType===1||t.fileExt){let e=parseInt(n?.fileSize||t.fileSize||`0`),r=e>1048576?`${(e/1048576).toFixed(1)} MB`:`${Math.round(e/1024)} KB`;return{name:t.title||`file.${n?.fileExt||t.fileExt||`unknown`}`,size:r,href:Nd(t.href)||``}}return null}function Zd(e){let t=Q(e);if(!t||t.action!==`msginfo.actionlist`&&!t.title)return null;let n=null;try{let e=typeof t.params==`string`?Q(t.params):t.params;for(let t of e?.highLightsV2||[])if(t.ts>0xe8d4a51000){n=new Date(t.ts).toLocaleString(`vi-VN`,{weekday:`long`,day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`});break}}catch{}return{title:t.title||`Nhắc hẹn`,time:n}}function Qd(e,t){if(!e)return null;if(!t)return e;try{let n=t.replace(/[.*+?^${}
3()|[\]\\]/g,`\\$&`),r=RegExp(`(@${n})`,`gi`),i=e.split(r);return i.length===1?e:(0,q.jsx)(q.Fragment,{children:i.map((e,n)=>e.toLowerCase()===`@${t.toLowerCase()}`?(0,q.jsx)(`span`,{style:{backgroundColor:`rgba(59, 130, 246, 0.15)`,color:`#1d4ed8`,fontWeight:600,padding:`2px 4px`,borderRadius:4},children:e},n):(0,q.jsx)(`span`,{children:e},n))})}catch{return e}}function $d({src:e}){return(0,q.jsxs)(`div`,{className:`msg__voice`,children:[(0,q.jsx)(_,{size:14,className:`msg__voice-icon`}),(0,q.jsx)(`audio`,{className:`msg__voice-player`,src:e,controls:!0,preload:`none`}),(0,q.jsx)(`a`,{className:`msg__voice-dl`,href:e,target:`_blank`,rel:`noopener noreferrer`,download:!0,title:`Tải về`,children:(0,q.jsx)(Ut,{size:13})})]})}function ef({src:e}){return(0,q.jsx)(`video`,{className:`msg__video-inline`,src:e,controls:!0,preload:`metadata`,playsInline:!0})}function tf(e){try{let t=new DOMParser().parseFromString(e,`text/html`),n=t.querySelector(`style`)?.textContent||``,r=t.querySelector(`p.normal_text`)?.textContent?.trim()||``,i=t.querySelector(`p.number_text`)?.textContent?.trim()||``,a=(t.querySelector(`p.normal_text.pc_element`)||t.querySelector(`p.normal_text.mobile_element`))?.textContent?.trim()||``,o=n.match(/content:\s*url\((https:\/\/res-zalo\.zadn\.vn[^)]+LOGO[^)]+)\)/),s=n.match(/background:\s*url\((https:\/\/res-zalo\.zadn\.vn[^)]+)\)/),c=n.match(/content:\s*url\((https:\/\/group-qr\.zdn\.vn[^)]+)\)/);return!r&&!i?null:{bankName:r,accountNumber:i,holderName:a,logoUrl:o?.[1]||``,bgUrl:s?.[1]||``,qrUrl:c?.[1]||``}}catch{return null}}function nf({content:e}){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(!1),a=Q(e),o=typeof a?.params==`string`?Q(a.params):a?.params,s=o?.pcItem?.data_url||o?.item?.data_url||``,c=s&&!s.includes(`?data=html`)?`${s}?data=html`:s,l=o?.customMsg?.msg?.vi||o?.customMsg?.msg?.en||`Tài khoản ngân hàng`;return(0,K.useEffect)(()=>{if(!c){i(!0);return}fetch(c).then(e=>e.text()).then(e=>{let t=tf(e);t?n(t):i(!0)}).catch(()=>i(!0))},[c]),r||!c?(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`10px 14px`,borderRadius:10,background:`rgba(22,163,74,0.08)`,border:`1px solid rgba(22,163,74,0.15)`},children:[(0,q.jsx)(ht,{size:16,style:{color:`#16a34a`,flexShrink:0}}),(0,q.jsx)(`span`,{style:{fontSize:13,fontWeight:500},children:l})]}):t?(0,q.jsx)(`div`,{style:{width:280,borderRadius:12,overflow:`hidden`,boxShadow:`0 2px 12px rgba(0,0,0,0.12)`},children:(0,q.jsxs)(`div`,{style:{backgroundImage:t.bgUrl?`url(${t.bgUrl})`:void 0,backgroundColor:t.bgUrl?void 0:`#166534`,backgroundSize:`cover`,backgroundPosition:`center`,padding:`14px 16px`,color:`#fff`,display:`flex`,flexDirection:`column`,gap:10,minHeight:130,position:`relative`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8},children:[t.logoUrl?(0,q.jsx)(`img`,{src:t.logoUrl,alt:``,style:{width:28,height:28,borderRadius:6,flexShrink:0,background:`rgba(255,255,255,0.9)`}}):(0,q.jsx)(ht,{size:20,style:{flexShrink:0}}),(0,q.jsx)(`span`,{style:{fontSize:13,fontWeight:600},children:t.bankName||l})]}),(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-end`,justifyContent:`space-between`,flex:1},children:[(0,q.jsxs)(`div`,{children:[t.accountNumber&&(0,q.jsx)(`div`,{style:{fontSize:18,fontWeight:700,letterSpacing:.5,marginBottom:2},children:t.accountNumber}),t.holderName&&(0,q.jsx)(`div`,{style:{fontSize:11,fontWeight:500,opacity:.85,textTransform:`uppercase`},children:t.holderName})]}),t.qrUrl&&(0,q.jsx)(`img`,{src:t.qrUrl,alt:`QR`,style:{width:72,height:72,borderRadius:6,flexShrink:0,border:`2px solid rgba(255,255,255,0.3)`}})]})]})}):(0,q.jsx)(`div`,{style:{width:280,height:160,borderRadius:12,background:`#f1f5f9`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#94a3b8`,fontSize:12},children:`Đang tải...`})}function rf({lat:e,lng:t}){let[n,r]=(0,K.useState)(!1);(0,K.useEffect)(()=>{r(!1)},[e,t]);let i={width:`100%`,height:140,background:`#e2e8f0`,position:`relative`,overflow:`hidden`};return n?(0,q.jsx)(`div`,{style:{...i,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:40},children:`📍`}):(0,q.jsxs)(`a`,{href:`https://www.google.com/maps/search/?api=1&query=${e},${t}`,target:`_blank`,rel:`noreferrer`,style:{...i,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:8,textDecoration:`none`},children:[(0,q.jsx)(`span`,{style:{fontSize:28},children:`📍`}),(0,q.jsx)(`span`,{style:{fontSize:13},children:`Xem vị trí trên bản đồ`})]})}function af({thumb:e,full:t}){let[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1);return(0,K.useEffect)(()=>{a(!1)},[e]),i?(0,q.jsx)(`div`,{className:`msg__image`,style:{maxWidth:280},children:(0,q.jsx)(`span`,{style:{color:`var(--gray-400)`,fontSize:12},children:`📷 Hình ảnh (không tải được)`})}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`msg__image`,style:{maxWidth:280},children:(0,q.jsx)(`img`,{src:e,alt:`Ảnh`,loading:`lazy`,style:{width:`100%`,maxHeight:320,objectFit:`cover`,borderRadius:8,cursor:`pointer`,display:`block`,transition:`opacity 0.15s`},onClick:()=>r(!0),onMouseEnter:e=>{e.target.style.opacity=`0.9`},onMouseLeave:e=>{e.target.style.opacity=`1`},onError:()=>a(!0)})}
3),n&&(0,q.jsx)(kd,{src:t,type:`image`,onClose:()=>r(!1)})]})}function of({url:e,thumb:t}){let[n,r]=(0,K.useState)(!1),i=e||t;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`msg__video`,style:{maxWidth:280,position:`relative`,cursor:`pointer`,borderRadius:8,overflow:`hidden`},onClick:()=>i&&r(!0),children:[t?(0,q.jsx)(`img`,{src:t,alt:`Video`,loading:`lazy`,style:{width:`100%`,maxHeight:240,objectFit:`cover`,display:`block`,filter:`brightness(0.85)`},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(`div`,{style:{width:200,height:120,background:`var(--gray-100)`,display:`flex`,alignItems:`center`,justifyContent:`center`},children:(0,q.jsx)(`span`,{style:{fontSize:36},children:`🎬`})}),(0,q.jsx)(`div`,{style:{position:`absolute`,inset:0,display:`flex`,alignItems:`center`,justifyContent:`center`},children:(0,q.jsx)(`div`,{style:{width:44,height:44,borderRadius:`50%`,background:`rgba(0,0,0,0.55)`,backdropFilter:`blur(4px)`,display:`flex`,alignItems:`center`,justifyContent:`center`,boxShadow:`0 2px 8px rgba(0,0,0,0.3)`},children:(0,q.jsx)(mt,{size:20,color:`#fff`,fill:`#fff`,style:{marginLeft:2}})})})]}),n&&i&&(0,q.jsx)(kd,{src:e||t,type:`video`,onClose:()=>r(!1)})]})}function sf(e){let t=Array.isArray(e.attachments)?e.attachments[0]:null;if(!t)return null;let n=typeof t.url==`string`?t.url:null;return n?{url:n,type:typeof t.type==`string`?t.type.toLowerCase():``}:null}function cf(e){return[`photo`,`image`,`sticker`,`gif`,`animated_image`].includes(e)?`image`:e===`video`?`video`:`file`}function lf({message:e,selectedConv:t}){let n=qd(e.content),r=Wd(e.content),i=sf(e),a=e.contentType===`text`?n?`sticker`:r?`image`:i?cf(i.type):`text`:e.contentType;if(a===`rich`){let t=Q(e.content);t?.action===`zinstant.bankcard`&&(a=`bank_card`),(t?.action===`recommened.calltime`||t?.action===`recommened.misscall`)&&(a=`call`)}if(a===`contact_card`){let t=Q(e.content);t?.action===`show.profile`&&(a=/\d{2}\/\d{2}\s+Sinh nhật/i.test(t?.title||``)?`birthday_notification`:`profile_notification`),(t?.action===`recommened.calltime`||t?.action===`recommened.misscall`)&&(a=`call`),t?.action===`recommened.link`&&(a=`link`)}if(a===`zns_template`){let t=(Array.isArray(e.attachments)?e.attachments[0]:null)?.templateId??``,n=e.znsLog?.status??`sent`,r={pending:{label:`Đang gửi`,color:`#a855f7`},sent:{label:`Đã gửi`,color:`#7c3aed`},delivered:{label:`Đã nhận ✓`,color:`#0ea5e9`},read:{label:`Đã đọc ✓✓`,color:`#16a34a`},failed:{label:`Gửi lỗi`,color:`#dc2626`},rejected:{label:`Bị từ chối`,color:`#dc2626`}},i=r[n]??r.sent;return(0,q.jsxs)(`div`,{className:`msg__zns`,style:{display:`flex`,flexDirection:`column`,gap:4,padding:`8px 12px`,borderRadius:8,background:`rgba(168, 85, 247, 0.08)`,border:`1px solid rgba(168, 85, 247, 0.2)`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:5,fontSize:11,fontWeight:600,textTransform:`uppercase`},children:[(0,q.jsx)(`span`,{style:{color:`#7c3aed`},children:`ZNS`}),(0,q.jsxs)(`span`,{style:{color:i.color},children:[`· `,i.label]})]}),(0,q.jsx)(`div`,{style:{fontSize:13,color:`#0f172a`},children:e.content||`Template ZNS`}),t&&(0,q.jsxs)(`div`,{style:{fontSize:10,color:`#64748b`},children:[`Template ID: `,t]})]})}if(a===`sticker`){let t=n?.id||Number(e.content)||0;return t>0?(0,q.jsx)(`div`,{className:`msg__sticker`,style:{lineHeight:1},children:(0,q.jsx)(`img`,{src:`https://zalo-api.zadn.vn/api/emoticon/sticker/webpc?eid=${t}&size=130`,alt:`sticker`,style:{width:100,height:100,objectFit:`contain`},onError:e=>{e.target.style.display=`none`}})}):null}if(a===`image`){let t=Gd(e.content);return t?(0,q.jsx)(af,{thumb:t.thumb,full:t.full}):i?(0,q.jsx)(af,{thumb:i.url,full:i.url}):(0,q.jsxs)(`div`,{className:`msg__image`,style:{display:`flex`,alignItems:`center`,gap:4,color:`var(--gray-500)`,fontSize:13},children:[(0,q.jsx)(k,{size:16,style:{opacity:.6}}),` 📷 Hình ảnh`]})}if(a===`file`){let t=Xd(e.content);if(t)return(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 12px`,borderRadius:8,background:`rgba(59,130,246,0.05)`,border:`1px solid rgba(59,130,246,0.1)`},children:[(0,q.jsx)(oe,{size:18,style:{color:`#3b82f6`,flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:t.name}),(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-400)`},children:t.size})]}),t.href&&(0,q.jsx)(`button`,{onClick:()=>Pd(t.href),style:{background:`none`,border:`none`,cursor:`pointer`,color:`#3b82f6`,padding:4},title:`Tải xuống`,children:`⬇`})]});if(i){let e=decodeURIComponent(i.url.split(`/`).pop()?.split(`?`)[0]||`Tệp đính kèm`);return(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 12px`,borderRadius:8,background:`rgba(59,130,246,0.05)`,border:`1px solid rgba(59,130,246,0.1)`},children:[(0,q.jsx)(oe,{size:18,style:{color:`#3b82f6`,flexShrink:0}}),(0,q.jsx)(`div`,{style:{flex:1,minWidth:0,fontSize:13,fontWeight:500,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e}),(0,q.jsx)(`button`,{onClick:()=>Pd(i.url),style:{background:`none`,border:`none`,cursor:`pointer`,color:`#3b82f6`,padding:4},title:`Tải xuống`,children:`⬇`})]})}return(0,q.jsxs)(`div`,{className:`msg__file`,style:{display:`flex`,alignItems:`center`,gap:4},children:[(0,q.jsx)(oe,{size:14,style:{opacity:.6}}),(0,q.jsx)(`span`,{style:{fontSize:13},children:`📎 Tệp đính kèm`})]})}if(a===`link`){let t=Q(e.content);return t&&(t.title||t.href)?(0,q.jsxs)(`div`,{style:{padding:`8px 12px`,borderRadius:8,background:`rgba(59,130,246,0.05)`,border:`1px solid rgba(59,130,246,0.08)`,cursor:Md(t.href)?`pointer`:`default`},onClick:()=>Pd(t.href),children:[t.thumb&&(0,q.jsx)(`img`,{src:t.thumb,alt:``,style:{width:`100%`,maxHeight:140,objectFit:`cover`,borderRadius:6,marginBottom:6},onError:e=>{e.target.style.display=`none`}}),(0,q.jsxs)(`div`,{style:{fontSize:13,fontWeight:500,color:`#2563eb`},children:[`🔗 `,t.title||t.href]}),t.description&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-500)`,marginTop:2},children:t.description}),t.href&&!t.title&&(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:2,wordBreak:`break-all`},children:t.href})]}):(0,q.jsx)(`div`,{style:{fontSize:13,color:`var(--gray-600)`},children:Jd(`link`,e.content)})}if(a===`bank_transfer`){let t=Q(e.content),n=t?.amount??t?.transferAmount;return(0,q.jsxs)(`div`,{style:{padding:`10px 14px`,borderRadius:10,background:`rgba(22,163,74,0.08)`,border:`1px solid rgba(22,163,74,0.15)`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,marginBottom:4},children:[(0,q.jsx)(`span`,{style:{fontSize:20},children:`🏦`}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:600},children:t?.bankName||t?.bankCode||`Chuyển khoản`}),n!=null&&(0,q.jsx)(`div`,{style:{fontSize:15,fontWeight:700,color:`#16a34a`},children:new Intl.NumberFormat(`vi-VN`,{style:`currency`,currency:`VND`}).format(Number(n))})]})]}),(t?.description||t?.content)&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-500)`,marginTop:2},children:t.description||t.content})]})}if(a===`bank_card`)return(0,q.jsx)(nf,{content:e.content});
3if(a===`call`){let t=Q(e.content),n=typeof t?.params==`string`?Q(t.params):t?.params,r=t?.callType||``,i=n?.calltype??-1,a=String(r).toLowerCase().includes(`video`)||i===1,o=n?.duration??t?.callDuration??t?.duration??0,s=n?.isCaller===1,c=String(r).toLowerCase().includes(`miss`)||t?.action===`recommened.misscall`||o===0,l=c?`📞`:a?`📹`:`📞`,u=a?`Cuộc gọi video`:`Cuộc gọi`;c&&(u=a?`Gọi video nhỡ`:`Cuộc gọi nhỡ`);let d=``;if(!c&&o>0){let e=Math.floor(o/60),t=o%60;d=e>0?`${e}p${t}s`:`${t}s`}return(0,q.jsxs)(`div`,{style:{display:`inline-flex`,alignItems:`center`,gap:10,padding:`8px 14px`,borderRadius:12,background:`#fff`,border:`1px solid #e2e8f0`,borderLeft:`3px solid ${c?`#ef4444`:`#22c55e`}`,boxShadow:`0 1px 3px rgba(0,0,0,0.06)`,minWidth:160},children:[(0,q.jsx)(`span`,{style:{fontSize:18,lineHeight:1},children:l}),(0,q.jsxs)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:1},children:[(0,q.jsx)(`span`,{style:{fontSize:13,fontWeight:600,color:`#1e293b`},children:u}),(0,q.jsxs)(`span`,{style:{fontSize:11,color:`#94a3b8`},children:[s?`Gọi đi`:`Gọi đến`,d&&` · ${d}`]})]})]})}if(a===`reminder`){let t=Zd(e.content);return(0,q.jsxs)(`div`,{style:{padding:`8px 12px`,borderLeft:`3px solid #f59e0b`,borderRadius:8,background:`rgba(245,158,11,0.08)`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,marginBottom:2},children:[(0,q.jsx)(`span`,{style:{fontSize:14},children:`📅`}),(0,q.jsx)(`span`,{style:{fontSize:12,fontWeight:600,color:`#f59e0b`},children:`Nhắc hẹn`})]}),(0,q.jsx)(`div`,{style:{fontSize:13},children:t?.title||`Nhắc hẹn`}),t?.time&&(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:4},children:[`🕐 `,t.time]})]})}if(a===`qr_code`)return(0,q.jsxs)(`div`,{style:{textAlign:`center`,padding:`12px 16px`},children:[(0,q.jsx)(`span`,{style:{fontSize:36},children:`📱`}),(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-500)`,marginTop:4},children:`Mã QR`})]});if(a===`poll`){let t=Q(e.content);return(0,q.jsx)(`div`,{style:{padding:`8px 12px`,borderRadius:8,background:`rgba(59,130,246,0.06)`,border:`1px solid rgba(59,130,246,0.1)`},children:(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(`span`,{style:{fontSize:16},children:`📊`}),(0,q.jsx)(`span`,{style:{fontSize:13,fontWeight:500},children:t?.title||`Bình chọn`})]})})}if(a===`note`){let t=Q(e.content);return(0,q.jsx)(`div`,{style:{padding:`8px 12px`,borderRadius:8,background:`rgba(147,51,234,0.06)`,border:`1px solid rgba(147,51,234,0.1)`},children:(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(`span`,{style:{fontSize:16},children:`📝`}),(0,q.jsx)(`span`,{style:{fontSize:13},children:t?.title||`Ghi chú`})]})})}if(a===`forwarded`)return(0,q.jsx)(`span`,{style:{display:`inline-block`,padding:`4px 12px`,borderRadius:16,fontSize:13,background:`rgba(147,51,234,0.08)`,color:`#9333ea`},children:`↩️ Tin nhắn chuyển tiếp`});if(a===`birthday_notification`){let t=Q(e.content),n=t?.title||`Sinh nhật`,r=t?.thumb||``,i=t?.href||``,a=n.match(/(\d{2})\/(\d{2})/),o=a?`${a[1]}/${a[2]}`:``,s=n.match(/Sinh nhật\s+của\s+(.+)/i)?.[1]?.trim()||n;return(0,q.jsxs)(`div`,{style:{width:280,borderRadius:14,overflow:`hidden`,boxShadow:`0 2px 16px rgba(251,146,60,0.18)`},children:[(0,q.jsxs)(`div`,{style:{background:`linear-gradient(135deg, #fb923c 0%, #f472b6 50%, #a78bfa 100%)`,padding:`16px 18px 12px`,textAlign:`center`,position:`relative`},children:[r?(0,q.jsx)(`img`,{src:r,alt:``,style:{width:56,height:56,borderRadius:`50%`,objectFit:`cover`,border:`3px solid rgba(255,255,255,0.7)`,margin:`0 auto 8px`,display:`block`},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(`div`,{style:{width:56,height:56,borderRadius:`50%`,margin:`0 auto 8px`,background:`rgba(255,255,255,0.25)`,display:`flex`,alignItems:`center`,justifyContent:`center`,fontSize:28},children:`🎂`}),(0,q.jsx)(`div`,{style:{color:`#fff`,fontSize:14,fontWeight:700,textShadow:`0 1px 4px rgba(0,0,0,0.15)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:s})]}),(0,q.jsxs)(`div`,{style:{padding:`12px 16px`,background:`#fffbeb`,display:`flex`,flexDirection:`column`,alignItems:`center`,gap:4},children:[o&&(0,q.jsx)(`div`,{style:{fontSize:12,fontWeight:600,color:`#f59e0b`,letterSpacing:.5},children:o}),(0,q.jsx)(`div`,{style:{fontSize:13,color:`#78350f`,fontWeight:500},children:`Hãy gửi lời chúc tốt đẹp!`}
3),i&&(0,q.jsx)(`img`,{src:i,alt:`Birthday`,style:{width:`100%`,maxHeight:100,objectFit:`contain`,borderRadius:8,marginTop:4},onError:e=>{e.target.style.display=`none`}})]})]})}if(a===`profile_notification`){let t=Q(e.content),n=t?.description||``,r=t?.thumb||``,i=e.senderName||``;return(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,padding:`10px 14px`,borderRadius:10,background:`rgba(16,185,129,0.06)`,border:`1px solid rgba(16,185,129,0.15)`,minWidth:200,maxWidth:280},children:[r&&!r.includes(`/default`)?(0,q.jsx)(`img`,{src:r,alt:``,style:{width:36,height:36,borderRadius:`50%`,objectFit:`cover`,flexShrink:0,border:`2px solid rgba(16,185,129,0.25)`},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(`div`,{style:{width:36,height:36,borderRadius:`50%`,flexShrink:0,background:`#10b981`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:15,fontWeight:600},children:(i||`?`).charAt(0).toUpperCase()}),(0,q.jsx)(`div`,{style:{flex:1,minWidth:0},children:(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,color:`#065f46`,lineHeight:1.4},children:n||`Thông báo Zalo`})})]})}if(a===`contact_card`){let t=Q(e.content),n=null;try{n=typeof t?.description==`string`?JSON.parse(t.description):t?.description??null}catch{}let r=t?.title||`Liên hệ`,i=t?.thumb||``,a=n?.phone||``;return(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:10,padding:`10px 14px`,borderRadius:10,background:`rgba(59,130,246,0.06)`,border:`1px solid rgba(59,130,246,0.12)`,minWidth:200,maxWidth:280},children:[i?(0,q.jsx)(`img`,{src:i,alt:``,style:{width:40,height:40,borderRadius:`50%`,objectFit:`cover`,flexShrink:0,border:`2px solid rgba(59,130,246,0.2)`},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(`div`,{style:{width:40,height:40,borderRadius:`50%`,flexShrink:0,background:`#3b82f6`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:16,fontWeight:600},children:r.charAt(0).toUpperCase()}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:600,color:`#1e293b`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:r}),a&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`#3b82f6`,marginTop:2},children:a}),(0,q.jsx)(`div`,{style:{fontSize:10,color:`#94a3b8`,marginTop:2},children:`Danh thiếp Zalo`})]})]})}if(a===`rich`){let t=Q(e.content),n=t?.title||t?.description||null;return(0,q.jsx)(`span`,{style:{display:`inline-block`,padding:`4px 12px`,borderRadius:16,fontSize:13,background:`rgba(107,114,128,0.08)`,color:`var(--gray-600)`},children:n?`💬 ${n}`:`💬 Tin nhắn đặc biệt`})}if(a===`video`){let t=Kd(e.content);if(t&&(t.url||t.thumb)){let e=t.thumb?null:zn(t.url);return e?(0,q.jsx)(ef,{src:e}):(0,q.jsx)(of,{url:t.url,thumb:t.thumb})}return i?(0,q.jsx)(of,{url:i.url,thumb:null}):(0,q.jsx)(`div`,{style:{fontSize:13,color:`var(--gray-600)`},children:Jd(`video`,e.content)})}if(a===`location`){let t=Q(e.content),n=typeof t?.params==`string`?Q(t.params):t?.params,r=n?.latitude,i=n?.longitude,a=t?.title||``,o=t?.description||``,s=typeof r==`number`&&typeof i==`number`,c=s?`https://www.google.com/maps?q=${r},${i}`:``;return(0,q.jsxs)(`div`,{style:{width:280,borderRadius:12,overflow:`hidden`,boxShadow:`0 2px 10px rgba(0,0,0,0.1)`,cursor:c?`pointer`:`default`},onClick:()=>c&&window.open(c,`_blank`),children:[s&&(0,q.jsx)(rf,{lat:r,lng:i}),(0,q.jsxs)(`div`,{style:{padding:`10px 14px`,background:`#fff`,borderTop:s?`1px solid #e2e8f0`:`none`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`flex-start`,gap:8},children:[(0,q.jsx)(`span`,{style:{fontSize:18,lineHeight:1,marginTop:1,flexShrink:0},children:`📍`}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[a&&(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:600,color:`#1e293b`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:a}),o&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`#64748b`,marginTop:2,lineHeight:1.4,display:`-webkit-box`,WebkitLineClamp:2,WebkitBoxOrient:`vertical`,overflow:`hidden`},children:o}
3),!a&&!o&&(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,color:`#1e293b`},children:`Vị trí được chia sẻ`})]})]}),c&&(0,q.jsx)(`div`,{style:{fontSize:11,color:`#3b82f6`,marginTop:6,fontWeight:500,textAlign:`right`},children:`Mở trong Google Maps →`})]})]})}if(a===`voice`){let t=zn(Q(e.content)?.href)||(i?zn(i.url):null);if(t)return(0,q.jsx)($d,{src:t})}if([`voice`,`gif`].includes(a))return(0,q.jsx)(`div`,{style:{fontSize:13,color:`var(--gray-600)`},children:Jd(a,e.content)});let o=Yd(e.content);return o===e.content?(0,q.jsx)(q.Fragment,{children:Qd(e.content,t.channelAccount?.displayName)}):(0,q.jsx)(q.Fragment,{children:o})}var uf=e=>typeof e==`string`&&e?e:null,df=e=>typeof e==`number`&&Number.isFinite(e)?e:null;function ff(e){if(!e)return null;try{let t=JSON.parse(e);if(!t||typeof t!=`object`)return null;let n=t.direction===`inbound`||t.direction===`outbound`?t.direction:null,r=uf(t.status);return!n||!r?null:{callId:uf(t.callId)??``,direction:n,status:r,durationSec:df(t.durationSec),talkSec:df(t.talkSec),providerLabel:uf(t.providerLabel)??``,agentName:uf(t.agentName),outcome:uf(t.outcome),endReason:uf(t.endReason)}}catch{return null}}function pf({content:e,timeLabel:t}){let n=ff(e);if(!n)return(0,q.jsx)(`div`,{className:`call-log`,children:(0,q.jsxs)(`span`,{className:`call-log__chip`,children:[(0,q.jsx)(z,{size:13}),` `,(0,q.jsx)(`span`,{children:`Cuộc gọi`}),t&&(0,q.jsx)(`span`,{className:`call-log__time`,children:t})]})});let r=ba(n),i=n.direction===`inbound`,a=r?A:i?le:ve,o=n.status===`missed`&&i?`Cuộc gọi nhỡ`:i?`Cuộc gọi đến`:`Cuộc gọi đi`,s=Sn(n.endReason),c=n.talkSec?Dn(n.talkSec):[n.status===`missed`&&i?null:bn(n.status),s].filter(Boolean).join(` · `);return(0,q.jsx)(`div`,{className:`call-log`,children:(0,q.jsxs)(`span`,{className:`call-log__chip ${r?`call-log__chip--failed`:``}`,children:[(0,q.jsx)(a,{size:13,className:`call-log__icon`}),(0,q.jsxs)(`span`,{className:`call-log__title`,children:[o,n.providerLabel?` · ${n.providerLabel}`:``]}),c&&(0,q.jsx)(`span`,{className:`call-log__detail`,children:c}),n.agentName&&(0,q.jsxs)(`span`,{className:`call-log__agent`,children:[`NV: `,n.agentName]}),n.outcome&&(0,q.jsx)(`span`,{className:`call-log__outcome`,children:wn(n.outcome)}),t&&(0,q.jsx)(`span`,{className:`call-log__time`,children:t})]})})}function mf({message:e,prevMessage:t,selectedConv:n,memberAvatarMap:r,contactAvatarUrl:i,selfUser:a,onReply:o,onUndo:s,onReact:c,onFeedback:l,loiChuaGui:u}){let d=e.senderType===`self`,f=e.senderType===`system`,p=e.aiGenerated===!0||e.senderName===`AI Assistant`,m=zd(d?a?.fullName||`Staff`:e.senderName||n.displayName||n.contact?.fullName),h=d?`#16a34a`:Bd(e.senderName||n.displayName||n.contact?.fullName),g=(e.senderUid?r.get(e.senderUid):void 0)||(d?a?.avatarUrl||void 0:i||void 0),[_,y]=(0,K.useState)(!1),b=(0,K.useRef)(null),x=!Pn(n.channelAccount?.platform);(0,K.useEffect)(()=>{if(!_)return;let e=e=>{b.current&&!b.current.contains(e.target)&&y(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[_]);let S=new Date(e.sentAt).toDateString(),C=(t?new Date(t.sentAt).toDateString():null)!==S,w=(()=>{if(!d||!e.responseSource)return null;let t=e.repliedBy?.fullName||null,n={ai_auto:{label:`AI tự động`,Icon:It,color:`#7c3aed`},ai_suggest:{label:t?`AI gợi ý · ${t}`:`AI gợi ý`,Icon:At,color:`#2563eb`},manual:{label:t||`Nhân viên`,Icon:Se,color:`#6b7280`}}[e.responseSource];if(!n)return null;let{label:r,Icon:i,color:a}=n;return(0,q.jsxs)(`span`,{className:`msg__source`,title:`Nguồn phản hồi: ${r}`,style:{display:`inline-flex`,alignItems:`center`,gap:3,color:a,fontWeight:500},children:[(0,q.jsx)(i,{size:11}),` `,r]})})();return(0,q.jsxs)(`div`,{id:`msg-${e.id}`,className:`msg-wrapper msg-wrapper--${f?`system`:d?`sent`:`received`}`,children:[C&&(0,q.jsx)(`div`,{className:`chat-messages__date`,style:{alignSelf:`center`,width:`100%`},children:Ud(e.sentAt)}),e.contentType===`group_event`?(0,q.jsx)(`div`,{style:{alignSelf:`center`,width:`100%`,textAlign:`center`,padding:`6px 0`},children:(0,q.jsx)(`span`,{style:{display:`inline-block`,fontSize:12,color:`var(--gray-500)`,background:`var(--gray-50)`,padding:`4px 14px`,borderRadius:20,fontStyle:`italic`},children:(()=>{try{let t=JSON.parse(e.content||`{}`);return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`4px`},children:[(0,q.jsx)(rt,{size:14}
3),` `,t.displayText||[t.memberNames,t.label].filter(Boolean).join(` `)||`Sự kiện nhóm`]})}catch{return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`4px`},children:[(0,q.jsx)(rt,{size:14}),` Sự kiện nhóm`]})}})()})}):f&&e.contentType===`call_log`?(0,q.jsx)(pf,{content:e.content,timeLabel:Hd(e.sentAt)}):f||e.contentType===`system_event`?(0,q.jsx)(`div`,{style:{alignSelf:`center`,width:`100%`,textAlign:`center`,padding:`6px 0`},children:(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:5,fontSize:12,color:`var(--gray-500)`,background:`var(--gray-50)`,padding:`4px 14px`,borderRadius:20,fontStyle:`italic`},children:[(0,q.jsx)(rt,{size:12}),e.content||`Sự kiện hệ thống`,(0,q.jsx)(`span`,{style:{fontSize:10,color:`var(--gray-400)`,marginLeft:4},children:Hd(e.sentAt)})]})}):(0,q.jsxs)(`div`,{className:`msg msg--${d?`sent`:`received`}`,children:[g?(0,q.jsx)(`img`,{src:g,alt:``,style:{width:28,height:28,borderRadius:`50%`,objectFit:`cover`,flexShrink:0},onError:e=>{e.target.style.display=`none`;let t=e.target.nextElementSibling;t&&(t.style.display=`flex`)}}):null,(0,q.jsx)(`div`,{style:{width:28,height:28,borderRadius:`50%`,background:h,display:g?`none`:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:10,fontWeight:600,flexShrink:0},children:m}),(0,q.jsxs)(`div`,{children:[n.threadType===`group`&&!d&&(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-500)`,marginBottom:2,marginLeft:2},children:e.senderName||`Thành viên`}),e.isDeleted?(0,q.jsxs)(`div`,{className:`msg__bubble msg__bubble--revoked`,title:`Tin nhắn đã thu hồi`,children:[(0,q.jsx)(lf,{message:e,selectedConv:n}),(0,q.jsx)(`span`,{className:`msg__revoked-tag`,children:`(đã thu hồi)`})]}):(0,q.jsxs)(`div`,{className:(()=>{let t=e.contentType===`sticker`||qd(e.content),n=e.contentType===`bank_card`||e.contentType===`rich`&&e.content?.includes(`zinstant.bankcard`),r=e.contentType===`birthday_notification`||e.contentType===`contact_card`&&/Sinh nhật/i.test(e.content||``),i=e.contentType===`image`,a=e.contentType===`video`,o=e.contentType===`call`,s=e.contentType===`location`,c=(()=>{if(e.contentType!==`contact_card`)return!1;try{let t=JSON.parse(e.content||`{}`);return t?.action===`show.profile`&&!/\d{2}\/\d{2}\s+Sinh nhật/i.test(t?.title||``)}catch{return!1}})();return t||n||r||c||i||a||o||s?`msg__sticker-wrap`:`msg__bubble`})(),children:[e.reply&&(0,q.jsxs)(`div`,{className:`msg__reply-quote`,children:[(0,q.jsx)(`span`,{className:`msg__reply-name`,children:e.reply.uidFrom||`Bạn`}),(0,q.jsx)(`span`,{className:`msg__reply-text`,children:e.reply.content?.slice(0,60)})]}),(0,q.jsx)(lf,{message:e,selectedConv:n})]}),e.reactions&&e.reactions.length>0&&(0,q.jsx)(`div`,{className:`msg__reactions`,children:e.reactions.map(t=>(0,q.jsxs)(`button`,{className:`msg__reaction-chip${t.reacted?` msg__reaction-chip--active`:``}`,onClick:()=>{x&&c(e.id,t.emoji)},children:[t.emoji,` `,t.count]},t.emoji))}),(0,q.jsxs)(`div`,{className:`msg__time`,children:[w,Hd(e.sentAt),d&&(u?(0,q.jsxs)(`span`,{className:`msg__chua-gui`,title:u,children:[(0,q.jsx)(v,{size:11}),` Chưa tới khách`]}):(0,q.jsx)(Ae,{size:12,color:`#3b82f6`}))]}),(0,q.jsxs)(`div`,{className:`msg__actions`,children:[x&&(0,q.jsx)(Od,{align:d?`right`:`left`,onReact:t=>c(e.id,t)}),(0,q.jsxs)(`div`,{className:`msg__menu-wrap`,ref:b,children:[(0,q.jsx)(`button`,{className:`msg__menu-trigger`,onClick:()=>y(e=>!e),title:`Thêm`,children:(0,q.jsx)(Ze,{size:14})}),_&&(0,q.jsxs)(`div`,{className:`msg__dropdown ${d?`msg__dropdown--left`:`msg__dropdown--right`}`,children:[(0,q.jsxs)(`button`,{className:`msg__dropdown-item`,onClick:()=>{o(e),y(!1)},children:[(0,q.jsx)(We,{size:13}),` Trả lời`]}),p&&l&&!e.isDeleted&&(0,q.jsxs)(`button`,{className:`msg__dropdown-item`,onClick:()=>{l(e),y(!1)},children:[(0,q.jsx)(Ft,{size:13}),` Góp ý cho AI`]}),d&&!e.isDeleted&&x&&(0,q.jsxs)(`button`,{className:`msg__dropdown-item msg__dropdown-item--danger`,onClick:()=>{s(e.id),y(!1)},children:[(0,q.jsx)(me,{size:13}),` Thu hồi`]})]})]})]})]})]})]})}var hf=e(r(),1);function gf(e,t){return e?.response?.data?.error||t}function _f(){let[e,t]=(0,K.useState)(null);return{error:e,recordFeedback:(0,K.useCallback)(async e=>{t(null);try{return(await G.post(`/ai/feedback`,e)).data?.feedback?.id??null}catch(e){return t(gf(e,`Không gửi được góp ý`)),null}},[]),fetchFeedback:(0,K.useCallback)(async(e={})=>{t(null);try{return(await G.get(`/ai/feedback`,{params:e})).data?.items??[]}catch(e){return t(gf(e,`Không tải được danh sách góp ý`)),[]}},[]),updateFeedback:(0,K.useCallback)(async(e,n)=>{t(null);try{return await G.put(`/ai/feedback/${e}`,n),!0}catch(e){return t(gf(e,`Không cập nhật được góp ý`)),!1}},[]),openSession:(0,K.useCallback)(async(e={})=>{t(null);try{return(await G.post(`/ai/master/sessions`,e)).data.session}catch(e){return t(gf(e,`Không mở được phiên AI Master`)),null}},[]),getSession:(0,K.useCallback)(async e=>{t(null);try{return(await G.get(`/ai/master/sessions/${e}`)).data.session}catch(e){return t(gf(e,`Không tải được phiên AI Master`)),null}},[]),sendMessage:(0,K.useCallback)(async(e,n)=>{t(null);try{return(await G.post(`/ai/master/sessions/${e}/messages`,{text:n})).data}catch(e){return t(gf(e,`AI Master không phản hồi được`)),null}},[]),fetchCaseContext:(0,K.useCallback)(async e=>{if(!e.conversationId&&!e.messageId&&!e.runId)return null;try{return(await G.get(`/ai/simulate/case-context`,{params:e})).data?.caseContext??null}catch{return null}},[]),fetchProposals:(0,K.useCallback)(async(e=`pending`)=>{t(null);try{return(await G.get(`/ai/master/proposals`,{params:{status:e}})).data?.items??[]}catch(e){return t(gf(e,`Không tải được danh sách đề xuất`)),[]}},[]),applyProposal:(0,K.useCallback)(async e=>{t(null);try{return await G.post(`/ai/master/proposals/${e}/apply`,{}),!0}catch(e){return t(gf(e,`Không áp dụng được đề xuất`)),!1}},[]),rejectProposal:(0,K.useCallback)(async e=>{t(null);try{return await G.post(`/ai/master/proposals/${e}/reject`,{}),!0}catch(e){return t(gf(e,`Không từ chối được đề xuất`)),!1}},[]),clearError:()=>t(null)}}var vf=[{value:`tone`,label:`Giọng điệu`},{value:`accuracy`,label:`Độ chính xác`},{value:`policy`,label:`Chính sách`},{value:`missing_info`,label:`Thiếu thông tin`},{value:`other`,label:`Khác`}];function yf({conversationId:e,messageId:t,messagePreview:n,onClose:r,onProposeFix:i}){let{recordFeedback:a}=_f(),[o,s]=(0,K.useState)(``),[c,l]=(0,K.useState)(null),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(!1),m=o.trim().length>0&&!f,h=async()=>
3{if(!m)return null;p(!0);let n=await a({conversationId:e,messageId:t,text:o.trim(),category:c??void 0,isExemplar:u||void 0});return p(!1),n&&W(`Đã gửi góp ý cho AI`,`success`,3e3),n};return(0,hf.createPortal)((0,q.jsx)(`div`,{className:`ai-feedback__overlay`,onMouseDown:r,children:(0,q.jsxs)(`div`,{className:`ai-feedback__modal`,onMouseDown:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{className:`ai-feedback__header`,children:[(0,q.jsxs)(`div`,{className:`ai-feedback__title`,children:[(0,q.jsx)(At,{size:15}),` Góp ý cho câu trả lời của AI`]}),(0,q.jsx)(`button`,{className:`ai-feedback__close`,onClick:r,"aria-label":`Đóng`,children:(0,q.jsx)(U,{size:16})})]}),n&&(0,q.jsx)(`div`,{className:`ai-feedback__preview`,title:`Nội dung AI đã trả lời`,children:n.length>200?`${n.slice(0,200)}…`:n}),(0,q.jsx)(`textarea`,{className:`ai-feedback__textarea`,placeholder:`Câu trả lời này nên cải thiện thế nào? (vd: sai chính sách hoàn tiền, giọng quá cứng…)`,value:o,onChange:e=>s(e.target.value),maxLength:4e3,autoFocus:!0,rows:4}),(0,q.jsx)(`div`,{className:`ai-feedback__chips`,children:vf.map(e=>(0,q.jsx)(`button`,{type:`button`,className:`ai-feedback__chip ${c===e.value?`ai-feedback__chip--active`:``}`,onClick:()=>l(c===e.value?null:e.value),children:e.label},e.value))}),(0,q.jsxs)(`button`,{type:`button`,className:`ai-feedback__exemplar ${u?`ai-feedback__exemplar--on`:``}`,onClick:()=>d(e=>!e),title:`Đánh dấu để lọc lại trong danh sách góp ý. AI chưa tự học từ các mẫu này.`,children:[(0,q.jsx)(P,{size:13,fill:u?`currentColor`:`none`}),`Đánh dấu mẫu tốt`]}),(0,q.jsxs)(`div`,{className:`ai-feedback__actions`,children:[(0,q.jsxs)(`button`,{type:`button`,className:`ai-feedback__btn ai-feedback__btn--ghost`,onClick:async()=>{let e=o.trim();if(!e){W(`Nhập nội dung góp ý trước khi đề xuất sửa`,`warning`,3e3);return}let t=await h();i?.(e,t),r()},disabled:f,children:[(0,q.jsx)(At,{size:13}),` Đề xuất sửa ngay`]}),(0,q.jsxs)(`button`,{type:`button`,className:`ai-feedback__btn ai-feedback__btn--primary`,onClick:async()=>{await h()&&r()},disabled:!m,children:[(0,q.jsx)(Qe,{size:13}),` `,f?`Đang gửi…`:`Gửi góp ý`]})]})]})}),document.body)}function bf(e){if(!e)return``;let t=new Date(e),n=Math.floor((new Date().getTime()-t.getTime())/1e3);if(n<60)return`Vừa xong`;if(n<3600)return`${Math.floor(n/60)} phút trước`;if(n<86400)return`${Math.floor(n/3600)} giờ trước`;let r=Math.floor(n/86400);return r===1?`Hôm qua`:r<7?`${r} ngày trước`:t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,year:`numeric`})}function xf({selectedConv:e,selectedConvId:t,messages:n}){let[r,i]=(0,K.useState)(null),[a,o]=(0,K.useState)({image:0,file:0,link:0}),[s,c]=(0,K.useState)([]),[l,u]=(0,K.useState)(!1),[d,f]=(0,K.useState)(!1),[p,m]=(0,K.useState)(!1),[h,g]=(0,K.useState)([]),[_,v]=(0,K.useState)(!1),[y,b]=(0,K.useState)(new Set),[x,S]=(0,K.useState)(``),[w,T]=(0,K.useState)({media:!0,docs:!1,links:!1,other:!1}),[E,D]=(0,K.useState)(!1),[O,A]=(0,K.useState)(!1),[j,M]=(0,K.useState)(!1),[N,P]=(0,K.useState)(null);(0,K.useEffect)(()=>{t&&(G.get(`/conversations/${t}/group-info`).then(e=>i(e.data)).catch(()=>i(null)),G.get(`/conversations/${t}/shared-media`).then(e=>{o(e.data.counts??{image:0,file:0,link:0}),c(e.data.messages??[])}).catch(()=>{o({image:0,file:0,link:0}),c([])}))},[t]);let ee=(0,K.useCallback)(async()=>{f(!0),v(!0),b(new Set),S(``);try{g((await G.get(`/conversations/${t}/friends`)).data.friends||[])}catch{g([])}finally{v(!1)}},[t]),ne=(0,K.useCallback)(e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),F=(0,K.useCallback)(async()=>{if(y.size!==0){m(!0);try{let e=await G.post(`/conversations/${t}/add-member`,{memberIds:Array.from(y)});e.data.errorMembers?.length>0?alert(`Không thể thêm: ${e.data.errorMembers.join(`, `)}`):(g(e=>e.map(e=>y.has(e.uid)?{...e,isInGroup:!0}:e)),b(new Set),G.get(`/conversations/${t}/group-info`).then(e=>i(e.data)).catch(()=>{}))}catch(e){alert(e?.response?.data?.error||`Lỗi thêm thành viên`)}finally{m(!1)}}},[t,y]),re=(0,K.useMemo)(()=>
3{if(!x.trim())return h;let e=x.toLowerCase();return h.filter(t=>t.displayName.toLowerCase().includes(e))},[h,x]),I=(0,K.useCallback)(e=>{T(t=>({...t,[e]:!t[e]}))},[]),ie=(0,K.useMemo)(()=>{let e=[];return s.filter(e=>e.contentType===`image`||e.contentType===`video`).forEach(t=>{let n=Wd(t.content);n&&e.push({url:n,sentAt:t.sentAt,senderName:t.senderName})}),n.forEach(t=>{if(t.contentType===`text`){let n=Wd(t.content);n&&!e.some(e=>e.url===n)&&e.push({url:n,sentAt:t.sentAt,senderName:t.senderName??``})}}),e},[s,n]),ae=(0,K.useMemo)(()=>s.filter(e=>e.contentType===`file`).map(e=>{let t=Xd(e.content);return{id:e.id,name:t?.name||e.content?.split(`/`).pop()||`File`,size:t?.size||``,href:t?.href||(e.content?.startsWith(`http`)?e.content:``),sentAt:e.sentAt,senderName:e.senderName}}),[s]),oe=(0,K.useMemo)(()=>{let e=[],t=new Set;s.filter(e=>e.contentType===`link`).forEach(n=>{let r=Q(n.content),i=r?.href||(n.content?.startsWith(`http`)?n.content:``),a=r?.title||r?.description||i||`Liên kết`,o=r?.thumb||null;i&&t.add(i),e.push({id:n.id,title:a,href:i,thumb:o,sentAt:n.sentAt,senderName:n.senderName})});let r=/https?:\/\/[^\s<>"']+/gi,i=[...s.filter(e=>e.contentType===`text`),...n.filter(e=>e.contentType===`text`)];for(let n of i){let i=(n.content||``).match(r);if(i)for(let r of i){if(/\.(jpg|jpeg|png|gif|webp|bmp|svg)(\?|$)/i.test(r)||t.has(r))continue;t.add(r);let i=r;try{i=new URL(r).hostname.replace(`www.`,``)}catch{}e.push({id:`text-link-${n.id}-${r.slice(-8)}`,title:i,href:r,thumb:null,sentAt:n.sentAt,senderName:n.senderName??``})}}return e},[s,n]);return(0,q.jsxs)(`div`,{className:`chat-detail`,children:[r&&(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(Gt,{size:14}),` THÀNH VIÊN (`,r.memberCount,`)`]}),(0,q.jsxs)(`button`,{onClick:ee,title:`Thêm thành viên`,style:{background:`none`,border:`1px solid var(--gray-200)`,borderRadius:6,cursor:`pointer`,padding:`3px 6px`,color:`var(--gray-500)`,display:`flex`,alignItems:`center`,gap:4,fontSize:11,fontWeight:500,transition:`all 0.15s`},onMouseEnter:e=>{e.currentTarget.style.borderColor=`#3b82f6`,e.currentTarget.style.color=`#3b82f6`,e.currentTarget.style.background=`#eff6ff`},onMouseLeave:e=>{e.currentTarget.style.borderColor=`var(--gray-200)`,e.currentTarget.style.color=`var(--gray-500)`,e.currentTarget.style.background=`none`},children:[(0,q.jsx)(qt,{size:12}),` Thêm`]})]}),(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:2},children:(l?r.members:r.members.slice(0,5)).map((e,t)=>(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`6px 4px`,borderRadius:6,transition:`background 0.1s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,children:[e.avatarUrl?(0,q.jsx)(`img`,{src:e.avatarUrl,alt:e.name,style:{width:28,height:28,borderRadius:`50%`,objectFit:`cover`,flexShrink:0,border:`1px solid var(--gray-100)`},onError:e=>{let t=e.target;t.style.display=`none`;let n=t.nextElementSibling;n&&(n.style.display=`flex`)}}):null,(0,q.jsx)(`div`,{style:{width:28,height:28,borderRadius:`50%`,background:Bd(e.name),display:e.avatarUrl?`none`:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:10,fontWeight:600,flexShrink:0},children:zd(e.name)}),(0,q.jsx)(`span`,{style:{fontSize:12,color:`var(--gray-700)`,fontWeight:500},children:e.name}),e.uid===`self`&&(0,q.jsx)(`span`,{style:{fontSize:10,color:`var(--gray-400)`,marginLeft:`auto`},children:`Bạn`})]},e.uid||t))}),r.members.length>5&&(0,q.jsx)(`button`,{onClick:()=>u(!l),style:{width:`100%`,padding:`6px 0`,marginTop:4,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,fontFamily:`inherit`,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:l?(0,q.jsxs)(`span`,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(`span`,{children:[`Xem thêm (`,r.members.length-5,`) `,(0,q.jsx)(H,{size:14})]})})]}),d&&(0,q.jsx)(`div`,{style:{position:`fixed`,inset:0,background:`rgba(0,0,0,0.35)`,zIndex:9999,display:`flex`,alignItems:`center`,justifyContent:`center`},onClick:()=>f(!1),children:(0,q.jsxs)(`div`,{style:{background:`#fff`,borderRadius:14,width:400,maxHeight:`70vh`,boxShadow:`0 20px 60px rgba(0,0,0,0.2)`,display:`flex`,flexDirection:`column`,overflow:`hidden`},onClick:e=>e.stopPropagation(),children:[(0,q.jsxs)(`div`,{style:{padding:`16px 20px 12px`,borderBottom:`1px solid var(--gray-100)`},children:[(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`,marginBottom:12},children:[(0,q.jsx)(`h3`,{style:{margin:0,fontSize:16,fontWeight:600},children:`Thêm thành viên`}),(0,q.jsx)(`button`,{onClick:()=>f(!1),style:{background:`none`,border:`none`,cursor:`pointer`,padding:4,color:`var(--gray-400)`},children:(0,q.jsx)(U,{size:18})})]}),(0,q.jsx)(`input`,{type:`text`,placeholder:`🔍 Tìm bạn bè...`,value:x,onChange:e=>S(e.target.value),style:{width:`100%`,padding:`8px 12px`,border:`1px solid var(--gray-200)`,borderRadius:8,fontSize:13,outline:`none`,boxSizing:`border-box`,background:`var(--gray-50)`},autoFocus:!0}),y.size>0&&(0,q.jsxs)(`div`,{style:{marginTop:8,fontSize:12,color:`#3b82f6`,fontWeight:500},children:[`Đã chọn `,y.size,` người`]})]}),(0,q.jsx)(`div`,{style:{flex:1,overflowY:`auto`,padding:`8px 12px`,minHeight:200,maxHeight:360}
3,children:_?(0,q.jsxs)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:[(0,q.jsx)(Ye,{size:20,style:{animation:`spin 1s linear infinite`,marginBottom:8}}),(0,q.jsx)(`div`,{children:`Đang tải danh sách bạn bè...`})]}):re.length===0?(0,q.jsx)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:x?`Không tìm thấy bạn bè phù hợp`:`Không có bạn bè nào`}):re.map(e=>(0,q.jsxs)(`div`,{onClick:()=>!e.isInGroup&&ne(e.uid),style:{display:`flex`,alignItems:`center`,gap:10,padding:`8px 8px`,borderRadius:8,cursor:e.isInGroup?`default`:`pointer`,transition:`background 0.1s`,background:y.has(e.uid)?`rgba(59,130,246,0.08)`:`transparent`,opacity:e.isInGroup?.5:1},onMouseEnter:t=>{e.isInGroup||(t.currentTarget.style.background=y.has(e.uid)?`rgba(59,130,246,0.12)`:`var(--gray-50)`)},onMouseLeave:t=>{t.currentTarget.style.background=y.has(e.uid)?`rgba(59,130,246,0.08)`:`transparent`},children:[(0,q.jsx)(`div`,{style:{width:18,height:18,borderRadius:4,flexShrink:0,border:y.has(e.uid)?`2px solid #3b82f6`:`2px solid var(--gray-300)`,background:y.has(e.uid)?`#3b82f6`:`#fff`,display:`flex`,alignItems:`center`,justifyContent:`center`},children:y.has(e.uid)&&(0,q.jsx)(te,{size:12,color:`#fff`,strokeWidth:3})}),e.avatar?(0,q.jsx)(`img`,{src:e.avatar,alt:``,style:{width:36,height:36,borderRadius:`50%`,objectFit:`cover`,flexShrink:0},onError:e=>{e.target.style.display=`none`;let t=e.target.nextElementSibling;t&&(t.style.display=`flex`)}}):null,(0,q.jsx)(`div`,{style:{width:36,height:36,borderRadius:`50%`,flexShrink:0,background:Bd(e.displayName),display:e.avatar?`none`:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:12,fontWeight:600},children:zd(e.displayName)}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{fontSize:13,fontWeight:500,color:`var(--gray-800)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.displayName}),e.isInGroup&&(0,q.jsx)(`div`,{style:{fontSize:11,color:`var(--gray-400)`},children:`Đã trong nhóm`})]})]},e.uid))}),(0,q.jsxs)(`div`,{style:{padding:`12px 20px`,borderTop:`1px solid var(--gray-100)`,display:`flex`,gap:8,justifyContent:`flex-end`},children:[(0,q.jsx)(`button`,{onClick:()=>f(!1),style:{padding:`8px 20px`,border:`1px solid var(--gray-200)`,borderRadius:8,background:`#fff`,cursor:`pointer`,fontSize:13,fontWeight:500},children:`Hủy`}),(0,q.jsx)(`button`,{onClick:F,disabled:p||y.size===0,style:{padding:`8px 20px`,border:`none`,borderRadius:8,cursor:`pointer`,background:`#3b82f6`,color:`#fff`,fontSize:13,fontWeight:600,opacity:p||y.size===0?.5:1,transition:`opacity 0.15s`},children:p?`Đang thêm...`:`Thêm${y.size>0?` (${y.size})`:``}`})]})]})}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,style:{cursor:`pointer`},onClick:()=>I(`media`),children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(k,{size:14}),` ẢNH / VIDEO `,a.image>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,a.image,`)`]})]}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transition:`transform 0.2s`,transform:w.media?`rotate(0)`:`rotate(-90deg)`}})]}),w.media&&(ie.length>0||a.image>0?(0,q.jsxs)(`div`,{children:[(0,q.jsxs)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(3, 1fr)`,gap:4,marginTop:8},children:[(E?ie:ie.slice(0,6)).map((e,t)=>(0,q.jsxs)(`div`,{style:{aspectRatio:`1`,borderRadius:6,overflow:`hidden`,background:`var(--gray-100)`,cursor:`pointer`,position:`relative`},onClick:()=>P(e.url),children:[(0,q.jsx)(`img`,{src:e.url,alt:``,style:{width:`100%`,height:`100%`,objectFit:`cover`},onError:e=>{e.target.style.display=`none`}}),e.sentAt&&(0,q.jsx)(`div`,{style:{position:`absolute`,bottom:0,left:0,right:0,background:`linear-gradient(transparent, rgba(0,0,0,0.6))`,padding:`12px 6px 4px`,fontSize:10,color:`rgba(255,255,255,0.9)`,lineHeight:1},children:bf(e.sentAt)})]},t)),ie.length===0&&Array.from({length:Math.min(3,a.image)}).map((e,t)=>(0,q.jsx)(`div`,{style:{aspectRatio:`1`,borderRadius:6,background:`var(--gray-100)`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`var(--gray-300)`},children:(0,q.jsx)(k,{size:16})},`ph-${t}`))]}),(ie.length>6||a.image>
36)&&(0,q.jsx)(`button`,{onClick:()=>D(!E),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:E?(0,q.jsxs)(`span`,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(`span`,{children:[`Xem tất cả (`,Math.max(ie.length,a.image),`) `,(0,q.jsx)(H,{size:14})]})})]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có ảnh/video được chia sẻ`}))]}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,style:{cursor:`pointer`},onClick:()=>I(`docs`),children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(zt,{size:14}),` TÀI LIỆU `,a.file>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,a.file,`)`]})]}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transition:`transform 0.2s`,transform:w.docs?`rotate(0)`:`rotate(-90deg)`}})]}),w.docs&&(ae.length>0?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:6,marginTop:8},children:(O?ae:ae.slice(0,6)).map(e=>(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 10px`,background:`var(--gray-50)`,borderRadius:6,fontSize:12},children:[(0,q.jsx)(zt,{size:16,color:`var(--gray-500)`,style:{flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,color:`var(--gray-700)`,fontWeight:500},children:e.name}),(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:1,display:`flex`,alignItems:`center`,gap:4},children:[e.size&&(0,q.jsx)(`span`,{children:e.size}),e.size&&e.sentAt&&(0,q.jsx)(`span`,{children:`·`}),e.sentAt&&(0,q.jsx)(`span`,{children:bf(e.sentAt)})]})]}),e.href&&(0,q.jsx)(`button`,{onClick:()=>window.open(e.href,`_blank`),style:{background:`none`,border:`none`,cursor:`pointer`,color:`#3b82f6`,padding:4,display:`flex`,flexShrink:0},title:`Tải xuống`,children:(0,q.jsx)(Ut,{size:14})})]},e.id))}),ae.length>6&&(0,q.jsx)(`button`,{onClick:()=>A(!O),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:O?(0,q.jsxs)(`span`,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(`span`,{children:[`Xem tất cả (`,ae.length,`) `,(0,q.jsx)(H,{size:14})]})})]}):a.file>0?(0,q.jsxs)(`div`,{style:{padding:`8px 0`,fontSize:12,color:`var(--gray-500)`},children:[a.file,` tài liệu đã chia sẻ`]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có tài liệu được chia sẻ trong hội thoại này`}))]}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,style:{cursor:`pointer`},onClick:()=>I(`links`),children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(C,{size:14}),` LIÊN KẾT `,a.link>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,a.link,`)`]})]}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transition:`transform 0.2s`,transform:w.links?`rotate(0)`:`rotate(-90deg)`}})]}),w.links&&(oe.length>0?(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:6,marginTop:8},children:(j?oe:oe.slice(0,6)).map(e=>(0,q.jsxs)(`a`,{href:e.href||`#`,target:`_blank`,rel:`noopener noreferrer`,style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 10px`,background:`var(--gray-50)`,borderRadius:6,fontSize:12,color:`#3b82f6`,textDecoration:`none`},children:[e.thumb?(0,q.jsx)(`img`,{src:e.thumb,alt:``,style:{width:32,height:32,borderRadius:4,objectFit:`cover`,flexShrink:0},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(C,{size:16,style:{flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontWeight:500},children:e.title}),(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,marginTop:1,display:`flex`,alignItems:`center`,gap:4},children:[e.href&&e.title!==e.href&&(0,q.jsx)(`span`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.href}),e.href&&e.title!==e.href&&e.sentAt&&(0,q.jsx)(`span`,{style:{flexShrink:0},children:`·`}),e.sentAt&&(0,q.jsx)(`span`,{style:{flexShrink:0},children:bf(e.sentAt)})]})]}),(0,q.jsx)(Rt,{size:12,style:{flexShrink:0,opacity:.5}})]},e.id))}),oe.length>6&&(0,q.jsx)(`button`,{onClick:()=>M(!j),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:j?(0,q.jsxs)(`span`,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(`span`,{children:[`Xem tất cả (`,oe.length,`) `,(0,q.jsx)(H,{size:14})]})})]}):a.link>0?(0,q.jsxs)(`div`,{style:{padding:`8px 0`,fontSize:12,color:`var(--gray-500)`},children:[a.link,` liên kết đã chia sẻ`]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có liên kết được chia sẻ`}))]}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,style:{cursor:`pointer`},onClick:()=>I(`other`),children:[(0,q.jsx)(`span`,{className:`chat-detail__section-title`,children:`THAO TÁC KHÁC`}),(0,q.jsx)(H,{size:14,style:{color:`var(--gray-400)`,transition:`transform 0.2s`,transform:w.other?`rotate(0)`:`rotate(-90deg)`}})]}),w.other&&(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:2,marginTop:4},children:(0,q.jsxs)(`button`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 4px`,background:`none`,border:`none`,cursor:`pointer`,color:`var(--gray-600)`,fontSize:13,borderRadius:6,transition:`background 0.15s`,width:`100%`},onClick:()=>{navigator.clipboard.writeText(r?.externalThreadId||``),alert(`Đã sao chép ID nhóm!`)},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`none`,children:[(0,q.jsx)(ot,{size:15}),` Sao chép ID nhóm`]})})]}
3),N&&(0,q.jsx)(kd,{src:N,type:`image`,onClose:()=>P(null)})]})}var Sf=[{cateId:12017,label:`Quby`},{cateId:10051,label:`Sinh nhật`},{cateId:0,label:`Củ hành`},{cateId:1,label:`Qoobee`},{cateId:2,label:`Bồ Câu`},{cateId:10254,label:`Quỳnh Aka`}],Cf=`stk_`,wf=1440*60*1e3;function Tf(e){try{let t=localStorage.getItem(Cf+e);if(!t)return null;let{data:n,expiresAt:r}=JSON.parse(t);return Date.now()>=r?(localStorage.removeItem(Cf+e),null):n}catch{return null}}function Ef(e,t,n=wf){try{localStorage.setItem(Cf+e,JSON.stringify({data:t,expiresAt:Date.now()+n}))}catch{}}function Df({onSelect:e,onClose:t}){let[n,r]=(0,K.useState)(Sf[0].cateId),[i,a]=(0,K.useState)({}),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(null),[u,d]=(0,K.useState)(``),[f,p]=(0,K.useState)([]),[m,h]=(0,K.useState)(!1),g=(0,K.useRef)(null),_=(0,K.useRef)(null),v=(0,K.useCallback)(async e=>{if(i[e])return;let t=Tf(`pack_${e}`);if(t){a(n=>({...n,[e]:t}));return}s(!0),l(null);try{let{data:t}=await G.get(`/stickers/category/${e}`);if(t.success&&Array.isArray(t.stickers))a(n=>({...n,[e]:t.stickers})),Ef(`pack_${e}`,t.stickers);else throw Error(t.error||`Invalid response`)}catch(e){l(e.message||`Không thể tải sticker`)}finally{s(!1)}},[i]);(0,K.useEffect)(()=>{v(n)},[]),(0,K.useEffect)(()=>{u||v(n)},[n]);let y=(0,K.useCallback)(e=>{if(d(e),g.current&&clearTimeout(g.current),!e.trim()){p([]),h(!1);return}h(!0),g.current=setTimeout(async()=>{try{let{data:t}=await G.get(`/stickers/search`,{params:{keyword:e,limit:20}});t.success&&Array.isArray(t.stickers)&&t.stickers.length>0?p(t.stickers.map(e=>({id:e.sticker_id||e.id,cateId:e.cateId||e.catId||0,type:e.type||2,text:e.text||``,stickerUrl:``,stickerSpriteUrl:``,stickerWebpUrl:null})).filter(e=>e.id)):p([])}catch{p([])}finally{h(!1)}},400)},[]),b=e=>{_.current&&_.current.scrollBy({left:e===`left`?-120:120,behavior:`smooth`})},S=u.trim()?f:i[n]||[],C=e=>`https://zalo-api.zadn.vn/api/emoticon/sticker/webpc?eid=${e.id}&size=130`;return(0,q.jsxs)(`div`,{className:`sticker-picker`,children:[(0,q.jsxs)(`div`,{className:`sticker-picker__header`,children:[(0,q.jsx)(`span`,{className:`sticker-picker__title`,children:`Sticker Zalo`}),(0,q.jsx)(`button`,{className:`sticker-picker__close`,onClick:t,children:(0,q.jsx)(U,{size:14})})]}),(0,q.jsxs)(`div`,{className:`sticker-picker__search`,children:[(0,q.jsx)(_t,{size:14}),(0,q.jsx)(`input`,{placeholder:`Tìm sticker...`,value:u,onChange:e=>y(e.target.value),autoFocus:!0}),u&&(0,q.jsx)(`button`,{onClick:()=>y(``),className:`sticker-picker__search-clear`,children:(0,q.jsx)(U,{size:12})})]}),(0,q.jsx)(`div`,{className:`sticker-picker__grid`,children:o||m?(0,q.jsxs)(`div`,{className:`sticker-picker__loading`,children:[(0,q.jsx)(Zt,{size:20,className:`sticker-picker__spinner`}),(0,q.jsx)(`span`,{children:`Đang tải sticker...`})]}):c?(0,q.jsxs)(`div`,{className:`sticker-picker__error`,children:[(0,q.jsx)(`span`,{children:c}),(0,q.jsx)(`button`,{onClick:()=>v(n),children:`Thử lại`})]}):S.length===0?(0,q.jsx)(`div`,{className:`sticker-picker__empty`,children:u?`Không tìm thấy sticker`:`Chưa có sticker`}):S.map(n=>(0,q.jsx)(`button`,{className:`sticker-picker__item`,onClick:()=>{e(n.id,n.cateId,n.type),t()},children:(0,q.jsx)(`img`,{src:C(n),alt:n.text||`sticker-${n.id}`,loading:`lazy`,onError:e=>{e.target.style.display=`none`}})},n.id))}),!u&&(0,q.jsxs)(`div`,{className:`sticker-picker__tabs-wrap`,children:[(0,q.jsx)(`button`,{className:`sticker-picker__tabs-arrow`,onClick:()=>b(`left`),children:(0,q.jsx)(x,{size:14})}),(0,q.jsx)(`div`,{className:`sticker-picker__tabs`,ref:_,children:Sf.map(e=>(0,q.jsx)(`button`,{className:`sticker-picker__tab ${n===e.cateId?`sticker-picker__tab--active`:``}`,onClick:()=>r(e.cateId),title:e.label,children:e.label},e.cateId))}),(0,q.jsx)(`button`,{className:`sticker-picker__tabs-arrow`,onClick:()=>b(`right`),children:(0,q.jsx)($t,{size:14})})]})]})}var Of=4*1024*1024,kf=[1920,1440,1080],Af=[.85,.7];function jf(e){if(!e)return[];let t=[];for(let n of Array.from(e.items??[])){if(n.kind!==`file`||!n.type.startsWith(`image/`))continue;let e=n.getAsFile();e&&t.push(If(e))}if(t.length>0)return t;for(let n of Array.from(e.files??[]))n.type.startsWith(`image/`)&&t.push(If(n));return t}async function Mf(e){if(e.size<=Of||e.type===`image/gif`)return e;let t;try{t=await createImageBitmap(e)}catch{return e}try{let n=null;for(let r of kf)for(let i of Af){let a=await Pf(t,r,i);if(!a)continue;let o=new File([a],Ff(e.name),{type:`image/jpeg`});if((!n||o.size<n.size)&&(n=o),o.size<=Of)return o}return n??e}finally{t.close()}}function Nf(e){return e<1024?`${e} B`:e<1024*1024?`${Math.round(e/1024)} KB`:`${(e/(1024*1024)).toFixed(1).replace(`.`,`,`)} MB`}async function Pf(e,t,n){let r=Math.min(1,t/Math.max(e.width,e.height)),i=Math.max(1,Math.round(e.width*r)),a=Math.max(1,Math.round(e.height*r)),o=document.createElement(`canvas`);o.width=i,o.height=a;let s=o.getContext(`2d`);return s?(s.fillStyle=`#fff`,s.fillRect(0,0,i,a),s.drawImage(e,0,0,i,a),new Promise(e=>o.toBlob(t=>e(t),`image/jpeg`,n))):null}function Ff(e){return`${e.replace(/\.[^.]+$/,``)||`anh-dan`}.jpg`}function If(e){if(!(!e.name||e.name===`image.png`||e.name===`image.jpeg`||e.name===`blob`))return e;let t=(e.type.split(`/`)[1]||`png`).replace(`jpeg`,`jpg`);return new File([e],`anh-dan-${Date.now()}.${t}`,{type:e.type})}function Lf({anhCho:e,dangXuLy:t,onBo:n}){return e.length===0&&!t?null:(0,q.jsxs)(`div`,{className:`chat-paste`,children:[e.map(e=>(0,q.jsxs)(`div`,{className:`chat-paste__item`,title:`${e.file.name} — ${Nf(e.file.size)}`,children:[(0,q.jsx)(`img`,{src:e.url,alt:e.file.name}),(0,q.jsx)(`button`,{type:`button`,className:`chat-paste__remove`,onClick:()=>n(e.id),"aria-label":`Bỏ ảnh ${e.file.name}`,children:(0,q.jsx)(U,{size:11})}),(0,q.jsx)(`span`,{className:`chat-paste__size`,children:Nf(e.file.size)})]},e.id)),t&&(0,q.jsx)(`div`,{className:`chat-paste__item chat-paste__item--loading`,children:`Đang xử lý…`}),e.length>0&&(0,q.jsxs)(`span`,{className:`chat-paste__hint`,children:[e.length,` ảnh chờ gửi · Enter để gửi · Esc để bỏ`]})]})}function Rf({hienThi:e,vungTha:t}){return!e||!t?null:(0,hf.createPortal)((0,q.jsx)(`div`,{className:`chat-drop`,children:(0,q.jsxs)(`div`,{className:`chat-drop__box`,children:[(0,q.jsx)(ne,{size:28}),(0,q.jsx)(`span`,{className:`chat-drop__title`,children:`Thả ảnh vào đây`}),(0,q.jsx)(`span`,{className:`chat-drop__hint`,children:`Ảnh sẽ chờ ở ô soạn tin — bấm Gửi mới gửi đi`})]})}),t)}
3function zf(e){e.forEach(e=>URL.revokeObjectURL(e.url))}function Bf(e,t){if(!e||e===t)return!1;let n=e.tagName;return n===`INPUT`||n===`TEXTAREA`||n===`SELECT`||e.isContentEditable}var Vf=`.chat-main`;function Hf(e,t){let n=(0,K.useRef)([]),[r,i]=(0,K.useState)([]),[a,o]=(0,K.useState)(!1),s=(0,K.useCallback)(e=>{let t=e(n.current);n.current=t,i(t)},[]),c=(0,K.useCallback)(async e=>{if(e.length!==0){o(!0);try{let t=[];for(let n of e){let e=n;try{e=await Mf(n)}catch{}if(e.size>5242880){W(`Ảnh "${n.name}" nặng ${Nf(n.size)} — vượt giới hạn 5MB.`,`warning`);continue}t.push({id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,file:e,url:URL.createObjectURL(e)})}if(t.length===0)return;let r=Math.max(5-n.current.length,0);t.length>r&&(W(`Mỗi lượt gửi tối đa 5 ảnh — ảnh dư đã bị bỏ qua.`,`warning`),zf(t.slice(r)));let i=t.slice(0,r);i.length>0&&s(e=>[...e,...i])}finally{o(!1)}}},[s]),l=(0,K.useCallback)(e=>{s(t=>{let n=t.find(t=>t.id===e);return n&&URL.revokeObjectURL(n.url),t.filter(t=>t.id!==e)})},[s]),u=(0,K.useCallback)(()=>{s(e=>(zf(e),[]))},[s]),d=(0,K.useCallback)(()=>{let e=n.current;return e.length>0&&s(()=>[]),e},[s]);(0,K.useEffect)(()=>{let t=t=>{if(Bf(t.target,e.current))return;let n=jf(t.clipboardData);n.length!==0&&(t.clipboardData?.getData(`text/plain`)||t.preventDefault(),c(n))};return window.addEventListener(`paste`,t),()=>window.removeEventListener(`paste`,t)},[c,e]);let[f,p]=(0,K.useState)(null),[m,h]=(0,K.useState)(!1),g=(0,K.useRef)(null);return(0,K.useEffect)(()=>{p(e.current?.closest(Vf))},[e,t]),(0,K.useEffect)(()=>{let e=e=>!!e&&Array.from(e.types).includes(`Files`),t=e=>e instanceof Element&&!!e.closest(Vf),n=()=>{g.current&&=(clearTimeout(g.current),null)},r=r=>{if(!e(r.dataTransfer))return;r.preventDefault();let i=t(r.target);if(r.dataTransfer&&(r.dataTransfer.dropEffect=i?`copy`:`none`),n(),!i){h(!1);return}h(!0),g.current=setTimeout(()=>h(!1),600)},i=r=>{if(!e(r.dataTransfer)||(r.preventDefault(),n(),h(!1),!t(r.target)))return;let i=jf(r.dataTransfer);if(i.length===0){W(`Chỉ kéo thả được ảnh — tài liệu thì dùng nút File bên dưới ô soạn tin.`,`warning`);return}c(i)};return window.addEventListener(`dragover`,r),window.addEventListener(`drop`,i),()=>{window.removeEventListener(`dragover`,r),window.removeEventListener(`drop`,i),n()}},[c]),(0,K.useEffect)(()=>()=>{zf(n.current),n.current=[]},[t]),{anhCho:r,dangXuLyAnh:a,boAnhCho:l,xoaHetAnhCho:u,nhanRaDeGui:d,vungTha:f,dangKeoVao:m}}var Uf={applicable:!1,platform:null,lastUserAt:null,daysSince:null,withinWindow:!0,expiresAt:null};function Wf(e){let[t,n]=(0,K.useState)(Uf),[r,i]=(0,K.useState)(!1),{on:a}=lr(),o=(0,K.useCallback)(async()=>{if(!e){n(Uf);return}i(!0);try{let{data:t}=await G.get(`/conversations/${e}/cs-window`);n(t)}catch{n(Uf)}finally{i(!1)}},[e]);return(0,K.useEffect)(()=>{o()},[o]),(0,K.useEffect)(()=>{if(e)return a(`chat:message`,t=>{t?.conversationId===e&&t?.senderType===`contact`&&o()})},[e,a,o]),{state:t,loading:r,refresh:o}}function Gf({state:e,onOpenZns:t}){if(!e.applicable||e.withinWindow)return null;if(e.platform===Fn.FACEBOOK_PAGE)return(0,q.jsxs)(`div`,{className:`cs-banner`,children:[(0,q.jsx)(`div`,{className:`cs-banner__icon`,children:(0,q.jsx)(v,{size:16})}),(0,q.jsxs)(`div`,{className:`cs-banner__body`,children:[(0,q.jsx)(`div`,{className:`cs-banner__title`,children:`Ngoài khung nhắn tin 24 giờ của Facebook`}),(0,q.jsx)(`div`,{className:`cs-banner__desc`,children:`Đã quá 24 giờ kể từ tin nhắn cuối của khách. Chỉ có thể nhắn lại khi khách phản hồi tiếp (hoặc dùng message tag phù hợp).`})]})]});let n=e.daysSince==null?null:Math.floor(e.daysSince);return(0,q.jsxs)(`div`,{className:`cs-banner`,children:[(0,q.jsx)(`div`,{className:`cs-banner__icon`,children:(0,q.jsx)(v,{size:16})}),(0,q.jsxs)(`div`,{className:`cs-banner__body`,children:[(0,q.jsx)(`div`,{className:`cs-banner__title`,children:`Hết khung 7 ngày hỗ trợ khách hàng`}),(0,q.jsx)(`div`,{className:`cs-banner__desc`,children:n==null?`Khách chưa từng phản hồi. Gửi ZNS template để liên hệ chính thức.`:`Khách phản hồi lần cuối ${n} ngày trước. Gửi ZNS template để tiếp tục liên hệ.`})]}),(0,q.jsxs)(`button`,{className:`cs-banner__cta`,onClick:t,children:[(0,q.jsx)(Qe,{size:14}),` Gửi ZNS`]})]})}var Kf=[{icon:At,label:`AI Gợi ý`},{icon:Ct,label:`Tin nhanh`}],qf=[{value:``,label:`Tất cả`},{value:`greeting`,label:`Chào hỏi`},{value:`followup`,label:`Follow-up`},{value:`promotion`,label:`Khuyến mãi`},{value:`appointment`,label:`Lịch hẹn`},{value:`closing`,label:`Chốt đơn`}],Jf=/\{\{\s*([a-zA-Z0-9_.]+)\s*\}\}/g;function Yf(e){if(!e)return``;let t=e.trim().split(/\s+/);return t[t.length-1]??``}function Xf(e,t,n){let r=new Date;return e.replace(Jf,(e,i)=>{if(i===`date`)return r.toLocaleDateString(`vi-VN`);if(i===`time`)return r.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`});if(i===`datetime`)return`${r.toLocaleDateString(`vi-VN`)} ${r.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`})}`;if(i===`name`)return Yf(t?.fullName)||e;if(i===`company`)return n||e;let[a,o]=i.split(`.`);if(!o)return e;if(a===`contact`&&t)switch(o){case`name`:case`fullName`:return t.fullName||e;case`firstName`:return Yf(t.fullName)||e;case`phone`:return t.phone||e;case`email`:return t.email||e;case`lifecycleStage`:case`status`:return t.lifecycleStage||e}return a===`org`&&o===`name`&&n||e})}function Zf({selectedConv:e,selectedConvId:t,inputText:n,setInputText:r,replyTo:i,setReplyTo:a,sendingMsg:o,handleSend:s,sendAttachment:c,sendSticker:l,emitTypingStart:u,emitTypingStop:d,tplList:f,openAiPicker:p,suggesting:m,showAiPicker:h,setShowAiPicker:g,aiSuggestions:_,aiPickerLoading:v,aiPickerError:y}){let b=(0,K.useRef)(null),x=(0,K.useRef)(null),S=(0,K.useRef)(null),[C,w]=(0,K.useState)(`AI Gợi ý`),[T,E]=(0,K.useState)(!1),[D,O]=(0,K.useState)(``),[k,A]=(0,K.useState)(``),[j,M]=(0,K.useState)(!1),{anhCho:N,dangXuLyAnh:P,boAnhCho:ee,xoaHetAnhCho:te,nhanRaDeGui:ne,vungTha:F,dangKeoVao:re}=Hf(b,t),I=(0,K.useCallback)(async()=>{let e=ne();if(e.length===0){s();return}let t=!1;try{for(let t of e)await c(t.file)}
3catch{t=!0,W(`Gửi ảnh không thành công. Vui lòng thử lại.`,`error`)}finally{zf(e)}t||s()},[c,s,ne]),ie=e=>{e.key===`Enter`&&!e.shiftKey?(e.preventDefault(),I()):e.key===`Escape`&&N.length>0&&(e.preventDefault(),te())},ae=(0,K.useCallback)(async e=>{let t=e.target.files?.[0];if(t){try{await c(t)}catch{W(`Gửi tệp không thành công. Vui lòng thử lại.`,`error`)}e.target.value=``}},[c]),se=e?.channelAccount?.displayName||``,L=(0,K.useCallback)(t=>{let i=Xf(t.content,e?.contact,se);r(n?n+`
4`+i:i),E(!1),O(``),A(``)},[e,se,n,r]),ce=(0,K.useMemo)(()=>f.filter(e=>{if(k&&e.category!==k)return!1;if(D){let t=D.toLowerCase();return e.name.toLowerCase().includes(t)||e.content.toLowerCase().includes(t)}return!0}),[f,k,D]),le=e=>qf.find(t=>t.value===e)?.label??``,{state:ue}=Wf(t),[de,fe]=(0,K.useState)(!1),R=Nn(e.channelAccount?.platform);return(0,q.jsxs)(`div`,{className:`chat-input`,children:[(0,q.jsx)(Rf,{hienThi:re,vungTha:F}),(0,q.jsx)(Gf,{state:ue,onOpenZns:()=>fe(!0)}),e?.contact&&(0,q.jsx)(uu,{open:de,onClose:()=>fe(!1),contact:e.contact,accountId:e.channelAccount?.id,conversationId:t}),(0,q.jsx)(`div`,{className:`chat-input__toolbar`,children:Kf.map((e,t)=>{let n=e.icon;return(0,q.jsxs)(`button`,{className:`chat-input__tool-btn ${e.label===C?`chat-input__tool-btn--active`:``}`,onClick:()=>{w(e.label),e.label===`Tin nhanh`?(g(!1),E(e=>!e)):e.label===`AI Gợi ý`&&p()},children:[(0,q.jsx)(n,{size:14}),` `,e.label]},t)})}),T&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`tpl-picker__backdrop`,onClick:()=>{E(!1),O(``),A(``)}}),(0,q.jsxs)(`div`,{className:`tpl-picker`,children:[(0,q.jsxs)(`div`,{className:`tpl-picker__header`,children:[(0,q.jsx)(`span`,{style:{fontWeight:600,fontSize:13},children:`⚡ Mẫu tin nhắn`}),(0,q.jsx)(`button`,{className:`tpl-picker__close`,onClick:()=>{E(!1),O(``),A(``)},children:(0,q.jsx)(U,{size:14})})]}),(0,q.jsxs)(`div`,{className:`tpl-picker__search`,children:[(0,q.jsx)(_t,{size:14}),(0,q.jsx)(`input`,{placeholder:`Tìm mẫu tin...`,value:D,onChange:e=>O(e.target.value),autoFocus:!0})]}),(0,q.jsx)(`div`,{className:`tpl-picker__categories`,children:qf.map(e=>(0,q.jsx)(`button`,{className:`tpl-picker__cat-btn ${k===e.value?`tpl-picker__cat-btn--active`:``}`,onClick:()=>A(e.value),children:e.label},e.value))}),(0,q.jsxs)(`div`,{className:`tpl-picker__list`,children:[ce.map(t=>(0,q.jsxs)(`div`,{className:`tpl-picker__item`,onClick:()=>L(t),children:[(0,q.jsxs)(`div`,{className:`tpl-picker__item-top`,children:[(0,q.jsx)(`div`,{className:`tpl-picker__item-name`,children:t.name}),t.category&&(0,q.jsx)(`span`,{className:`tpl-picker__item-cat`,children:le(t.category)})]}),(0,q.jsx)(`div`,{className:`tpl-picker__item-preview`,children:Xf(t.content,e?.contact,se)})]},t.id)),ce.length===0&&(0,q.jsx)(`div`,{style:{padding:16,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:f.length===0?`Chưa có mẫu tin nhắn`:`Không tìm thấy mẫu phù hợp`})]})]})]}),h&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`tpl-picker__backdrop`,onClick:()=>g(!1)}),(0,q.jsxs)(`div`,{className:`tpl-picker tpl-picker--ai`,children:[(0,q.jsxs)(`div`,{className:`tpl-picker__header`,children:[(0,q.jsxs)(`span`,{style:{fontWeight:600,fontSize:13,display:`inline-flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(At,{size:14}),` AI gợi ý trả lời`]}),(0,q.jsx)(`button`,{className:`tpl-picker__close`,onClick:()=>g(!1),children:(0,q.jsx)(U,{size:14})})]}),(0,q.jsxs)(`div`,{className:`tpl-picker__list`,children:[v&&(0,q.jsxs)(`div`,{className:`tpl-picker__loading`,children:[(0,q.jsx)(`span`,{className:`tpl-picker__spinner`}),` Đang tạo gợi ý...`]}),!v&&y&&(0,q.jsxs)(`div`,{className:`tpl-picker__error`,children:[(0,q.jsx)(`span`,{children:y}),(0,q.jsx)(`button`,{onClick:p,children:`Thử lại`})]}),!v&&!y&&_.map(e=>(0,q.jsxs)(`div`,{className:`tpl-picker__item`,onClick:()=>{r(n?n+`
5`+e.text:e.text),g(!1)},children:[(0,q.jsx)(`div`,{className:`tpl-picker__item-name`,children:(0,q.jsx)(`span`,{className:`tpl-picker__tone tpl-picker__tone--${e.tone}`,children:Fd[e.tone]})}),(0,q.jsx)(`div`,{className:`tpl-picker__item-preview`,children:e.text})]},e.suggestionId))]})]})]}),(0,q.jsxs)(`div`,{className:`chat-input__area`,children:[i&&(0,q.
5jsxs)(`div`,{className:`chat-input__reply-banner`,children:[(0,q.jsx)(We,{size:14,color:`#3b82f6`}),(0,q.jsxs)(`div`,{className:`chat-input__reply-info`,children:[(0,q.jsx)(`span`,{className:`chat-input__reply-name`,children:i.senderType===`self`?`Bạn`:i.senderName||e?.displayName||e?.contact?.fullName||`Khách`}),(0,q.jsx)(`span`,{className:`chat-input__reply-text`,children:i.content?.slice(0,80)})]}),(0,q.jsx)(`button`,{className:`chat-input__reply-close`,onClick:()=>a(null),children:(0,q.jsx)(U,{size:14})})]}),(0,q.jsx)(Lf,{anhCho:N,dangXuLy:P,onBo:ee}),(0,q.jsx)(`textarea`,{ref:b,className:`chat-input__textarea`,placeholder:N.length>0?`Nhắn kèm (gửi thành tin riêng sau ảnh)...`:`Nhập tin nhắn... (Ctrl+V hoặc kéo thả ảnh, Shift+Enter = xuống dòng)`,rows:1,value:n,onChange:e=>{r(e.target.value),t&&(u(t),S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{t&&d(t)},2e3))},onKeyDown:ie,disabled:o})]}),(0,q.jsxs)(`div`,{className:`chat-input__footer`,children:[(0,q.jsxs)(`div`,{className:`chat-input__sender`,children:[(0,q.jsx)(`div`,{className:`chat-input__sender-avatar`,children:`SH`}),e.channelAccount?.displayName||`Staff`,` ▾`]}),(0,q.jsxs)(`div`,{className:`chat-input__send-row`,children:[(0,q.jsx)(`input`,{ref:x,type:`file`,accept:`image/*,.pdf,.doc,.docx,.xls,.xlsx,.zip,.rar,.txt`,style:{display:`none`},onChange:ae}),(0,q.jsxs)(`button`,{className:`chat-input__attach-btn`,onClick:()=>x.current?.click(),title:`Đính kèm ảnh/file`,disabled:o,style:{background:`none`,border:`none`,cursor:`pointer`,padding:`4px 8px`,color:`var(--gray-500)`,display:`flex`,alignItems:`center`,gap:4,fontSize:12},children:[(0,q.jsx)(oe,{size:14}),` File`]}),R&&(0,q.jsxs)(`button`,{className:`chat-input__sticker-btn`,onClick:()=>M(e=>!e),title:`Gửi sticker`,disabled:o,style:{background:j?`var(--primary-50)`:`none`,border:j?`1px solid var(--primary-200)`:`none`,cursor:`pointer`,padding:`4px 8px`,color:j?`var(--primary-500)`:`var(--gray-500)`,display:`flex`,alignItems:`center`,gap:4,fontSize:12,borderRadius:6},children:[(0,q.jsx)(Me,{size:14}),` Sticker`]}),R&&j&&(0,q.jsx)(Df,{onSelect:(e,t,n)=>l(e,t),onClose:()=>M(!1)}),(0,q.jsx)(`span`,{className:`chat-input__shortcut`,children:`⏎ Enter = Gửi`}),(0,q.jsxs)(`button`,{className:`chat-input__send-btn`,onClick:()=>void I(),disabled:o||P,children:[(0,q.jsx)(Qe,{size:14}),` Gửi`,N.length>0?` (${N.length})`:``]})]})]})]})}var Qf=[{value:`manual`,label:`Thủ công`,icon:ke,hint:`Bạn tự trả lời, AI không can thiệp`},{value:`suggest`,label:`Gợi ý`,icon:Ee,hint:`AI soạn nháp, bạn duyệt rồi gửi`},{value:`auto`,label:`Tự động`,icon:It,hint:`AI tự trả lời; bạn vừa nhắn thì AI chờ 3 phút`}],$f=60;function ep({convId:e,convMode:t,defaultMode:n=`manual`,masterEnabled:r=!1,aiPausedUntil:i,onSetMode:a,onSetPause:o}){let[s,c]=(0,K.useState)(!1),[l,u]=(0,K.useState)(!1),[d,f]=(0,K.useState)(!1),p=(0,K.useRef)(null),m=t??n??`manual`,h=!!(i&&new Date(i)>new Date),g=Qf.find(e=>e.value===m)??Qf[0],_=g.icon;(0,K.useEffect)(()=>{if(!d)return;let e=e=>{p.current&&!p.current.contains(e.target)&&f(!1)},t=e=>{e.key===`Escape`&&f(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[d]);let v=(0,K.useCallback)(async t=>{if(f(!1),!(t===m||s)){c(!0);try{await a(e,t)}catch{}finally{c(!1)}}},[e,m,s,a]),y=(0,K.useCallback)(async()=>{if(f(!1),!l){u(!0);try{await o(e,h?0:$f)}catch{}finally{u(!1)}}},[e,h,l,o]),b=r&&m!==`manual`;return(0,q.jsxs)(`div`,{className:`ai-mode-dd`,ref:p,children:[(0,q.jsxs)(`button`,{type:`button`,className:`ai-mode-dd__trigger ai-mode-dd__trigger--${h?`paused`:m}`,onClick:()=>f(e=>!e),disabled:!r||s,title:r?`Đổi chế độ AI trả lời`:`AI đang tắt ở cấp tổ chức`,"aria-haspopup":`menu`,"aria-expanded":d,children:[(0,q.jsx)(_,{size:14}),(0,q.jsx)(`span`,{className:`ai-mode-dd__label`,children:h?`Tạm dừng`:g.label}),(0,q.jsx)(H,{size:12,className:`ai-mode-dd__chevron`})]}),d&&(0,q.jsxs)(`div`,{className:`ai-mode-dd__menu`,role:`menu`,children:[Qf.map(e=>{let t=e.icon,n=e.value===m;return(0,q.jsxs)(`button`,{type:`button`,role:`menuitemradio`,"aria-checked":n,className:`ai-mode-dd__item ai-mode-dd__item--${e.value} ${n?`ai-mode-dd__item--active`:``}`,onClick:()=>v(e.value),children:[(0,q.jsx)(t,{size:15,className:`ai-mode-dd__item-icon`}),(0,q.jsxs)(`span`,{className:`ai-mode-dd__item-text`,children:[(0,q.jsx)(`span`,{className:`ai-mode-dd__item-label`,children:e.label}),(0,q.jsx)(`span`,{className:`ai-mode-dd__item-hint`,children:e.hint})]}
5),n&&(0,q.jsx)(te,{size:14,className:`ai-mode-dd__item-check`})]},e.value)}),b&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`ai-mode-dd__divider`}),(0,q.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`ai-mode-dd__item ai-mode-dd__pause`,disabled:l,onClick:y,children:[h?(0,q.jsx)(pt,{size:15,className:`ai-mode-dd__item-icon`}):(0,q.jsx)(de,{size:15,className:`ai-mode-dd__item-icon`}),(0,q.jsxs)(`span`,{className:`ai-mode-dd__item-text`,children:[(0,q.jsx)(`span`,{className:`ai-mode-dd__item-label`,children:h?`Tiếp tục AI`:`Tạm dừng AI`}),(0,q.jsx)(`span`,{className:`ai-mode-dd__item-hint`,children:h?`Đang tạm dừng`:`${$f} phút`})]})]})]})]})]})}function tp(e){let t=Math.round(e*100);return e>=.8?{text:`${t}%`,level:`high`}:e>=.5?{text:`${t}%`,level:`mid`}:{text:`${t}%`,level:`low`}}function np({draft:e,confidence:t,onSend:n,onEdit:r,onDismiss:i}){let[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(e),l=typeof t==`number`?tp(t):null;return(0,q.jsxs)(`div`,{className:`ai-draft`,children:[(0,q.jsxs)(`div`,{className:`ai-draft__head`,children:[(0,q.jsxs)(`span`,{className:`ai-draft__label`,children:[(0,q.jsx)(At,{size:13}),` AI gợi ý trả lời`]}),l&&(0,q.jsxs)(`span`,{className:`ai-draft__conf ai-draft__conf--${l.level}`,children:[`Độ tin cậy `,l.text]}),(0,q.jsx)(`button`,{className:`ai-draft__close`,onClick:i,title:`Bỏ gợi ý`,type:`button`,children:(0,q.jsx)(U,{size:14})})]}),a?(0,q.jsx)(`textarea`,{className:`ai-draft__editor`,value:s,rows:3,autoFocus:!0,onChange:e=>c(e.target.value)}):(0,q.jsx)(`div`,{className:`ai-draft__body`,children:e}),(0,q.jsx)(`div`,{className:`ai-draft__actions`,children:a?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{className:`ai-draft__btn ai-draft__btn--ghost`,onClick:()=>{c(e),o(!1)},type:`button`,children:`Hủy`}),(0,q.jsxs)(`button`,{className:`ai-draft__btn ai-draft__btn--primary`,onClick:()=>{r(s),o(!1)},type:`button`,children:[(0,q.jsx)(te,{size:14}),` Áp dụng`]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`button`,{className:`ai-draft__btn ai-draft__btn--ghost`,onClick:i,type:`button`,children:[(0,q.jsx)(U,{size:14}),` Bỏ`]}),(0,q.jsxs)(`button`,{className:`ai-draft__btn ai-draft__btn--ghost`,onClick:()=>{c(e),o(!0)},type:`button`,children:[(0,q.jsx)(S,{size:14}),` Sửa`]}),(0,q.jsxs)(`button`,{className:`ai-draft__btn ai-draft__btn--primary`,onClick:n,type:`button`,children:[(0,q.jsx)(Qe,{size:14}),` Gửi`]})]})})]})}function rp(){let[e,t]=(0,K.useState)([]),[n,r]=(0,K.useState)(!1),[i,a]=(0,K.useState)(!1);return{notes:e,loading:n,saving:i,fetchNotes:(0,K.useCallback)(async e=>{r(!0);try{let n=await G.get(`/notes`,{params:e});t(n.data.notes??n.data??[])}catch(e){console.error(`Failed to fetch notes:`,e),t([])}finally{r(!1)}},[]),createNote:(0,K.useCallback)(async e=>{a(!0);try{return(await G.post(`/notes`,e)).data}catch(e){return console.error(`Failed to create note:`,e),null}finally{a(!1)}},[]),updateNote:(0,K.useCallback)(async(e,n)=>{a(!0);try{let r=await G.put(`/notes/${e}`,n);return t(t=>t.map(t=>t.id===e?r.data:t)),!0}catch(e){return console.error(`Failed to update note:`,e),!1}finally{a(!1)}},[]),deleteNote:(0,K.useCallback)(async e=>{try{return await G.delete(`/notes/${e}`),t(t=>t.filter(t=>t.id!==e)),!0}catch(e){return console.error(`Failed to delete note:`,e),!1}},[]),togglePin:(0,K.useCallback)(async e=>{try{let n=await G.patch(`/notes/${e}/pin`);return t(t=>t.map(t=>t.id===e?n.data:t)),!0}catch(e){return console.error(`Failed to toggle pin:`,e),!1}},[])}}function ip({contactId:e}){let{notes:t,loading:n,saving:r,fetchNotes:i,createNote:a,updateNote:o,deleteNote:s,togglePin:c}=rp(),[l,u]=(0,K.useState)(!1),[d,f]=(0,K.useState)(``),[p,m]=(0,K.useState)(null),[h,g]=(0,K.useState)(``);(0,K.useState)(()=>{e&&i({contactId:e})});let _=(0,K.useCallback)(async()=>{d.trim()&&await a({contactId:e,content:d})&&(f(``),u(!1),e&&i({contactId:e}))},[d,e,a,i]),v=(0,K.useCallback)(async e=>{h.trim()&&await o(e,{content:h})&&(m(null),g(``))},[h,o]),y=(0,K.useCallback)(async e=>{confirm(`Xoá ghi chú này?`)&&await s(e)},[s]),b=e=>{let t=new Date(e),n=Math.floor((Date.now()-t.getTime())/6e4);if(n<1)return`vừa xong`;if(n<60)return`${n} phút trước`;let r=Math.floor(n/60);if(r<24)return`${r} giờ trước`;let i=Math.floor(r/24);return i<7?`${i} ngày trước`:t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,year:`numeric`})};return(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[`GHI CHÚ (`,t.length,`)`]}),(0,q.jsxs)(`span`,{className:`chat-detail__section-action`,onClick:()=>{u(!l),m(null)},style:{cursor:`pointer`},children:[(0,q.jsx)(B,{size:12}),` Thêm`]})]}),l&&(0,q.jsxs)(`div`,{className:`chat-note-form`,children:[(0,q.jsx)(`textarea`,{className:`chat-note-form__textarea`,placeholder:`Viết ghi chú...`,rows:3,value:d,onChange:e=>f(e.target.value),autoFocus:!0}),(0,q.jsxs)(`div`,{className:`chat-note-form__actions`,children:[(0,q.jsx)(`button`,{className:`chat-appt-form__btn chat-appt-form__btn--primary`,onClick:_,disabled:!d.trim()||r,children:r?`...`:`Lưu`}),(0,q.jsx)(`button`,{className:`chat-appt-form__btn`,onClick:()=>{u(!1),f(``)},children:`Huỷ`})]})]}
5),n&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-400)`,padding:`8px 0`},children:`Đang tải...`}),!n&&t.length===0&&!l&&(0,q.jsxs)(`div`,{style:{textAlign:`center`,padding:24,color:`var(--gray-400)`,fontSize:13},children:[(0,q.jsx)(zt,{size:32,color:`#cbd5e1`}),(0,q.jsx)(`p`,{style:{marginTop:8},children:`Chưa có ghi chú nào`}),(0,q.jsxs)(`button`,{className:`chat-detail__quick-btn`,style:{margin:`12px auto`},onClick:()=>u(!0),children:[(0,q.jsx)(B,{size:12}),` Thêm ghi chú`]})]}),t.map(e=>(0,q.jsx)(`div`,{className:`chat-note-item${e.isPinned?` chat-note-item--pinned`:``}`,children:p===e.id?(0,q.jsxs)(`div`,{className:`chat-note-form`,style:{margin:0},children:[(0,q.jsx)(`textarea`,{className:`chat-note-form__textarea`,rows:3,value:h,onChange:e=>g(e.target.value),autoFocus:!0}),(0,q.jsxs)(`div`,{className:`chat-note-form__actions`,children:[(0,q.jsx)(`button`,{className:`chat-appt-form__btn chat-appt-form__btn--primary`,onClick:()=>v(e.id),disabled:!h.trim()||r,children:r?`...`:`Cập nhật`}),(0,q.jsx)(`button`,{className:`chat-appt-form__btn`,onClick:()=>{m(null),g(``)},children:`Huỷ`})]})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`chat-note-item__content`,children:e.content}),(0,q.jsxs)(`div`,{className:`chat-note-item__meta`,children:[(0,q.jsx)(`span`,{className:`chat-note-item__author`,children:e.createdBy?.fullName||`System`}),(0,q.jsx)(`span`,{className:`chat-note-item__time`,children:b(e.createdAt)}),e.isPinned&&(0,q.jsx)(fe,{size:10,style:{color:`var(--primary)`,transform:`rotate(45deg)`}})]}),(0,q.jsxs)(`div`,{className:`chat-note-item__actions`,children:[(0,q.jsx)(`button`,{className:`chat-appt-item__btn`,title:`Ghim`,onClick:()=>c(e.id),children:(0,q.jsx)(fe,{size:11,style:{transform:`rotate(45deg)`,color:e.isPinned?`var(--primary)`:void 0}})}),(0,q.jsx)(`button`,{className:`chat-appt-item__btn`,title:`Sửa`,onClick:()=>{m(e.id),g(e.content),u(!1)},children:(0,q.jsx)(je,{size:11})}),(0,q.jsx)(`button`,{className:`chat-appt-item__btn chat-appt-item__btn--cancel`,title:`Xoá`,onClick:()=>y(e.id),children:(0,q.jsx)(R,{size:11})})]})]})},e.id))]})}function ap(e){if(!e)return``;let t=new Date(e),n=Math.floor((new Date().getTime()-t.getTime())/1e3);if(n<60)return`Vừa xong`;if(n<3600)return`${Math.floor(n/60)} phút trước`;if(n<86400)return`${Math.floor(n/3600)} giờ trước`;let r=Math.floor(n/86400);return r===1?`Hôm qua`:r<7?`${r} ngày trước`:t.toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`,year:`numeric`})}function op({convId:e,messages:t}){let[n,r]=(0,K.useState)({image:0,file:0,link:0}),[i,a]=(0,K.useState)([]),[o,s]=(0,K.useState)(!1),[c,l]=(0,K.useState)(!1),[u,d]=(0,K.useState)(!1),[f,p]=(0,K.useState)(null);(0,K.useEffect)(()=>{e&&G.get(`/conversations/${e}/shared-media`).then(e=>{r(e.data.counts??{image:0,file:0,link:0}),a(e.data.messages??[])}).catch(()=>{r({image:0,file:0,link:0}),a([])})},[e]);let m=(0,K.useMemo)(()=>{let e=[];return i.filter(e=>e.contentType===`image`||e.contentType===`video`).forEach(t=>{let n=Wd(t.content);n&&e.push({url:n,sentAt:t.sentAt,senderName:t.senderName})}),t.forEach(t=>{if(t.contentType===`text`){let n=Wd(t.content);n&&!e.some(e=>e.url===n)&&e.push({url:n,sentAt:t.sentAt,senderName:t.senderName??``})}}),e},[i,t]),h=(0,K.useMemo)(()=>i.filter(e=>e.contentType===`file`).map(e=>{let t=Xd(e.content),n=e.content&&Md(e.content)?e.content:``;return{id:e.id,name:t?.name||e.content?.split(`/`).pop()||`File`,size:t?.size||``,href:t?.href||n,sentAt:e.sentAt,senderName:e.senderName}}),[i]),g=(0,K.useMemo)(()=>{let e=[],n=new Set;i.filter(e=>e.contentType===`link`).forEach(t=>{let r=Q(t.content),i=r?.href||(t.content?.startsWith(`http`)?t.content:``),a=Md(i)?i:``,o=r?.title||r?.description||i||`Liên kết`,s=r?.thumb||null;i&&n.add(i),e.push({id:t.id,title:o,href:a,thumb:s,sentAt:t.sentAt,senderName:t.senderName})});let r=/https?:\/\/[^\s<>"']+/gi,a=[...i.filter(e=>e.contentType===`text`),...t.filter(e=>e.contentType===`text`)];for(let t of a){let i=(t.content||``).match(r);if(i)for(let r of i){if(/\.(jpg|jpeg|png|gif|webp|bmp|svg)(\?|$)/i.test(r)||n.has(r))continue;n.add(r);let i=r;try{i=new URL(r).hostname.replace(`www.`,``)}catch{}e.push({id:`text-link-${t.id}-${r.slice(-8)}`,title:i,href:r,thumb:null,sentAt:t.sentAt,senderName:t.senderName??``})}}return e},[i,t]);if(!(m.length>0||h.length>0||g.length>0||n.image>0||n.file>0||n.link>0))return(0,q.jsx)(`div`,{className:`chat-detail__section`,children:(0,q.jsxs)(`div`,{style:{textAlign:`center`,padding:24,color:`var(--gray-400)`,fontSize:13},children:[(0,q.jsx)(zt,{size:32,color:`#cbd5e1`}),(0,q.jsx)(`p`,{style:{marginTop:8},children:`Chưa có file nào được chia sẻ`})]})});let _=o?m:m.slice(0,6),v=c?h:h.slice(0,6),y=u?g:g.slice(0,6);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsx)(`div`,{className:`chat-detail__section-header`,children:(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(k,{size:14}),` ẢNH / VIDEO `,n.image>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,n.image,`)`]})]})}),m.length>0?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{display:`grid`,gridTemplateColumns:`repeat(3, 1fr)`,gap:4,marginTop:8},children:_.map((e,t)=>(0,q.jsxs)(`div`,{style:{aspectRatio:`1`,borderRadius:6,overflow:`hidden`,background:`var(--gray-100)`,cursor:`pointer`,position:`relative`},onClick:()=>p(e.url),children:[(0,q.jsx)(`img`,{src:e.url,alt:``,style:{width:`100%`,height:`100%`,objectFit:`cover`},onError:e=>{e.target.style.display=`none`}}),e.sentAt&&(0,q.jsx)(`div`,{style:{position:`absolute`,bottom:0,left:0,right:0,background:`linear-gradient(transparent, rgba(0,0,0,0.6))`,padding:`12px 6px 4px`,fontSize:10,
5color:`rgba(255,255,255,0.9)`,lineHeight:1},children:ap(e.sentAt)})]},t))}),m.length>6&&(0,q.jsx)(`button`,{onClick:()=>s(!o),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:o?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(q.Fragment,{children:[`Xem tất cả (`,m.length,`) `,(0,q.jsx)(H,{size:14})]})})]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có ảnh/video được chia sẻ`})]}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsx)(`div`,{className:`chat-detail__section-header`,children:(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(zt,{size:14}),` TÀI LIỆU `,n.file>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,n.file,`)`]})]})}),h.length>0?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:6,marginTop:8},children:v.map(e=>(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 10px`,background:`var(--gray-50)`,borderRadius:6,fontSize:12},children:[(0,q.jsx)(zt,{size:16,color:`var(--gray-500)`,style:{flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,color:`var(--gray-700)`,fontWeight:500},children:e.name}),(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,marginTop:1,display:`flex`,alignItems:`center`,gap:4},children:[e.size&&(0,q.jsx)(`span`,{children:e.size}),e.size&&e.sentAt&&(0,q.jsx)(`span`,{children:`·`}),e.sentAt&&(0,q.jsx)(`span`,{children:ap(e.sentAt)})]})]}),e.href&&(0,q.jsx)(`button`,{onClick:()=>Pd(e.href),style:{background:`none`,border:`none`,cursor:`pointer`,color:`#3b82f6`,padding:4,display:`flex`,flexShrink:0},title:`Tải xuống`,children:(0,q.jsx)(Ut,{size:14})})]},e.id))}),h.length>6&&(0,q.jsx)(`button`,{onClick:()=>l(!c),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4},children:c?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(q.Fragment,{children:[`Xem tất cả (`,h.length,`) `,(0,q.jsx)(H,{size:14})]})})]}):n.file>0?(0,q.jsxs)(`div`,{style:{padding:`8px 0`,fontSize:12,color:`var(--gray-500)`},children:[n.file,` tài liệu đã chia sẻ`]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có tài liệu được chia sẻ`})]}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsx)(`div`,{className:`chat-detail__section-header`,children:(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(C,{size:14}),` LIÊN KẾT `,n.link>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`},children:[`(`,n.link,`)`]})]})}),g.length>0?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:6,marginTop:8},children:y.map(e=>{let t=(0,q.jsxs)(q.Fragment,{children:[e.thumb?(0,q.jsx)(`img`,{src:e.thumb,alt:``,style:{width:32,height:32,borderRadius:4,objectFit:`cover`,flexShrink:0},onError:e=>{e.target.style.display=`none`}}):(0,q.jsx)(C,{size:16,style:{flexShrink:0}}),(0,q.jsxs)(`div`,{style:{flex:1,minWidth:0},children:[(0,q.jsx)(`div`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,fontWeight:500},children:e.title}),(0,q.jsxs)(`div`,{style:{fontSize:11,color:`var(--gray-400)`,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,marginTop:1,display:`flex`,alignItems:`center`,gap:4},children:[e.href&&e.title!==e.href&&(0,q.jsx)(`span`,{style:{overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:e.href}),e.href&&e.title!==e.href&&e.sentAt&&(0,q.jsx)(`span`,{style:{flexShrink:0},children:`·`}),e.sentAt&&(0,q.jsx)(`span`,{style:{flexShrink:0},children:ap(e.sentAt)})]})]}),e.href&&(0,q.jsx)(Rt,{size:12,style:{flexShrink:0,opacity:.5}})]});return e.href?(0,q.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 10px`,background:`var(--gray-50)`,borderRadius:6,fontSize:12,color:`#3b82f6`,textDecoration:`none`},children:t},e.id):(0,q.jsx)(`div`,{title:`Liên kết bị chặn — định dạng không an toàn`,style:{display:`flex`,alignItems:`center`,gap:8,padding:`8px 10px`,background:`var(--gray-50)`,borderRadius:6,fontSize:12,color:`var(--gray-500)`},children:t},e.id)})}),g.length>6&&(0,q.jsx)(`button`,{onClick:()=>d(!u),style:{width:`100%`,padding:`8px 0`,marginTop:8,background:`var(--gray-50)`,border:`1px solid var(--gray-150)`,borderRadius:6,cursor:`pointer`,fontSize:12,color:`var(--gray-500)`,fontWeight:500,display:`flex`,alignItems:`center`,justifyContent:`center`,gap:4}
5,children:u?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(xe,{size:14}),` Thu gọn`]}):(0,q.jsxs)(q.Fragment,{children:[`Xem tất cả (`,g.length,`) `,(0,q.jsx)(H,{size:14})]})})]}):n.link>0?(0,q.jsxs)(`div`,{style:{padding:`8px 0`,fontSize:12,color:`var(--gray-500)`},children:[n.link,` liên kết đã chia sẻ`]}):(0,q.jsx)(`div`,{style:{padding:`12px 0`,textAlign:`center`,color:`var(--gray-400)`,fontSize:12,fontStyle:`italic`},children:`Chưa có liên kết được chia sẻ`})]}),f&&(0,q.jsx)(kd,{src:f,type:`image`,onClose:()=>p(null)})]})}var sp={scheduled:{bg:`#e8f0fe`,color:`#2563eb`},completed:{bg:`#dcfce7`,color:`#16a34a`},cancelled:{bg:`#f1f5f9`,color:`#64748b`},no_show:{bg:`#fee2e2`,color:`#ef4444`}};function cp({contactId:e}){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(!1),[s,c]=(0,K.useState)(``),[l,u]=(0,K.useState)(`09:00`),[d,f]=(0,K.useState)(`consultation`),[p,m]=(0,K.useState)(``),[h,g]=(0,K.useState)(!1),_=(0,K.useCallback)(async()=>{if(!e){n([]);return}i(!0);try{let t=await G.get(`/appointments`,{params:{contactId:e}});n(t.data.appointments??t.data??[])}catch{n([])}finally{i(!1)}},[e]);(0,K.useEffect)(()=>{_(),o(!1)},[_]);let v=(0,K.useCallback)(async()=>{if(s){g(!0);try{await G.post(`/appointments`,{contactId:e||void 0,appointmentDate:s,appointmentTime:l,type:d,notes:p||void 0,status:`scheduled`}),o(!1),c(``),u(`09:00`),f(`consultation`),m(``),_()}catch(e){console.error(`Failed to create appointment:`,e)}finally{g(!1)}}},[s,l,d,p,e,_]),y=(0,K.useCallback)(async e=>{try{await G.put(`/appointments/${e}`,{status:`completed`}),_()}catch{}},[_]),b=(0,K.useCallback)(async e=>{try{await G.put(`/appointments/${e}`,{status:`cancelled`}),_()}catch{}},[_]),x=e=>{try{return new Date(e).toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`})}catch{return e}};return(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(Be,{size:14}),` LỊCH HẸN (`,t.length,`)`]}),(0,q.jsxs)(`span`,{className:`chat-detail__section-action`,onClick:()=>o(!a),style:{cursor:`pointer`},children:[(0,q.jsx)(B,{size:12}),` Thêm`]})]}),a&&(0,q.jsxs)(`div`,{className:`chat-appt-form`,children:[(0,q.jsxs)(`div`,{className:`chat-appt-form__row`,children:[(0,q.jsx)(`input`,{type:`date`,className:`chat-appt-form__input`,value:s,onChange:e=>c(e.target.value)}),(0,q.jsx)(`input`,{type:`time`,className:`chat-appt-form__input chat-appt-form__input--time`,value:l,onChange:e=>u(e.target.value)})]}),(0,q.jsx)(`div`,{className:`chat-appt-form__row`,children:(0,q.jsx)(`select`,{className:`chat-appt-form__input`,value:d,onChange:e=>f(e.target.value),children:bl.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.text},e.value))})}),(0,q.jsx)(`input`,{type:`text`,className:`chat-appt-form__input`,placeholder:`Ghi chú ngắn...`,value:p,onChange:e=>m(e.target.value)}),(0,q.jsxs)(`div`,{className:`chat-appt-form__actions`,children:[(0,q.jsx)(`button`,{className:`chat-appt-form__btn chat-appt-form__btn--primary`,onClick:v,disabled:!s||h,children:h?`...`:`Tạo`}),(0,q.jsx)(`button`,{className:`chat-appt-form__btn`,onClick:()=>o(!1),children:`Huỷ`})]})]}),r&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-400)`,padding:`8px 0`},children:`Đang tải...`}),!r&&t.length===0&&!a&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-400)`,marginBottom:8},children:`Chưa có lịch hẹn nào.`}),(0,q.jsxs)(`button`,{className:`chat-detail__quick-btn`,style:{width:`100%`,justifyContent:`center`},onClick:()=>o(!0),children:[(0,q.jsx)(B,{size:12}),` Tạo lịch hẹn`]})]}),t.map(e=>{let t=sp[e.status]||sp.scheduled;return(0,q.jsxs)(`div`,{className:`chat-appt-item`,children:[(0,q.jsxs)(`div`,{className:`chat-appt-item__left`,children:[(0,q.jsx)(Be,{size:12,color:`#64748b`}),(0,q.jsx)(`span`,{className:`chat-appt-item__date`,children:x(e.appointmentDate)}),(0,q.jsx)(`span`,{className:`chat-appt-item__time`,children:e.appointmentTime})]}),(0,q.jsxs)(`div`,{className:`chat-appt-item__middle`,children:[(0,q.jsx)(`span`,{className:`chat-appt-item__type`,children:bl.find(t=>t.value===e.type)?.text||e.type}),(0,q.jsx)(`span`,{style:{display:`inline-flex`,padding:`1px 6px`,borderRadius:10,fontSize:10,fontWeight:600,background:t.bg,color:t.color},children:xl(e.status)})]}),e.status===`scheduled`&&(0,q.jsxs)(`div`,{className:`chat-appt-item__actions`,children:[(0,q.jsx)(`button`,{className:`chat-appt-item__btn chat-appt-item__btn--done`,title:`Hoàn thành`,onClick:()=>y(e.id),children:(0,q.jsx)(_e,{size:12})}),(0,q.jsx)(`button`,{className:`chat-appt-item__btn chat-appt-item__btn--cancel`,title:`Huỷ`,onClick:()=>b(e.id),children:(0,q.jsx)(D,{size:12})})]})]},e.id)})]})}function lp({contactId:e}){let[t,n]=(0,K.useState)([]),[r,i]=(0,K.useState)(!1),[a,o]=(0,K.useState)(null),[s,c]=(0,K.useState)(``),[l,u]=(0,K.useState)(!1),[d,f]=(0,K.useState)(!1),p=(0,K.useCallback)(()=>{e&&(i(!0),G.get(`/contacts/${e}/properties`).then(e=>n(e.data.properties??[])).catch(()=>n([])).finally(()=>i(!1)))},[e]);(0,K.useEffect)(()=>{p()},[p]);let m=(0,K.useCallback)(async(t,r)=>{if(e){u(!0);try{await G.put(`/contacts/${e}/properties`,{values:[{propertyId:t,value:r}]}),n(e=>e.map(e=>e.id===t?{...e,value:r}:e))}catch{}u(!1),o(null)}},[e]),h=e=>{o(e.id),c(e.value)},g=()=>{o(null),c(``)};if(!e||t.length===0&&!r)return null;let _=new Map;
5return t.forEach(e=>{let t=e.groupName||``;_.has(t)||_.set(t,[]),_.get(t).push(e)}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,style:{cursor:`pointer`},onClick:()=>f(!d),children:[(0,q.jsxs)(`span`,{className:`chat-detail__section-title`,children:[(0,q.jsx)(he,{size:14}),` THÔNG TIN TÙY CHỈNH`,t.length>0&&(0,q.jsxs)(`span`,{style:{fontWeight:400,color:`var(--gray-400)`,marginLeft:4},children:[`(`,t.length,`)`]})]}),d?(0,q.jsx)(H,{size:14,color:`var(--gray-400)`}):(0,q.jsx)(xe,{size:14,color:`var(--gray-400)`})]}),!d&&(0,q.jsxs)(`div`,{style:{marginTop:6,display:`flex`,flexDirection:`column`,gap:8},children:[r&&(0,q.jsx)(`div`,{style:{fontSize:12,color:`var(--gray-400)`,padding:`8px 0`},children:`Đang tải...`}),[..._.entries()].map(([e,t])=>(0,q.jsxs)(`div`,{style:{marginBottom:12},children:[e&&(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:6,fontSize:11,fontWeight:600,color:`var(--gray-500)`,textTransform:`uppercase`,padding:`4px 0 6px`,letterSpacing:`0.3px`,borderBottom:`1px solid var(--gray-100)`,marginBottom:4},children:[(0,q.jsx)(he,{size:12,style:{opacity:.7}}),e]}),(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`},children:t.map(e=>(0,q.jsxs)(`div`,{className:`chat-detail__info-row`,style:{minHeight:32},children:[(0,q.jsx)(`span`,{className:`chat-detail__label`,style:{fontSize:12,minWidth:80,color:`var(--gray-600)`},title:e.description||``,children:e.name}),a===e.id?(0,q.jsxs)(`div`,{style:{marginLeft:`auto`,display:`flex`,alignItems:`center`,gap:4,flex:1,justifyContent:`flex-end`},children:[dp(e,s,c,()=>m(e.id,s)),(0,q.jsx)(`button`,{onClick:()=>m(e.id,s),disabled:l,style:{...fp,color:`#16a34a`},title:`Lưu`,children:(0,q.jsx)(te,{size:13})}),(0,q.jsx)(`button`,{onClick:g,style:{...fp,color:`#ef4444`},title:`Hủy`,children:(0,q.jsx)(U,{size:13})})]}):(0,q.jsx)(`span`,{onClick:()=>h(e),style:{marginLeft:`auto`,cursor:`pointer`,fontSize:12,color:e.value?`var(--gray-700)`:`var(--gray-400)`,maxWidth:160,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`,padding:`2px 6px`,borderRadius:4,transition:`background 0.15s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,title:e.value||`Nhấn để nhập`,children:up(e)})]},e.id))})]},e||`_default`))]})]})}function up(e){if(!e.value)return`Chưa có`;if(e.fieldType===`boolean`)return e.value===`true`?`✅ Có`:`❌ Không`;if(e.fieldType===`date`)try{return new Date(e.value).toLocaleDateString(`vi-VN`)}catch{return e.value}if(e.fieldType===`single_select`)return e.options?.find(t=>t.value===e.value)?.label||e.value;if(e.fieldType===`multi_select`)try{return JSON.parse(e.value).map(t=>e.options?.find(e=>e.value===t)?.label||t).join(`, `)}catch{return e.value}return e.value}function dp(e,t,n,r){let i={width:`100%`,maxWidth:140,fontSize:12,padding:`3px 6px`,border:`1px solid var(--primary)`,borderRadius:4,outline:`none`,background:`var(--gray-50)`},a=t=>{t.key===`Enter`&&r(),t.key===`Escape`&&n(e.value)};if(e.fieldType===`boolean`)return(0,q.jsxs)(`select`,{value:t,onChange:e=>n(e.target.value),style:i,children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn —`}),(0,q.jsx)(`option`,{value:`true`,children:`Có`}),(0,q.jsx)(`option`,{value:`false`,children:`Không`})]});if(e.fieldType===`single_select`)return(0,q.jsxs)(`select`,{value:t,onChange:e=>n(e.target.value),style:i,children:[(0,q.jsx)(`option`,{value:``,children:`— Chọn —`}),e.options?.map(e=>(0,q.jsx)(`option`,{value:e.value,children:e.label},e.value))]});if(e.fieldType===`multi_select`){let r=[];try{r=JSON.parse(t||`[]`)}catch{r=[]}return(0,q.jsx)(`div`,{style:{display:`flex`,flexDirection:`column`,gap:2,maxWidth:140},children:e.options?.map(e=>{let t=r.includes(e.value);return(0,q.jsxs)(`label`,{style:{display:`flex`,alignItems:`center`,gap:4,fontSize:11,cursor:`pointer`},children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:t,onChange:()=>{let i=t?r.filter(t=>t!==e.value):[...r,e.value];n(JSON.stringify(i))},style:{width:13,height:13,accentColor:`var(--primary)`}}),e.label]},e.value)})})}return e.fieldType===`date`?(0,q.jsx)(`input`,{type:`date`,value:t?t.slice(0,10):``,onChange:e=>n(e.target.value),onKeyDown:a,style:i,autoFocus:!0}):e.fieldType===`number`?(0,q.jsx)(`input`,{type:`number`,value:t,onChange:e=>n(e.target.value),onKeyDown:a,style:i,autoFocus:!0}):(0,q.jsx)(`input`,{type:`text`,value:t,onChange:e=>n(e.target.value),onKeyDown:a,style:i,autoFocus:!0,placeholder:`Nhập giá trị...`})}var fp={background:`none`,border:`none`,cursor:`pointer`,padding:2,display:`flex`,borderRadius:4};function pp(e){let t=e.messages;
5if(!t||t.length===0)return`Chưa có tin nhắn`;let n=t[0];if(n.isDeleted)return`Đã thu hồi`;if(n.contentType===`group_event`)return`Sự kiện nhóm`;if(n.contentType===`system_event`||n.senderType===`system`&&n.contentType!==`call_log`)return n.content||`Sự kiện hệ thống`;if(n.contentType&&n.contentType!==`text`){let e=Jd(n.contentType,n.content);if(e)return e}if(n.content&&n.contentType===`text`){if(qd(n.content))return Jd(`sticker`,n.content);if(Wd(n.content))return Jd(`image`,n.content)}return Yd(n.content)||`Chưa có tin nhắn`}var mp=[{key:`all`,label:`Tất cả`},{key:`unread`,label:`Chưa đọc`},{key:`mine`,label:`Của tôi`}],hp=[{key:`all`,label:`Tất cả`},{key:`user`,label:`Cá nhân`},{key:`group`,label:`Nhóm`}];function gp({conversations:e,zaloAccounts:t,loading:n,onSelectConversation:r}){let[i,a]=(0,K.useState)(``),[o,s]=(0,K.useState)(`all`),[c,l]=(0,K.useState)(`all`),[u,d]=(0,K.useState)(null),[f,p]=(0,K.useState)(!1),m=(0,K.useMemo)(()=>t.find(e=>e.id===u)??null,[t,u]),h=(0,K.useMemo)(()=>{let t=e;if(i.trim()){let e=i.toLowerCase();t=t.filter(t=>(t.contact?.fullName||t.displayName||``).toLowerCase().includes(e))}return u&&(t=t.filter(e=>e.channelAccount?.id===u)),c===`user`?t=t.filter(e=>e.threadType===`user`):c===`group`&&(t=t.filter(e=>e.threadType===`group`)),o===`unread`&&(t=t.filter(e=>e.unreadCount>0)),t},[e,i,u,c,o]),g=(0,K.useMemo)(()=>[...h].sort((e,t)=>{if(e.isPinned&&!t.isPinned)return-1;if(!e.isPinned&&t.isPinned)return 1;let n=e.lastMessageAt?new Date(e.lastMessageAt).getTime():0;return(t.lastMessageAt?new Date(t.lastMessageAt).getTime():0)-n}),[h]);return(0,q.jsxs)(`div`,{className:`conv-grid`,children:[(0,q.jsxs)(`div`,{className:`conv-grid__toolbar`,children:[(0,q.jsxs)(`div`,{className:`conv-grid__search`,children:[(0,q.jsx)(_t,{size:14,className:`conv-grid__search-icon`}),(0,q.jsx)(`input`,{className:`conv-grid__search-input`,placeholder:`Tìm cuộc trò chuyện...`,value:i,onChange:e=>a(e.target.value)})]}),(0,q.jsx)(`div`,{className:`conv-grid__filters`,children:mp.map(e=>(0,q.jsx)(`button`,{className:`conv-grid__filter-btn ${o===e.key?`conv-grid__filter-btn--active`:``}`,onClick:()=>s(e.key),children:e.label},e.key))}),(0,q.jsx)(`div`,{className:`conv-grid__tabs`,children:hp.map(e=>(0,q.jsx)(`button`,{className:`conv-grid__tab-btn ${c===e.key?`conv-grid__tab-btn--active`:``}`,onClick:()=>l(e.key),children:e.label},e.key))}),(0,q.jsxs)(`div`,{className:`conv-grid__account-wrap`,style:{position:`relative`},children:[(0,q.jsxs)(`button`,{className:`conv-grid__account-btn`,onClick:()=>p(e=>!e),children:[m?(0,q.jsxs)(q.Fragment,{children:[m.avatarUrl?(0,q.jsx)(`img`,{src:m.avatarUrl,alt:``,style:{width:18,height:18,borderRadius:`50%`,objectFit:`cover`}}):(0,q.jsx)(`span`,{style:{width:18,height:18,borderRadius:`50%`,background:Bd(m.displayName),display:`inline-flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:8,fontWeight:600},children:zd(m.displayName)}),(0,q.jsx)(`span`,{children:m.displayName||Ql(m)}),(0,q.jsx)(`span`,{style:{fontSize:9,padding:`1px 4px`,borderRadius:3,background:m.platform===1?`#f0fdf4`:`#eff6ff`,color:m.platform===1?`#15803d`:`#2563eb`,fontWeight:600},children:Ql(m)})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{style:{width:18,height:18,borderRadius:`50%`,background:`#3b82f6`,display:`inline-flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:9,fontWeight:600},children:`Z`}),(0,q.jsx)(`span`,{children:`Tất cả`})]}),(0,q.jsx)(H,{size:11})]}),f&&(0,q.jsxs)(`div`,{className:`conv-grid__account-dropdown`,children:[(0,q.jsx)(`div`,{className:`conv-grid__account-option ${u?``:`conv-grid__account-option--active`}`,onClick:()=>{d(null),p(!1)},children:`Tất cả tài khoản`}),t.map(e=>(0,q.jsxs)(`div`,{className:`conv-grid__account-option ${u===e.id?`conv-grid__account-option--active`:``}`,onClick:()=>{d(e.id),p(!1)},children:[e.avatarUrl?(0,q.jsx)(`img`,{src:e.avatarUrl,alt:``,style:{width:16,height:16,borderRadius:`50%`,objectFit:`cover`}}):(0,q.jsx)(`span`,{style:{width:16,height:16,borderRadius:`50%`,background:Bd(e.displayName),display:`inline-flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:7,fontWeight:600},children:zd(e.displayName)}),(0,q.jsx)(`span`,{children:e.displayName||e.phone||Ql(e)}),(0,q.jsx)(`span`,{style:{fontSize:9,padding:`1px 4px`,borderRadius:3,background:e.platform===1?`#f0fdf4`:`#eff6ff`,color:e.platform===1?`#15803d`:`#2563eb`,fontWeight:600,marginLeft:`auto`}
5,children:Ql(e)}),(0,q.jsx)(`span`,{className:`conv-grid__status-dot conv-grid__status-dot--${e.status===`connected`?`on`:`off`}`})]},e.id))]})]}),(0,q.jsxs)(`span`,{className:`conv-grid__count`,children:[h.length,` cuộc`]})]}),(0,q.jsxs)(`div`,{className:`conv-grid__body`,children:[n&&h.length===0&&(0,q.jsx)(`div`,{className:`conv-grid__empty`,children:`Đang tải...`}),!n&&h.length===0&&(0,q.jsxs)(`div`,{className:`conv-grid__empty`,children:[(0,q.jsx)(xt,{size:32,style:{opacity:.3,marginBottom:8}}),(0,q.jsx)(`div`,{children:`Không có hội thoại phù hợp`})]}),(0,q.jsx)(`div`,{className:`conv-grid__cards`,children:g.map(e=>{let t=e.contact?.fullName||e.displayName||null,n=li(t),i=zd(t),a=Bd(t),o=pp(e),s=e.contact?.lifecycleStage?as(e.contact.lifecycleStage):null;return(0,q.jsxs)(`div`,{className:`conv-grid__card ${e.unreadCount>0?`conv-grid__card--unread`:``}`,onClick:()=>r(e.id),children:[(0,q.jsxs)(`div`,{className:`conv-grid__card-header`,children:[(0,q.jsxs)(`div`,{className:`conv-grid__card-avatar`,style:{background:a},children:[i,e.contact?.avatarUrl&&(0,q.jsx)(`img`,{src:e.contact.avatarUrl,alt:``,className:`conv-grid__card-avatar-img`,onError:e=>{e.target.style.display=`none`}}),e.unreadCount>0&&(0,q.jsx)(`span`,{className:`conv-grid__card-unread`,children:e.unreadCount})]}),(0,q.jsxs)(`div`,{className:`conv-grid__card-info`,children:[(0,q.jsxs)(`div`,{className:`conv-grid__card-name`,children:[n,s&&s.value!==`subscriber`&&(0,q.jsx)(`span`,{className:`conv-grid__card-lifecycle`,style:{background:s.color+`18`,color:s.color},children:s.label}),e.threadType===`group`&&(0,q.jsx)(`span`,{className:`conv-grid__card-group-badge`,children:`Nhóm`})]}),(0,q.jsxs)(`div`,{className:`conv-grid__card-meta`,children:[(0,q.jsx)(Jl,{platform:Yl(Rd(e.channelAccount)),size:11}),(0,q.jsx)(`span`,{children:e.channelAccount?.displayName||Ql(Rd(e.channelAccount))}),(0,q.jsxs)(`span`,{className:`conv-grid__card-time`,children:[(0,q.jsx)(Jt,{size:10}),Vd(e.lastMessageAt)]})]})]}),e.isPinned&&(0,q.jsx)(fe,{size:11,className:`conv-grid__card-pin`})]}),(0,q.jsx)(`div`,{className:`conv-grid__card-preview`,children:o}),e.contact?.tags&&e.contact.tags.length>0&&(0,q.jsxs)(`div`,{className:`conv-grid__card-tags`,children:[e.contact.tags.slice(0,3).map((e,t)=>(0,q.jsx)(`span`,{className:`conv-grid__card-tag`,children:e},t)),e.contact.tags.length>3&&(0,q.jsxs)(`span`,{className:`conv-grid__card-tag conv-grid__card-tag--more`,children:[`+`,e.contact.tags.length-3]})]})]},e.id)})})]})]})}var _p={token_expired:`phiên kết nối đã hết hạn`,disconnected:`đã ngắt kết nối`,qr_pending:`chưa quét mã QR`,webhook_pending:`chưa nhận được webhook`,connecting:`đang kết nối lại`};function vp(e){return!!(e&&e!==`connected`&&e in _p)}function yp({status:e,channelName:t}){return vp(e)?(0,q.jsxs)(`div`,{className:`chan-off`,role:`status`,children:[(0,q.jsx)(v,{size:16,className:`chan-off__icon`}),(0,q.jsxs)(`span`,{className:`chan-off__text`,children:[`Kênh `,(0,q.jsx)(`strong`,{children:t||`này`}),` `,_p[e],` — tin nhắn gửi ra có thể thất bại và tên khách mới sẽ không tự lấy được.`,` `,(0,q.jsx)(f,{to:`/integrations`,className:`chan-off__link`,children:`Kết nối lại`})]})]}):null}function bp({error:e,onDismiss:t}){return e?(0,q.jsxs)(`div`,{className:`conv-open-err`,role:`alert`,children:[(0,q.jsx)(ce,{size:18,className:`conv-open-err__icon`}),(0,q.jsxs)(`div`,{className:`conv-open-err__body`,children:[(0,q.jsx)(`div`,{className:`conv-open-err__title`,children:e.title}),e.hint&&(0,q.jsx)(`div`,{className:`conv-open-err__hint`,children:e.hint})]}),(0,q.jsx)(`button`,{className:`conv-open-err__close`,onClick:t,title:`Đóng`,children:`✕`})]}):null}var xp=400,Sp={planErrorHandledLocally:!0},Cp=6e4;function wp(e){let[t,n]=(0,K.useState)(null),[r,i]=(0,K.useState)(null),[a,o]=(0,K.useState)({}),s=(0,K.useRef)(new Set),[c,l]=(0,K.useState)(0);(0,K.useEffect)(()=>{let t=!1,r=setTimeout(async()=>{try{let r=await G.get(`/zalo-lookup`,{params:{phone:e}});if(t)return;n({phone:e,data:{...r.data,contacts:r.data.contacts??[],hiddenContacts:r.data.hiddenContacts??0,accounts:r.data.accounts??[]},loi:null})}catch(r){if(t)return;
5n({phone:e,data:null,loi:rn(r)||`Không đọc được thông tin của số này.`})}},xp);return()=>{t=!0,clearTimeout(r)}},[e,c]);let u=(0,K.useCallback)((e,t)=>{n(n=>n?.phone===e&&n.data?{...n,data:t(n.data)}:n)},[]),d=(0,K.useCallback)(async(t,n,r,a)=>{let c=`${e}:${t}:${n}`;if(s.current.has(c))return null;s.current.add(c),o(e=>({...e,[c]:!0})),i(null);try{let e=await r();return l(e=>e+1),e}catch(t){return i({phone:e,text:rn(t)||a,cta:vn(t)?.ctaLabel??null}),null}finally{s.current.delete(c),o(e=>{let t={...e};return delete t[c],t})}},[e]),f=(0,K.useCallback)(async t=>{let n=e,r=await d(`tra`,t,()=>G.post(`/zalo-lookup`,{phone:n,accountId:t},{...Sp,timeout:Cp}),`Không tra được số này trên Zalo. Thử lại sau.`);if(!r)return;let i=r.data.result;u(n,e=>{let r=Tp(e,t,e=>({...e,result:i,conversationId:i.conversationId??e.conversationId}));return i.contact?Ep(r,{...i.contact,phone:n}):i.contactOwnedByOther?{...r,hiddenContacts:Math.max(r.hiddenContacts,1)}:r})},[e,d,u]),p=(0,K.useCallback)(async t=>{let n=e,r=await d(`luu`,t,()=>G.post(`/zalo-lookup/contact`,{phone:n,accountId:t},Sp),`Không lưu được khách hàng.`);r&&u(n,e=>Dp(e,{...r.data.contact,phone:n}))},[e,d,u]),m=(0,K.useCallback)(async t=>{let n=e,r=await d(`nhan`,t,()=>G.post(`/zalo-lookup/conversation`,{phone:n,accountId:t},Sp),`Không mở được hội thoại với số này.`);if(!r)return null;let{conversationId:i,contactId:a}=r.data;return u(n,e=>{let r=Tp(e,t,e=>({...e,conversationId:i}));if(!a||r.contacts.some(e=>e.id===a))return r;let o=e.accounts.find(e=>e.id===t)?.result;return Dp(r,{id:a,fullName:o?.displayName||o?.zaloName||null,avatarUrl:o?.avatarUrl??null,phone:n})}),i},[e,d,u]),h=(0,K.useCallback)((t,n)=>!!a[`${e}:${t}:${n}`],[a,e]),g=t?.phone===e?t:null,_=r?.phone===e?r:null;return{data:g?.data??null,loading:g===null,error:_?.text??g?.loi??null,errorCta:_?.cta??null,dangLam:h,traTren:f,luuKhach:p,moHoiThoai:m}}function Tp(e,t,n){return{...e,accounts:e.accounts.map(e=>e.id===t?n(e):e)}}function Ep(e,t){return e.contacts.some(e=>e.id===t.id)?e:{...e,contacts:[t,...e.contacts]}}function Dp(e,t){let n={id:t.id,fullName:t.fullName,avatarUrl:t.avatarUrl},r=Ep(e,t);return{...r,accounts:r.accounts.map(e=>e.result?.found&&!e.result.contact&&!e.result.contactOwnedByOther?{...e,result:{...e.result,contact:n}}:e)}}function Op(e){let t=Date.now()-Date.parse(e);if(!Number.isFinite(t))return``;let n=Math.floor(t/6e4);if(n<1)return`vừa xong`;if(n<60)return`${n} phút trước`;let r=Math.floor(n/60);return r<24?`${r} giờ trước`:`${Math.floor(r/24)} ngày trước`}function kp({khach:e,phu:t,onOpenContact:n,onOpenConversation:r}){return(0,q.jsxs)(`li`,{className:`zalo-tra-sdt__contact`,children:[(0,q.jsx)(Ap,{url:e.avatarUrl,ten:e.fullName}),(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__info`,children:[(0,q.jsx)(`div`,{className:`zalo-tra-sdt__name`,children:e.fullName||`Chưa có tên`}),t&&(0,q.jsx)(`div`,{className:`zalo-tra-sdt__muted`,children:t}),(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__line`,children:[(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn`,onClick:()=>n(e.id),children:`Mở hồ sơ`}),r&&(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn zalo-tra-sdt__btn--primary`,onClick:r,children:`Mở hội thoại`})]})]})]})}function Ap({url:e,ten:t,nho:n=!1}){let[r,i]=(0,K.useState)(null),a=`zalo-tra-sdt__avatar${n?` zalo-tra-sdt__avatar--sm`:``}`;return e&&e!==r?(0,q.jsx)(`img`,{src:e,alt:``,className:a,onError:()=>i(e)}):(0,q.jsx)(`span`,{className:a,style:{background:Bd(t)},children:zd(t)})}function jp({taiKhoan:e,choLuuKhach:t,dangLam:n,onTra:r,onNhanTin:i,onLuuKhach:a,onOpenConversation:o}){let{id:s,connected:c,conversationId:l,result:u}=e,d=n(`tra`,s),f=n(`nhan`,s),p=n(`luu`,s),m=u?Op(u.lookedUpAt):``,h=(e,t)=>(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn ${t?`zalo-tra-sdt__btn--ghost`:`zalo-tra-sdt__btn--primary`}`,disabled:!c||d,title:c?void 0:`Tài khoản đang mất kết nối`,onClick:e=>{e.detail>1||r(s)},children:d?`Đang tra…`:e}),g;if(l)g=(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__line`,children:[(0,q.jsx)(`span`,{className:`zalo-tra-sdt__badge`,children:`Đang chat`}),(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn zalo-tra-sdt__btn--primary`,onClick:()=>o(l),children:`Mở hội thoại`})]});
5else if(u?.found){let e=u.displayName||u.zaloName||`Người dùng Zalo`;g=(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__found`,children:[(0,q.jsx)(Ap,{url:u.avatarUrl,ten:e,nho:!0}),(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__info`,children:[(0,q.jsx)(`div`,{className:`zalo-tra-sdt__name`,children:e}),u.zaloName&&u.zaloName!==e&&(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__muted`,children:[`Tên Zalo: `,u.zaloName]}),m&&(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__muted`,children:[`đã tra `,m]}),(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__line`,children:[!u.contactOwnedByOther&&(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn zalo-tra-sdt__btn--primary`,disabled:f,onClick:()=>i(s),children:f?`Đang mở…`:`Nhắn tin`}),t&&!u.contactOwnedByOther&&(0,q.jsx)(`button`,{type:`button`,className:`zalo-tra-sdt__btn`,disabled:p,onClick:()=>a(s),children:p?`Đang lưu…`:`Lưu khách hàng`}),h(`Tra lại`,!0)]})]})]})}else g=u?(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__line`,children:[(0,q.jsxs)(`span`,{className:`zalo-tra-sdt__muted`,children:[`Không tìm thấy trên Zalo (có thể họ tắt tìm bằng SĐT)`,m&&` · ${m}`]}),h(`Tra lại`,!0)]}):(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__line`,children:[(0,q.jsx)(`span`,{className:`zalo-tra-sdt__muted`,children:`Chưa tra`}),h(`Tra`,!1)]});return(0,q.jsxs)(`li`,{className:`zalo-tra-sdt__row`,children:[(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__acc`,children:[e.displayName||pn(e.phone)||`Zalo`,!c&&(0,q.jsx)(`span`,{className:`zalo-tra-sdt__offline`,children:` (mất kết nối)`})]}),g]})}function Mp({phone:e,preferredAccountId:t,onOpenConversation:n,onOpenContact:r}){let{data:i,loading:a,error:o,errorCta:s,dangLam:c,traTren:l,luuKhach:u,moHoiThoai:d}=wp(e),p=async e=>{let t=await d(e);t&&n(t)},m=i?[...i.accounts].sort((e,n)=>Number(n.id===t)-Number(e.id===t)):[],h=!!i&&i.contacts.length===0&&i.hiddenContacts===0;return(0,q.jsxs)(`section`,{className:`zalo-tra-sdt`,"aria-label":`Thông tin số điện thoại đang tìm`,children:[(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__head`,children:[(0,q.jsx)(z,{size:13,className:`zalo-tra-sdt__head-icon`}),(0,q.jsxs)(`span`,{children:[`SĐT `,(0,q.jsx)(`strong`,{children:pn(e)})]})]}),a&&(0,q.jsx)(`div`,{className:`zalo-tra-sdt__muted`,children:`Đang tải…`}),i&&(0,q.jsx)(Np,{data:i,onOpenContact:r}),m.length>0&&(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__section`,children:[(0,q.jsx)(`div`,{className:`zalo-tra-sdt__section-title`,children:`Zalo cá nhân`}),(0,q.jsx)(`ul`,{className:`zalo-tra-sdt__list`,children:m.map(e=>(0,q.jsx)(jp,{taiKhoan:e,choLuuKhach:h,dangLam:c,onTra:l,onNhanTin:p,onLuuKhach:u,onOpenConversation:n},e.id))})]}),o&&(0,q.jsxs)(`div`,{className:`zalo-tra-sdt__error`,role:`alert`,children:[o,s&&(0,q.jsxs)(q.Fragment,{children:[` `,(0,q.jsx)(f,{to:`/settings/billing`,className:`zalo-tra-sdt__error-link`,children:s})]})]}),m.length>0&&(0,q.jsx)(`div`,{className:`zalo-tra-sdt__hint`,children:`Chỉ gọi Zalo khi bấm Tra — mỗi lượt tính vào hạn mức tra SĐT của tài khoản đó.`})]})}function Np({data:e,onOpenContact:t}){return e.contacts.length===0?(0,q.jsx)(`div`,{className:`zalo-tra-sdt__section zalo-tra-sdt__muted`,children:e.hiddenContacts>0?`Số này đã là khách hàng do người khác phụ trách.`:`Chưa có khách hàng nào mang số này.`}):(0,q.jsx)(`ul`,{className:`zalo-tra-sdt__section zalo-tra-sdt__contacts`,children:e.contacts.map(e=>(0,q.jsx)(kp,{khach:e,phu:pn(e.phone),onOpenContact:t},e.id))})}var Pp=300,Fp=5;function Ip(e){let[t,n]=(0,K.useState)(null);return(0,K.useEffect)(()=>{let t=!1,r=setTimeout(async()=>{try{let r=await G.get(`/contacts`,{params:{search:e,limit:Fp}});if(t)return;let i=r.data.contacts??[];n({contacts:i,total:r.data.total??i.length,loi:null})}catch(e){if(t)return;n({contacts:[],total:0,loi:rn(e)||`Không tìm được hồ sơ khách.`})}},Pp);return()=>{t=!0,clearTimeout(r)}},[e]),t}function Lp({query:e,onOpenContact:t,onOpenConversationByContact:n}){let r=Ip(e);return r?r.loi?(0,q.jsx)(`div`,{className:`zalo-tra-sdt zalo-tra-sdt__muted`,role:`status`,children:r.loi}):r.contacts.length===0?null:(0,q.jsxs)(`section`,{className:`zalo-tra-sdt`,"aria-label":`Khách hàng khớp`,children:[(0,q.jsx)(`div`,{className:`zalo-tra-sdt__section-title`,children:`Khách hàng khớp`}),(0,q.jsx)(`ul`,{className:`zalo-tra-sdt__contacts zalo-tra-sdt__khop-list`,children:r.contacts.map(e=>(0,q.jsx)(kp,{khach:e,phu:Rp(e),onOpenContact:t,onOpenConversation:(e._count?.conversations??0)>0?()=>n(e.id):void 0},e.id))}),r.total>
5r.contacts.length&&(0,q.jsxs)(f,{to:`/customers?search=${encodeURIComponent(e.trim())}`,className:`zalo-tra-sdt__more`,children:[`Xem tất cả `,r.total,` khách`]})]}):null}function Rp(e){return[pn(e.phone),e.email,e.company?.name].filter(Boolean).join(` · `)}var zp=2,Bp=[{key:`chat`,icon:xt,label:`Chat`},{key:`unread`,icon:vt,label:`Chưa đọc`},{key:`unreplied`,icon:We,label:`Chưa trả lời`},{key:`assigned`,icon:Te,label:`Được gán cho tôi`},{key:`auto`,icon:It,label:`AI tự trả lời`},{key:`pinned`,icon:fe,label:`Đã ghim`},{key:`waiting`,icon:Jt,label:`Chờ`}],Vp={chat:`all`,unread:`unread`,unreplied:`unreplied`,assigned:`mine`,auto:`auto`,pinned:`pinned`};function Hp(e){let t=e.messages;if(!t||t.length===0)return`Chưa có tin nhắn`;let n=t[0];if(n.isDeleted)return`Đã thu hồi`;if(n.contentType===`group_event`)try{let e=JSON.parse(n.content||`{}`);return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`4px`},children:[(0,q.jsx)(rt,{size:12}),` `,e.displayText||[e.memberNames,e.label].filter(Boolean).join(` `)||`Sự kiện nhóm`]})}catch{return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`4px`},children:[(0,q.jsx)(rt,{size:12}),` Sự kiện nhóm`]})}if(n.contentType===`system_event`||n.senderType===`system`&&n.contentType!==`call_log`)return(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:`4px`,fontStyle:`italic`,color:`var(--gray-400)`},children:[(0,q.jsx)(rt,{size:12}),` `,n.content||`Sự kiện hệ thống`]});if(n.contentType&&n.contentType!==`text`){let e=Jd(n.contentType,n.content);if(e)return e}if(n.content&&n.contentType===`text`){if(qd(n.content))return Jd(`sticker`,n.content);if(Wd(n.content))return Jd(`image`,n.content)}return Yd(n.content)||``}function Up(e){return e<1?`${Math.round(e*4)} tuần`:`${Math.round(e)} tháng`}function Wp(){let{conversations:e,selectedConvId:t,selectedConv:n,messages:r,loadingConvs:i,loadingMsgs:a,sendingMsg:o,loadingMoreMsgs:s,loadingMoreConvs:l,hasMoreMsgs:u,hasMoreConvs:p,retentionNotice:m,noChannelAccess:h,searchQuery:g,setSearchQuery:_,accountFilter:v,setAccountFilter:y,viewFilter:b,setViewFilter:S,fetchConversations:C,selectConversation:w,deselectConversation:T,selectConversationByContact:E,sendMessage:D,sendAttachment:O,togglePin:k,deleteConversation:A,addReaction:j,undoMessage:M,sendSticker:N,loadMoreMessages:P,loadMoreConversations:ee,typingUsers:ne,emitTypingStart:F,emitTypingStop:re,aiTypingConvs:I,sendError:ie,clearSendError:ae,tinChuaGuiDuoc:oe,openConvError:L,clearOpenConvError:ce,setAiMode:le,setAiPause:ue,aiDrafts:de,dismissAiDraft:pe}=ru(),{profile:me}=Ni(),he=fn(g),ge=g.trim(),B=Nc(h),{on:_e}=lr(),[ve,ye]=c(),V=d(),[be,xe]=(0,K.useState)(`chat`),[Se,Ce]=(0,K.useState)(`all`),[we,Te]=(0,K.useState)(``),[Ee,De]=(0,K.useState)(null),[Oe,ke]=(0,K.useState)(`info`),[Ae,je]=(0,K.useState)(`all`),Me=(0,K.useRef)(null),Ne=(0,K.useRef)(null),[Pe,Fe]=(0,K.useState)(!1),[Ie,Le]=(0,K.useState)(!1),Re=(0,K.useCallback)(async e=>{if(!(!n?.contact?.id||Pe)){Fe(!0),Le(!1);try{await G.put(`/contacts/${n.contact.id}`,{lifecycleStage:e}),C()}catch(e){console.error(`Failed to update contact lifecycle stage:`,e)}finally{Fe(!1)}}},[n,Pe,C]),[ze,Be]=(0,K.useState)(!1),[Ve,Ue]=(0,K.useState)(null),We=(0,K.useCallback)(async e=>{try{Ue((await G.get(`/contacts/${e}`)).data),Be(!0)}catch{V(`/customers?openContact=${e}`)}},[V]),Ge=(0,K.useCallback)(()=>{n?.contact?.id&&We(n.contact.id)},[n,We]),Ke=(0,K.useCallback)(async(e,t)=>{try{let n=await G.put(`/contacts/${e}`,t);return C(),n.data}catch(e){return console.error(`Failed to update contact:`,e),null}},[C]),Je=(0,K.useCallback)(async(e,t)=>{let r=n?.contact?.id;if(r)try{await G.put(`/contacts/${r}`,{companyId:e}),C()}catch(e){console.error(`Failed to update company:`,e)}},[n,C]),[U,Xe]=(0,K.useState)(null),[Qe,et]=(0,K.useState)(``),tt=(0,K.useRef)(null),nt=(0,K.useCallback)(e=>{let t=n?.contact;t&&(Xe(e),et(e===`phone`?t.phone||``:t.email||``),setTimeout(()=>tt.current?.focus(),50))},[n]),rt=(0,K.useCallback)(async()=>{let e=n?.contact?.id;if(!e||!U)return;let t=Qe.trim();try{await G.put(`/contacts/${e}`,{[U]:t||null}),C()}catch(e){console.error(`Failed to update contact field:`,e)}Xe(null),et(``)},[n,U,Qe,C]),it=(0,K.useCallback)(e=>{e.key===`Enter`&&(e.preventDefault(),rt()),e.key===`Escape`&&(Xe(null),et(``))},[rt]),at=(0,K.useCallback)(async e=>{try{return await G.delete(`/contacts/${e}`),Be(!1),C(),!0}catch{return!1}},[C]);(0,K.useEffect)(()=>{let e=ve.get(`contactId`),t=ve.get(`selectConv`)??ve.get(`id`),n=ve.get(`msg`);t?(w(t),n&&(Ne.current=n),ve.delete(`selectConv`),ve.delete(`id`),ve.delete(`msg`),ye(ve)):e&&E(e).then(()=>{ve.delete(`contactId`),ye(ve)})},[ve,ye,w,E]);let{getSuggestion:ot,suggesting:st,error:ct,config:lt,fetchConfig:ut,reportSuggestionOutcome:dt}=iu(),{toast:ft,ToastContainer:pt}=ou();(0,K.useEffect)(()=>{ct&&ft(ct,`error`)},[ct,ft]),(0,K.useEffect)(()=>{ut()},[ut]);let mt=t?de[t]:void 0,[ht,gt]=(0,K.useState)([]),[vt,yt]=(0,K.useState)(!1),[bt,St]=(0,K.useState)([]),[Ct,Tt]=(0,K.useState)(!1),[Et,Dt]=(0,K.useState)(null),Ot=(0,K.useCallback)(async()=>{try{gt((await G.get(`/automation/templates`)).data.templates??[])}catch(e){console.error(`[Tin nhanh] Failed to load templates:`,e)}},[]);(0,K.useEffect)(()=>{Ot()},[Ot]);let[kt,jt]=(0,K.useState)([]),[Mt,Nt]=(0,K.useState)(!1);(0,K.useEffect)(()=>{G.get(`/tags`).then(e=>jt(e.data.tags??[])).catch(()=>{})},[]);let[It,Lt]=(0,K.useState)([]),[Rt,zt]=(0,K.useState)(!1),Bt=(0,K.useRef)(null);(0,K.useEffect)(()=>{G.get(`/zalo-accounts`).then(e=>Lt(e.data??[])).catch(()=>{})},[]),(0,K.useEffect)(()=>{let e=e=>{Lt(t=>t.map(t=>
5t.id===e.accountId?{...t,status:e.status}:t))},t=[_e(`zalo:account-status`,e),_e(`whatsapp:status`,e)];return()=>{t.forEach(e=>e())}},[_e]),(0,K.useEffect)(()=>{if(!Rt)return;let e=e=>{Bt.current&&!Bt.current.contains(e.target)&&zt(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Rt]);let Vt=(0,K.useMemo)(()=>It.find(e=>e.id===v)??null,[It,v]),[Ht,Ut]=(0,K.useState)(null),[Wt,Kt]=(0,K.useState)(null);(0,K.useEffect)(()=>{Ut(null)},[t]);let qt=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!Mt)return;let e=e=>{qt.current&&!qt.current.contains(e.target)&&Nt(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[Mt]);let Jt=(0,K.useMemo)(()=>Ht===null?n?.contact?.tags||[]:Ht,[n,Ht]),Yt=(0,K.useMemo)(()=>new Map(kt.map(e=>[e.name,e.color])),[kt]),Xt=(0,K.useCallback)(e=>Yt.get(e)||`#3b82f6`,[Yt]),Zt=(0,K.useCallback)(async e=>{if(!n?.contact?.id)return;let t=(Ht??n.contact.tags)||[];if(t.includes(e))return;let r=[...t,e];Ut(r),Nt(!1);try{await G.patch(`/contacts/${n.contact.id}/tags`,{tags:r}),C()}catch{Ut(t)}},[n,Ht,C]),Qt=(0,K.useCallback)(async e=>{if(!n?.contact?.id)return;let t=(Ht??n.contact.tags)||[],r=t.filter(t=>t!==e);Ut(r);try{await G.patch(`/contacts/${n.contact.id}/tags`,{tags:r}),C()}catch{Ut(t)}},[n,Ht,C]),[$t,en]=(0,K.useState)(!1),tn=(0,K.useCallback)(async()=>{if(!(!n?.contact?.id||$t)){en(!0);try{(await G.post(`/contacts/${n.contact.id}/sync-zalo`)).data?.success&&C()}catch(e){let t=e?.response?.data?.error||`Sync failed`;console.warn(`[sync-zalo]`,t),alert(t===`No connected Zalo account available`?`Không có tài khoản Zalo nào đang kết nối`:t===`Contact has no Zalo UID`?`Liên hệ này không có Zalo UID`:`Lỗi: ${t}`)}finally{en(!1)}}},[n,$t,C]),nn=(0,K.useCallback)(async()=>{if(!t)return;yt(!0),St([]),Dt(null),Tt(!0);let e=await ot(t);Tt(!1),e&&e.suggestions.length>0?St(e.suggestions):Dt(ct||`Không tạo được gợi ý. Thử lại?`)},[t,ot,ct]),[rn,an]=(0,K.useState)([]);(0,K.useEffect)(()=>{let e=n?.contact?.id;e&&n?.threadType===`user`?G.get(`/contacts/${e}`).then(e=>{an(e.data.mergedFrom||[])}).catch(()=>an([])):an([])},[n?.contact?.id,n?.threadType]);let[on,sn]=(0,K.useState)(null),cn=(0,K.useMemo)(()=>{let e=new Map;return on?.members&&on.members.forEach(t=>{t.uid&&t.avatarUrl&&e.set(t.uid,t.avatarUrl)}),e},[on]),W=(0,K.useMemo)(()=>{let e=new Set;return r.forEach(t=>{t.actorKind&&e.add(t.actorKind)}),e},[r]),ln=(0,K.useMemo)(()=>Ae===`all`?r:r.filter(e=>e.actorKind===Ae),[r,Ae]);(0,K.useEffect)(()=>{if(!t){sn(null);return}n?.threadType===`group`?G.get(`/conversations/${t}/group-info`).then(e=>sn(e.data)).catch(()=>sn(null)):sn(null)},[t,n?.threadType]),(0,K.useEffect)(()=>{if(!(!t||n?.threadType!==`group`))return _e(`chat:group-members-updated`,({convId:e})=>{e===t&&G.get(`/conversations/${t}/group-info`).then(e=>sn(e.data)).catch(()=>{})})},[t,n?.threadType,_e]),(0,K.useEffect)(()=>{C()},[C]);let un=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(r.length===0)return;let e=r[r.length-1]?.id;e&&e!==un.current&&(Ne.current||Me.current?.scrollIntoView({behavior:`smooth`})),un.current=e??null},[r]),(0,K.useEffect)(()=>{let e=Ne.current;if(!e||r.length===0||!r.some(t=>t.id===e))return;let t=document.getElementById(`msg-${e}`);if(!t)return;Ne.current=null,t.scrollIntoView({behavior:`smooth`,block:`center`}),t.classList.add(`msg-wrapper--highlight`);let n=setTimeout(()=>t.classList.remove(`msg-wrapper--highlight`),2400);return()=>clearTimeout(n)},[r]);let dn=(0,K.useMemo)(()=>{let t=e;return Se===`user`?t=t.filter(e=>e.threadType===`user`):Se===`group`&&(t=t.filter(e=>e.threadType===`group`)),t},[e,Se]),mn=ge!==``||b!==`all`||Se!==`all`||v!==null,hn=(0,K.useMemo)(()=>[...dn].sort((e,t)=>{if(e.isPinned&&!t.isPinned)return-1;if(!e.isPinned&&t.isPinned)return 1;let n=e.lastMessageAt?new Date(e.lastMessageAt).getTime():0;return(t.lastMessageAt?new Date(t.lastMessageAt).getTime():0)-n}),[dn]),gn=Us(v),_n=(0,K.useMemo)(()=>({chat:gn.total,unread:gn.unread,unreplied:gn.unreplied,assigned:gn.mine,auto:gn.auto,pinned:gn.pinned}),[gn]),vn=(0,K.useRef)(null);(0,K.useEffect)(()=>{vn.current=null},[t]);let yn=(0,K.useCallback)(async()=>
5{if(!we.trim()||o)return;let e=vn.current;try{await D(we,Ee?.id),e&&e.convId===t&&dt(e.suggestionId,`edited`,we),vn.current=null,Te(``),De(null)}catch{}},[we,o,D,Ee,t,dt]),bn=(0,K.useCallback)(e=>{De(e)},[]),xn=[`owner`,`admin`].includes(me?.role??``),[Sn,Cn]=(0,K.useState)(null);(0,K.useEffect)(()=>{if(!Sn)return;let e=()=>Cn(null),t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`scroll`,e,!0),window.addEventListener(`resize`,e),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`scroll`,e,!0),window.removeEventListener(`resize`,e),window.removeEventListener(`keydown`,t)}},[Sn]);let wn=(0,K.useCallback)((e,t)=>{t.stopPropagation();let n=t.currentTarget.getBoundingClientRect();Cn(t=>{if(t?.id===e)return null;let r=n.bottom+56>window.innerHeight?n.top-56:n.bottom+4;return{id:e,x:n.right,y:r}})},[]),Tn=(0,K.useCallback)(async e=>{Cn(null);let t=e.contact?.fullName||e.displayName||`hội thoại này`;if(confirm(`Xóa hội thoại với "${t}"? Toàn bộ tin nhắn sẽ bị xóa khỏi CRM và không thể khôi phục (không ảnh hưởng tới Zalo).`))try{await A(e.id)}catch(e){let t=e?.response?.data?.error||`Xóa hội thoại thất bại`;alert(t)}},[A]),[En,Dn]=(0,K.useState)(!1),On=(0,K.useRef)(null);return(0,K.useEffect)(()=>{if(!En)return;let e=e=>{On.current&&!On.current.contains(e.target)&&Dn(!1)},t=e=>{e.key===`Escape`&&Dn(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[En]),(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(pt,{}),(0,q.jsxs)(`div`,{className:`chat-layout${t?` has-active`:``}`,children:[ie&&(0,q.jsxs)(`div`,{className:`chat-send-error-toast`,onClick:ae,children:[(0,q.jsx)(`span`,{className:`chat-send-error-toast__icon`,children:`⚠️`}),(0,q.jsxs)(`span`,{className:`chat-send-error-toast__text`,children:[`Gửi `,Pn(e.find(e=>e.id===ie.convId)?.channelAccount?.platform)?`WhatsApp`:`Zalo`,` thất bại: `,ie.reason]}),(0,q.jsx)(`button`,{className:`chat-send-error-toast__close`,onClick:e=>{e.stopPropagation(),ae()},children:`✕`})]}),(0,q.jsx)(`div`,{className:`chat-icon-bar`,children:Bp.map(e=>{let t=e.icon,n=_n[e.key];return(0,q.jsxs)(`button`,{className:`chat-icon-bar__item ${e.key===be?`chat-icon-bar__item--active`:``}`,onClick:()=>{xe(e.key);let t=Vp[e.key];t&&S(t)},title:e.label,children:[(0,q.jsx)(t,{size:18}),n>0&&(0,q.jsx)(`span`,{className:`chat-icon-bar__badge`,children:n})]},e.key)})}),be===`waiting`?(0,q.jsx)(gp,{conversations:e,zaloAccounts:It,loading:i,onSelectConversation:e=>{w(e),xe(`chat`)}}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`chat-list`,children:[(0,q.jsxs)(`div`,{className:`chat-list__header`,children:[(0,q.jsx)(`div`,{className:`chat-list__title-row`,children:(0,q.jsx)(`span`,{className:`chat-list__title`,children:`Tin nhắn`})}),(0,q.jsx)(`div`,{style:{marginBottom:10},children:(0,q.jsxs)(`div`,{className:`search-input`,children:[(0,q.jsx)(_t,{size:14,className:`search-input__icon`}),(0,q.jsx)(`input`,{className:`search-input__field`,placeholder:`Tìm tên, SĐT, email khách…`,value:g,onChange:e=>_(e.target.value)})]})}),he?(0,q.jsx)(Mp,{phone:he,preferredAccountId:v,onOpenConversation:w,onOpenContact:We}):ge.length>=zp&&(0,q.jsx)(Lp,{query:ge,onOpenContact:We,onOpenConversationByContact:E}),(0,q.jsx)(`div`,{className:`filter-bar`,children:Id.map(e=>(0,q.jsx)(`button`,{className:`filter-bar__btn ${e.key===b?`filter-bar__btn--active`:``}`,onClick:()=>{S(e.key);let t=Object.keys(Vp).find(t=>Vp[t]===e.key);t&&xe(t)},children:e.label},e.key))}),(0,q.jsxs)(`div`,{className:`chat-list__account-filter-wrap`,ref:Bt,children:[(0,q.jsxs)(`div`,{className:`chat-list__account-filter`,onClick:()=>zt(e=>!e),children:[Vt?(0,q.jsxs)(q.Fragment,{children:[Vt.avatarUrl?(0,q.jsx)(`img`,{src:Vt.avatarUrl,alt:``,className:`chat-list__account-avatar`,style:{objectFit:`cover`}}):(0,q.jsx)(`span`,{className:`chat-list__account-avatar`,style:{background:Bd(Vt.displayName)},children:zd(Vt.displayName)}),(0,q.jsx)(`span`,{className:`chat-list__account-name`,children:Vt.displayName||Ql(Vt)}),(0,q.jsx)(`span`,{style:{fontSize:10,padding:`1px 5px`,borderRadius:4,background:Vt.platform===1?`#f0fdf4`:`#eff6ff`,color:Vt.platform===1?`#15803d`:`#2563eb`,fontWeight:600,marginLeft:4},children:Ql(Vt)}),(0,q.jsx)(`span`,{className:`chat-list__account-dot chat-list__account-dot--${Vt.status===`connected`?`on`:`off`}`})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`span`,{className:`chat-list__account-avatar`,style:{background:`#3b82f6`},children:`Z`}),(0,q.jsx)(`span`,{className:`chat-list__account-name`,children:`Tất cả tài khoản`})]}),(0,q.jsx)(`span`,{className:`chat-list__account-count`,children:It.length}),(0,q.jsx)(H,{size:12,className:`chat-list__account-chevron ${Rt?`chat-list__account-chevron--open`:``}`})]}),Rt&&(0,q.jsxs)(`div`,{className:`chat-list__account-dropdown`,children:[(0,q.jsxs)(`div`,{className:`chat-list__account-option ${v?``:`chat-list__account-option--active`}`,onClick:()=>{y(null),zt(!1)},children:[(0,q.jsx)(`span`,{className:`chat-list__account-avatar chat-list__account-avatar--sm`,style:{background:`#3b82f6`},children:`Z`}),(0,q.jsx)(`span`,{children:`Tất cả tài khoản`}),(0,q.jsx)(`span`,{className:`chat-list__account-count`,children:It.length})]}),It.map(e=>(0,q.jsxs)(`div`,{className:`chat-list__account-option ${v===e.id?`chat-list__account-option--active`:``}`,onClick:()=>{y(e.id),zt(!1)},children:[e.avatarUrl?(0,q.jsx)(`img`,{src:e.avatarUrl,alt:``,className:`chat-list__account-avatar chat-list__account-avatar--sm`,style:{objectFit:`cover`}}):(0,q.jsx)(`span`,{className:`chat-list__account-avatar chat-list__account-avatar--sm`,style:{background:Bd(e.displayName)},children:zd(e.displayName)}),(0,q.jsx)(`span`,{className:`chat-list__account-option-name`,children:e.displayName||e.phone||Ql(e)}),(0,q.jsx)(`span`,{style:{fontSize:10,padding:`1px 5px`,borderRadius:4,background:e.platform===1?`#f0fdf4`:`#eff6ff`,color:e.platform===1?`#15803d`:`#2563eb`,fontWeight:600,marginLeft:`auto`}
5,children:Ql(e)}),(0,q.jsx)(`span`,{className:`chat-list__account-dot chat-list__account-dot--${e.status===`connected`?`on`:`off`}`})]},e.id))]})]})]}),(0,q.jsx)(`div`,{className:`tab-bar`,children:Ld.map(e=>(0,q.jsx)(`button`,{className:`tab-bar__btn ${e.key===Se?`tab-bar__btn--active`:``}`,onClick:()=>Ce(e.key),children:e.label},e.key))}),(0,q.jsxs)(`div`,{className:`chat-list__items`,children:[i&&dn.length===0&&(0,q.jsx)(`div`,{style:{padding:24,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Đang tải...`}),!i&&dn.length===0&&h&&(0,q.jsxs)(`div`,{className:`conv-empty conv-empty--noaccess`,children:[(0,q.jsx)(He,{size:26,className:`conv-empty__icon`}),(0,q.jsx)(`div`,{className:`conv-empty__title`,children:`Bạn chưa được cấp kênh nào`}),(0,q.jsxs)(`p`,{className:`conv-empty__desc`,children:[`Tài khoản của bạn chưa được gán vào tài khoản Zalo/Facebook nào, nên chưa thấy hội thoại. Đây không phải lỗi — nhờ quản trị viên vào`,` `,(0,q.jsx)(`strong`,{children:`Cài đặt → Sơ đồ tổ chức`}),`, bấm `,(0,q.jsx)(`strong`,{children:`“+ Thêm Zalo”`}),` ở thẻ tên bạn.`,B&&(0,q.jsxs)(q.Fragment,{children:[` `,`Người phụ trách: `,(0,q.jsx)(`strong`,{children:B.fullName}),B.email?` (${B.email})`:``,`.`]})]})]}),!i&&dn.length===0&&!h&&(It.length===0?(0,q.jsxs)(`div`,{className:`conv-empty`,children:[(0,q.jsx)(Ft,{size:26,className:`conv-empty__icon`}),(0,q.jsx)(`div`,{className:`conv-empty__title`,children:`Chưa nối kênh nào`}),(0,q.jsx)(`p`,{className:`conv-empty__desc`,children:`Hội thoại ở đây là tin nhắn khách gửi qua Zalo, Zalo OA hoặc Fanpage. Nối một kênh là tin nhắn tự đổ về, không phải nhập tay.`}),(0,q.jsx)(f,{className:`conv-empty__btn`,to:`/integrations`,children:`Nối kênh đầu tiên`})]}):mn?(0,q.jsxs)(`div`,{className:`conv-empty`,children:[(0,q.jsx)(_t,{size:26,className:`conv-empty__icon`}),(0,q.jsx)(`div`,{className:`conv-empty__title`,children:ge?`Không có hội thoại nào khớp “${ge}”`:`Không có hội thoại nào khớp bộ lọc đang chọn`})]}):(0,q.jsxs)(`div`,{className:`conv-empty`,children:[(0,q.jsx)(Ft,{size:26,className:`conv-empty__icon`}),(0,q.jsx)(`div`,{className:`conv-empty__title`,children:`Chưa có tin nhắn nào`}),(0,q.jsx)(`p`,{className:`conv-empty__desc`,children:`Kênh đã nối xong. Khách nhắn tới là hội thoại hiện ngay ở đây.`})]})),hn.map(e=>{let n=e.contact?.fullName||e.displayName||null,r=li(n),i=zd(n),a=Bd(n),o=Hp(e);return(0,q.jsxs)(`div`,{className:`conv-item ${e.id===t?`conv-item--active`:``}`,onClick:()=>{w(e.id),Le(!1)},children:[(0,q.jsxs)(`div`,{className:`conv-item__avatar`,style:{position:`relative`,background:a,width:40,height:40,borderRadius:`50%`,display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:13,fontWeight:600,flexShrink:0,overflow:`hidden`},children:[i,e.contact?.avatarUrl&&(0,q.jsx)(`img`,{src:e.contact.avatarUrl,style:{position:`absolute`,inset:0,width:40,height:40,borderRadius:`50%`,objectFit:`cover`},alt:``,onError:e=>{e.target.style.display=`none`}})]}),(0,q.jsxs)(`div`,{className:`conv-item__body`,children:[(0,q.jsxs)(`div`,{className:`conv-item__top`,children:[(0,q.jsxs)(`span`,{className:`conv-item__name`,children:[r,e.contact?.lifecycleStage&&e.contact.lifecycleStage!==`subscriber`&&(0,q.jsx)(`span`,{className:`conv-item__status-dot`,style:{background:as(e.contact.lifecycleStage).color},title:as(e.contact.lifecycleStage).label})]}),(0,q.jsx)(`span`,{className:`conv-item__time`,children:Vd(e.lastMessageAt)})]}),(0,q.jsx)(`div`,{className:`conv-item__preview`,children:o}),(0,q.jsxs)(`div`,{className:`conv-item__source`,style:{display:`flex`,alignItems:`center`,gap:4,marginTop:4,fontSize:11,color:`var(--gray-500)`},children:[(0,q.jsx)(Jl,{platform:Yl(Rd(e.channelAccount)),size:12}),(0,q.jsx)(`span`,{children:e.channelAccount?.displayName||Ql(Rd(e.channelAccount))})]}),e.contact?.tags&&e.contact.tags.length>0&&(0,q.jsx)(`div`,{className:`conv-item__tags`,children:e.contact.tags.map((e,t)=>{let n=Xt(e);return(0,q.jsx)(`span`,{className:`conv-item__tag`,style:{background:n+`1a`,color:n},children:e},t)})}
5),e.isPinned&&(0,q.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:4,marginTop:2},children:[(0,q.jsx)(fe,{size:10,style:{color:`var(--primary)`,transform:`rotate(45deg)`}}),(0,q.jsx)(`span`,{style:{fontSize:11,color:`var(--primary)`},children:`Ghim`})]})]}),e.unreadCount>0&&(0,q.jsx)(`span`,{className:`conv-item__unread-badge`,children:e.unreadCount}),xn&&(0,q.jsx)(`button`,{className:`conv-item__menu-btn ${Sn?.id===e.id?`conv-item__menu-btn--open`:``}`,title:`Tùy chọn`,onClick:t=>wn(e.id,t),children:(0,q.jsx)(Ze,{size:16})})]},e.id)}),p&&(0,q.jsx)(`div`,{style:{padding:`10px 16px`,textAlign:`center`},children:(0,q.jsx)(`button`,{className:`chat-messages__load-more-btn`,onClick:ee,disabled:l||i,style:{width:`100%`},children:l?`Đang tải...`:`Xem thêm hội thoại`})}),m&&m.hiddenCount>0&&(0,q.jsxs)(`div`,{style:{padding:`12px 16px`,textAlign:`center`,fontSize:12,color:`var(--gray-400)`,borderTop:`1px solid var(--gray-100)`},children:[m.hiddenCount,` hội thoại cũ hơn `,Up(m.months),` được lưu trữ theo gói hiện tại.`,` `,(0,q.jsx)(`a`,{href:`/upgrade`,style:{color:`var(--primary)`,fontWeight:600},children:`Nâng gói`}),` để xem lại.`]})]})]}),n?(0,q.jsxs)(`div`,{className:`chat-main`,children:[(0,q.jsxs)(`div`,{className:`chat-main__header`,children:[(0,q.jsx)(`button`,{className:`chat-back-btn`,title:`Quay lại danh sách`,onClick:T,children:(0,q.jsx)(x,{size:18})}),(0,q.jsxs)(`div`,{style:{position:`relative`,width:36,height:36,borderRadius:`50%`,background:Bd(n.contact?.fullName||n.displayName),display:`flex`,alignItems:`center`,justifyContent:`center`,color:`#fff`,fontSize:12,fontWeight:600,overflow:`hidden`},children:[zd(n.contact?.fullName||n.displayName),n.contact?.avatarUrl&&(0,q.jsx)(`img`,{src:n.contact.avatarUrl,style:{position:`absolute`,inset:0,width:36,height:36,borderRadius:`50%`,objectFit:`cover`},alt:``,onError:e=>{e.target.style.display=`none`}})]}),(0,q.jsxs)(`div`,{className:`chat-main__info`,children:[(0,q.jsxs)(`div`,{className:`chat-main__name`,children:[(0,q.jsx)(`span`,{className:`chat-main__name-text`,children:li(n.contact?.fullName,n.displayName)}),n.threadType===`group`&&(0,q.jsx)(`span`,{className:`chat-main__header-badge`,style:{background:`#e8f0fe`,color:`#2563eb`},children:`Nhóm`}),n.threadType!==`group`&&n.contact&&(()=>{let e=as(n.contact?.lifecycleStage||`subscriber`);return(0,q.jsxs)(`span`,{className:`pipeline-dropdown`,style:{position:`relative`,display:`inline-flex`},children:[(0,q.jsxs)(`button`,{className:`pipeline-dropdown__trigger`,style:{background:e.color+`18`,color:e.color,border:`1px solid ${e.color}40`,borderRadius:12,padding:`2px 10px 2px 7px`,fontSize:11,fontWeight:600,cursor:`pointer`,display:`inline-flex`,alignItems:`center`,gap:4,marginLeft:8,verticalAlign:`middle`,transition:`all 0.15s`},onClick:()=>Le(!Ie),disabled:Pe,children:[(0,q.jsx)(`span`,{style:{width:6,height:6,borderRadius:`50%`,background:e.color,flexShrink:0}}),e.label,(0,q.jsx)(H,{size:10,style:{opacity:.6,transition:`transform 0.15s`,transform:Ie?`rotate(180deg)`:void 0}})]}),Ie&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{position:`fixed`,inset:0,zIndex:99},onClick:()=>Le(!1)}),(0,q.jsx)(`div`,{className:`pipeline-dropdown__menu`,children:es.map(e=>{let t=(n.contact?.lifecycleStage||`subscriber`)===e.value;return(0,q.jsxs)(`button`,{className:`pipeline-dropdown__item ${t?`pipeline-dropdown__item--active`:``}`,onClick:()=>Re(e.value),disabled:Pe,children:[(0,q.jsx)(`span`,{style:{width:8,height:8,borderRadius:`50%`,background:e.color,flexShrink:0}}),e.label,t&&(0,q.jsx)(te,{size:12,style:{marginLeft:`auto`,color:e.color}})]},e.value)})})]})]})})()]}),(0,q.jsxs)(`div`,{className:`chat-main__meta`,children:[n.channelAccount?.displayName?(0,q.jsxs)(`span`,{style:{display:`inline-flex`,alignItems:`center`,gap:4},children:[`qua `,(0,q.jsx)(Jl,{platform:Yl(Rd(n.channelAccount)),size:13}),` `,n.channelAccount.displayName]}):`Cuộc hội thoại`,n.threadType===`group`&&on?(0,q.jsxs)(`span`,{style:{marginLeft:8,fontSize:11,color:`var(--gray-400)`,display:`inline-flex`,alignItems:`center`,gap:4},children:[`· `,(0,q.jsx)(Gt,{size:11}),` `,on.memberCount,` thành viên · `,on.totalMessages,` tin nhắn`]}):n.contact?.leadScore!=null&&(0,q.jsxs)(`span`,{style:{marginLeft:8,fontSize:11,color:`var(--gray-400)`},children:[`· Lead `,(0,q.jsx)(`span`,{style:{color:`#3b82f6`,fontWeight:600},children:n.contact.leadScore}),`/100`]})]})]}),(0,q.jsxs)(`div`,{className:`chat-main__header-actions`,children:[(lt?.autoReplyEnabled??!1)&&(0,q.
5jsx)(ep,{convId:n.id,convMode:n.aiMode,defaultMode:lt?.defaultAiMode??`manual`,masterEnabled:!0,aiPausedUntil:n.aiPausedUntil,onSetMode:le,onSetPause:ue}),n.threadType!==`group`&&(0,q.jsx)(Td,{conversationId:n.id,contactId:n.contact?.id??null}),(0,q.jsx)(`button`,{className:`chat-main__header-btn ${n.isPinned?`chat-main__header-btn--active`:``}`,title:n.isPinned?`Bỏ ghim`:`Ghim hội thoại`,onClick:()=>k(n.id),style:n.isPinned?{color:`var(--primary)`,background:`var(--primary-light)`}:void 0,children:(0,q.jsx)(fe,{size:16,style:{transform:`rotate(45deg)`}})}),(0,q.jsx)(`button`,{className:`chat-main__header-btn`,title:`AI gợi ý trả lời`,onClick:nn,disabled:st||!t,style:{opacity:st?.6:1},children:(0,q.jsx)(At,{size:16})}),(0,q.jsxs)(`div`,{className:`chat-header-more`,ref:On,children:[(0,q.jsx)(`button`,{className:`chat-main__header-btn ${En?`chat-main__header-btn--active`:``}`,title:`Tùy chọn khác`,onClick:()=>Dn(e=>!e),"aria-haspopup":`menu`,"aria-expanded":En,children:(0,q.jsx)(Ze,{size:16})}),En&&(0,q.jsx)(`div`,{className:`chat-header-more__menu`,role:`menu`,children:xn?(0,q.jsxs)(`button`,{className:`chat-header-more__item chat-header-more__item--danger`,role:`menuitem`,onClick:()=>{Dn(!1),Tn(n)},children:[(0,q.jsx)(R,{size:14}),` Xóa hội thoại`]}):(0,q.jsx)(`div`,{className:`chat-header-more__empty`,children:`Chưa có thao tác khác`})})]})]})]}),(0,q.jsxs)(`div`,{className:`chat-main__subheader`,children:[(0,q.jsx)(`span`,{children:`Đang chat:`}),(0,q.jsx)(`span`,{style:{color:`#3b82f6`,fontWeight:500},children:n.channelAccount?.displayName||`Staff`})]}),(0,q.jsx)(yp,{status:n.channelAccount?.status,channelName:n.channelAccount?.displayName}),W.size>1&&(0,q.jsx)(`div`,{style:{display:`flex`,gap:6,padding:`6px 16px`,flexWrap:`wrap`,borderBottom:`1px solid var(--gray-100)`,background:`var(--gray-50)`},children:[`all`,...Object.keys(Ln).filter(e=>W.has(e))].map(e=>{let t=Ae===e;return(0,q.jsx)(`button`,{onClick:()=>je(e),style:{fontSize:12,padding:`3px 10px`,borderRadius:14,cursor:`pointer`,border:`1px solid`,borderColor:t?`var(--primary-500, #2563eb)`:`var(--gray-200)`,background:t?`var(--primary-500, #2563eb)`:`#fff`,color:t?`#fff`:`var(--gray-600)`,fontWeight:t?600:400},children:e===`all`?`Tất cả`:Ln[e]},e)})}),(0,q.jsxs)(`div`,{className:`chat-messages`,children:[u&&!a&&(0,q.jsx)(`div`,{className:`chat-messages__load-more`,children:(0,q.jsx)(`button`,{className:`chat-messages__load-more-btn`,onClick:P,disabled:s,children:s?`Đang tải...`:`↑ Tải tin nhắn cũ hơn`})}),a&&(0,q.jsx)(`div`,{style:{padding:24,textAlign:`center`,color:`var(--gray-400)`},children:`Đang tải tin nhắn...`}
5),!a&&L&&(0,q.jsx)(bp,{error:L,onDismiss:ce}),!a&&!L&&r.length===0&&(0,q.jsxs)(`div`,{style:{padding:40,textAlign:`center`,color:`var(--gray-400)`,fontSize:14},children:[(0,q.jsx)(xt,{size:32,style:{margin:`0 auto 12px`,opacity:.5}}),`Chưa có tin nhắn nào`]}),!a&&r.length>0&&ln.length===0&&(0,q.jsx)(`div`,{style:{padding:32,textAlign:`center`,color:`var(--gray-400)`,fontSize:13},children:`Không có mục nào khớp bộ lọc`}),ln.map((e,t)=>{let r=n?.channelAccount?It.find(e=>e.id===n.channelAccount?.id):null,i=n?.channelAccount?.displayName||r?.displayName||me?.fullName||`Staff`,a=r?.avatarUrl||me?.avatarUrl||null;return(0,q.jsx)(mf,{message:e,prevMessage:t>0?ln[t-1]:void 0,selectedConv:n,memberAvatarMap:cn,contactAvatarUrl:n.contact?.avatarUrl,selfUser:{fullName:i,avatarUrl:a},loiChuaGui:oe[e.id],onReply:bn,onUndo:M,onReact:j,onFeedback:Kt},e.id)}),(0,q.jsx)(`div`,{ref:Me})]}),t&&I[t]&&(0,q.jsxs)(`div`,{style:{padding:`4px 16px`,fontSize:12,color:`var(--primary-600, #2563eb)`,display:`flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(`span`,{style:{display:`flex`,gap:3},children:[0,1,2].map(e=>(0,q.jsx)(`span`,{style:{width:4,height:4,borderRadius:`50%`,background:`var(--primary-600, #2563eb)`,display:`inline-block`,animation:`bounce 1.2s ${e*.2}s infinite`}},e))}),`AI đang soạn trả lời...`]}),t&&ne.filter(e=>e.convId===t).length>0&&(0,q.jsxs)(`div`,{style:{padding:`4px 16px`,fontSize:12,color:`var(--gray-400)`,display:`flex`,alignItems:`center`,gap:6},children:[(0,q.jsx)(`span`,{style:{display:`flex`,gap:3},children:[0,1,2].map(e=>(0,q.jsx)(`span`,{style:{width:4,height:4,borderRadius:`50%`,background:`var(--gray-400)`,display:`inline-block`,animation:`bounce 1.2s ${e*.2}s infinite`}},e))}),ne.filter(e=>e.convId===t).map(e=>e.fullName).join(`, `),` đang nhập...`]}),n?.contact&&(0,q.jsxs)(`div`,{className:`chat-tag-bar`,children:[(0,q.jsxs)(`span`,{className:`chat-tag-bar__label`,children:[(0,q.jsx)(se,{size:12}),` Tag:`]}),Jt.map(e=>(0,q.jsxs)(`span`,{className:`chat-tag-bar__tag`,style:{background:Xt(e)+`1a`,color:Xt(e)},children:[e,(0,q.jsx)(`button`,{className:`chat-tag-bar__tag-remove`,onClick:()=>Qt(e),children:`×`})]},e)),(0,q.jsxs)(`div`,{ref:qt,style:{position:`relative`},children:[(0,q.jsx)(`button`,{className:`chat-tag-bar__add`,onClick:()=>Nt(!Mt),children:`+ Thêm tag +`}),Mt&&(0,q.jsx)(`div`,{className:`chat-tag-picker`,children:kt.filter(e=>!Jt.includes(e.name)).length===0?(0,q.jsx)(`div`,{className:`chat-tag-picker__empty`,children:`Không còn nhãn nào để thêm`}):kt.filter(e=>!Jt.includes(e.name)).map(e=>(0,q.jsxs)(`button`,{className:`chat-tag-picker__item`,onClick:()=>Zt(e.name),children:[(0,q.jsx)(`span`,{className:`chat-tag-picker__dot`,style:{background:e.color}}),e.name]},e.id))})]})]}),mt&&(0,q.jsx)(np,{draft:mt.content,confidence:mt.confidence,onSend:async()=>{try{await D(mt.content,Ee?.id,`ai_suggest`),De(null),dt(mt.suggestionId,`sent_as_is`),pe(t)}catch{}},onEdit:e=>{Te(e),vn.current={suggestionId:mt.suggestionId,convId:t},pe(t)},onDismiss:()=>{dt(mt.suggestionId,`dismissed`),pe(t)}}),(0,q.jsx)(Zf,{selectedConv:n,selectedConvId:t,inputText:we,setInputText:Te,replyTo:Ee,setReplyTo:De,sendingMsg:o,handleSend:yn,sendAttachment:O,sendSticker:N,emitTypingStart:F,emitTypingStop:re,tplList:ht,openAiPicker:nn,suggesting:st,showAiPicker:vt,setShowAiPicker:yt,aiSuggestions:bt,aiPickerLoading:Ct,aiPickerError:Et})]}):(0,q.jsx)(`div`,{className:`chat-main chat-main--empty${L?` chat-main--error`:``}`,children:L?(0,q.jsx)(bp,{error:L,onDismiss:ce}):(0,q.jsxs)(`div`,{style:{textAlign:`center`,color:`var(--gray-400)`},children:[(0,q.jsx)(xt,{size:48,style:{margin:`0 auto 16px`,opacity:.3}}),hn.length===0?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{fontSize:16,fontWeight:500},children:`Chưa có cuộc hội thoại nào`}),(0,q.jsx)(`div`,{style:{fontSize:13,marginTop:4},children:`Tin nhắn khách gửi qua Zalo, Zalo OA hoặc Fanpage sẽ hiện ở đây.`})]}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{style:{fontSize:16,fontWeight:500},children:`Chọn cuộc hội thoại`}),(0,q.jsx)(`div`,{style:{fontSize:13,marginTop:4},children:`Chọn từ danh sách bên trái để bắt đầu chat`})]})]})}
5),n&&n.contact&&n.threadType===`group`?(0,q.jsx)(xf,{selectedConv:n,selectedConvId:t,messages:r,togglePin:k}):n&&n.contact?(0,q.jsxs)(`div`,{className:`chat-detail`,children:[(0,q.jsx)(`div`,{className:`chat-detail__tabs`,children:[`info`,`notes`,`files`].map(e=>(0,q.jsx)(`button`,{className:`chat-detail__tab ${Oe===e?`chat-detail__tab--active`:``}`,onClick:()=>ke(e),children:e===`info`?`Thông tin`:e===`notes`?`Ghi chú`:`File`},e))}),Oe===`info`&&(0,q.jsxs)(q.Fragment,{children:[n.contact&&(0,q.jsx)(Iu,{contact:n.contact,variant:`sidebar`,title:`Customer 360`,onContactUpdated:C}),(0,q.jsx)(`div`,{style:{padding:`0 16px`,margin:`16px 0`,paddingBottom:16,borderBottom:`1px solid var(--gray-100)`},children:(0,q.jsxs)(`button`,{className:`chat-detail__profile-btn`,onClick:Ge,style:{width:`100%`,justifyContent:`center`},children:[(0,q.jsx)(qe,{size:14}),` Xem hồ sÆ¡ khách hàng`,rn.length>0&&(0,q.jsxs)(`span`,{style:{padding:`1px 6px`,borderRadius:4,background:`#e0e7ff`,color:`#4f46e5`,fontSize:10,fontWeight:600},children:[(0,q.jsx)(wt,{size:10,style:{marginRight:2}}),rn.length,` gộp`]})]})}),(0,q.jsxs)(`div`,{className:`chat-detail__section`,children:[(0,q.jsxs)(`div`,{className:`chat-detail__section-header`,children:[(0,q.jsx)(`span`,{className:`chat-detail__section-title`,children:`THÔNG TIN`}),n.contact?.zaloUid&&(0,q.jsx)(`button`,{onClick:tn,disabled:$t,title:`Đồng bộ thông tin từ Zalo`,style:{background:`none`,border:`none`,cursor:$t?`wait`:`pointer`,color:$t?`var(--primary)`:`var(--gray-400)`,padding:4,borderRadius:4,display:`flex`,alignItems:`center`,transition:`color 0.15s`},children:(0,q.jsx)(Ye,{size:14,className:$t?`spin`:``})})]}),(0,q.jsxs)(`div`,{className:`chat-detail__info-row`,children:[(0,q.jsx)(z,{size:14,className:`chat-detail__info-icon`}),(0,q.jsx)(`span`,{className:`chat-detail__label`,children:`SĐT`}),U===`phone`?(0,q.jsx)(`input`,{ref:tt,type:`tel`,value:Qe,onChange:e=>et(e.target.value),onBlur:rt,onKeyDown:it,placeholder:`0912 345 678`,style:{marginLeft:`auto`,width:130,fontSize:12,padding:`2px 6px`,border:`1px solid var(--primary)`,borderRadius:4,outline:`none`,background:`var(--primary-bg, #f0f5ff)`,color:`var(--gray-700)`}}):(0,q.jsx)(`span`,{onClick:()=>nt(`phone`),style:{marginLeft:`auto`,cursor:`pointer`,fontSize:12,color:n.contact.phone?`#2563eb`:`var(--gray-400)`,padding:`2px 6px`,borderRadius:4,transition:`background 0.15s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,title:`Nhấn để sá»­a`,children:pn(n.contact.phone)||`Chưa có`})]}),(0,q.jsxs)(`div`,{className:`chat-detail__info-row`,children:[(0,q.jsx)($e,{size:14,className:`chat-detail__info-icon`}),(0,q.jsx)(`span`,{className:`chat-detail__label`,children:`Email`}),U===`email`?(0,q.jsx)(`input`,{ref:tt,type:`email`,value:Qe,onChange:e=>et(e.target.value),onBlur:rt,onKeyDown:it,placeholder:`[email protected]`,style:{marginLeft:`auto`,width:160,fontSize:12,padding:`2px 6px`,border:`1px solid var(--primary)`,borderRadius:4,outline:`none`,background:`var(--primary-bg, #f0f5ff)`,color:`var(--gray-700)`}}):(0,q.jsx)(`span`,{onClick:()=>nt(`email`),style:{marginLeft:`auto`,cursor:`pointer`,fontSize:12,color:n.contact.email?`var(--gray-700)`:`var(--gray-400)`,padding:`2px 6px`,borderRadius:4,transition:`background 0.15s`},onMouseEnter:e=>e.currentTarget.style.background=`var(--gray-50)`,onMouseLeave:e=>e.currentTarget.style.background=`transparent`,title:`Nhấn để sá»­a`,children:n.contact.email||`Chưa có`})]}),(0,q.jsxs)(`div`,{className:`chat-detail__info-row`,style:{position:`relative`},children:[(0,q.jsx)(Pt,{size:14,className:`chat-detail__info-icon`}),(0,q.jsx)(`span`,{className:`chat-detail__label`,children:`Công ty`}),(0,q.jsx)(mu,{value:n.contact.companyId||null,displayName:n.contact.company?.name||null,onChange:Je,compact:!0})]}),Jt.length>0&&(0,q.jsxs)(`div`,{className:`chat-detail__info-row`,style:{flexWrap:`wrap`},children:[(0,q.jsx)(se,{size:14,className:`chat-detail__info-icon`}),(0,q.jsx)(`span`,{className:`chat-detail__label`,children:`Tag`}),(0,q.jsx)(`div`,{style:{marginLeft:`auto`,display:`flex`,gap:4,flexWrap:`wrap`},children:Jt.map(e=>(0,q.jsx)(`span`,{style:{display:`inline-flex`,padding:`1px 8px`,borderRadius:10,fontSize:11,fontWeight:500,background:Xt(e)+`1a`,color:Xt(e)},children:e},e))})]})]}),(0,q.jsx)(lp,{contactId:n.contact?.id}
5),(0,q.jsx)(cp,{contactId:n.contact?.id}),n.contact?.id&&(0,q.jsx)(`div`,{className:`detail-section`,children:(0,q.jsx)(Xu,{contactId:n.contact.id})})]}),Oe===`notes`&&(0,q.jsx)(ip,{contactId:n.contact?.id}),Oe===`files`&&(0,q.jsx)(op,{convId:t,messages:r})]}):null]})]}),Sn&&(()=>{let t=e.find(e=>e.id===Sn.id);return t?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`conv-menu__overlay`,onClick:()=>Cn(null)}),(0,q.jsx)(`div`,{className:`conv-menu`,style:{top:Sn.y,left:Sn.x},role:`menu`,children:xn&&(0,q.jsxs)(`button`,{className:`conv-menu__item conv-menu__item--danger`,role:`menuitem`,onClick:()=>Tn(t),children:[(0,q.jsx)(R,{size:14}),` Xóa hội thoại`]})})]}):null})(),(0,q.jsx)(Ed,{}),(0,q.jsx)(vd,{open:ze,contact:Ve,onClose:()=>{Be(!1),Ue(null)},onSave:Ke,onDelete:at}),Wt&&(0,q.jsx)(yf,{conversationId:t??void 0,messageId:Wt.id,messagePreview:Wt.content??void 0,onClose:()=>Kt(null),onProposeFix:(e,n)=>{let r=Wt.id;Kt(null),V(`/ai/improvements`,{state:{seedText:e,conversationId:t,messageId:r,seedFeedbackId:n}})}})]})}function Gp(e){let t=(e??``).replace(/\([^)]*\)/g,` `).trim().split(/\s+/).filter(Boolean);return t.length===0?`?`:t.slice(-2).map(e=>e[0]).join(``).toUpperCase()}function Kp({name:e,url:t,small:n}){let r=t?Rn(t):null;return(0,q.jsx)(`span`,{className:`m-avatar${n?` m-avatar--sm`:``}`,children:r?(0,q.jsx)(`img`,{src:r,alt:``,onError:e=>{e.currentTarget.style.display=`none`}}):Gp(e)})}function qp(e){if(!e)return``;let t=new Date(e).getTime();if(Number.isNaN(t))return``;let n=Math.floor((Date.now()-t)/1e3);return n<60?`vừa xong`:n<3600?`${Math.floor(n/60)} phút`:n<86400?`${Math.floor(n/3600)} giờ`:n<172800?`Hôm qua`:new Date(t).toLocaleDateString(`vi-VN`,{day:`2-digit`,month:`2-digit`})}function Jp(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?``:t.toLocaleTimeString(`vi-VN`,{hour:`2-digit`,minute:`2-digit`})}function Yp(e,t){switch(e){case`image`:return`📷 Hình ảnh`;case`sticker`:return`🎯 Sticker`;case`file`:return`📎 File`;case`video`:return`🎬 Video`;case`voice`:return`🎤 Tin thoại`;case`link`:return`🔗 Liên kết`;case`call`:return`📞 Cuộc gọi`;case`call_log`:return Xp(t);default:return(t??``).trim()||`Chưa có tin nhắn`}}function Xp(e){try{let t=JSON.parse(e??``);return t&&typeof t==`object`&&t.status===`missed`?`📞 Cuộc gọi nhỡ`:`📞 Cuộc gọi`}catch{return`📞 Cuộc gọi`}}var Zp={subscriber:`Đăng ký`,lead:`Lead`,qualified:`Đủ điều kiện`,opportunity:`Cơ hội`,customer:`Khách hàng`,evangelist:`Đại sứ`,churned:`Rời bỏ`};function Qp({stage:e}){return e?(0,q.jsx)(`span`,{className:`m-chip m-chip--${e}`,children:Zp[e]??e}):null}function $p({title:e,sub:t,onBack:n,right:r}){return(0,q.jsxs)(`header`,{className:`m-head`,children:[n&&(0,q.jsx)(`button`,{type:`button`,className:`m-head__back`,onClick:n,"aria-label":`Quay lại`,children:(0,q.jsx)(`span`,{"aria-hidden":!0,style:{fontSize:20,lineHeight:1},children:`‹`})}),(0,q.jsxs)(`div`,{className:`m-head__main`,children:[(0,q.jsx)(`div`,{className:`m-head__title`,children:e}),t&&(0,q.jsx)(`div`,{className:`m-head__sub`,children:t})]}),r]})}function em({rows:e=5}){return(0,q.jsx)(`div`,{className:`m-skeleton`,"aria-busy":`true`,"aria-label":`Đang tải`,children:Array.from({length:e},(e,t)=>(0,q.jsx)(`div`,{className:`m-skeleton__row`},t))})}function tm({icon:e,title:t,text:n,reason:r,onRetry:i}){return(0,q.jsxs)(`div`,{className:`m-empty`,children:[e&&(0,q.jsx)(`div`,{className:`m-empty__icon`,children:e}),(0,q.jsx)(`p`,{className:`m-empty__title`,children:t}),n&&(0,q.jsx)(`p`,{className:`m-empty__text`,children:n}),r&&(0,q.jsx)(`span`,{className:`m-empty__who`,children:r}),i&&(0,q.jsx)(`div`,{children:(0,q.jsx)(`button`,{type:`button`,className:`m-empty__retry`,onClick:i,children:`Thử lại`})})]})}function nm({mien:e,ten:t,children:n}){let{thay:r}=qn();return r(e)?(0,q.jsx)(q.Fragment,{children:n}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)($p,{title:t}),(0,q.jsx)(`div`,{className:`m-body`,children:(0,q.jsx)(tm,{icon:(0,q.jsx)(He,{size:40,strokeWidth:1.4}),title:`Bạn không có quyền xem mục này`,text:`Phần “${t}” không nằm trong quyền của bạn. Dữ liệu vẫn còn nguyên — chỉ là bạn chưa được mở.`,reason:`Nhờ chủ công ty hoặc quản trị viên mở quyền nếu bạn cần dùng.`})})]})}var rm=Y(()=>l(()=>import(`./PlatformSetupPage-BlIAxTcj.js`),__vite__mapDeps([2,1,3,4,5,6]))),im=Y(()=>l(()=>import(`./PlatformLoginPage-CDAR8m-J.js`),__vite__mapDeps([7,1,3,4,5,6]))),am=Y(()=>l(()=>import(`./PlatformDashboardPage-C5tH5Jhx.js`),__vite__mapDeps([8,1,3,4,5,6,9,10]))),om=Y(()=>l(()=>import(`./OrgsPage-BycNBRYv.js`),__vite__mapDeps([11,1,3,4,5,6,12,10]))),sm=Y(()=>l(()=>import(`./OrgDetailPage-Cs-t4c3t.js`),__vite__mapDeps([13,1,3,4,5,6,14,12,15,10,16]))),cm=Y(()=>l(()=>import(`./PlatformBrandingPage-C0-oOEQi.js`),__vite__mapDeps([17,1,4,5,6,9]))),lm=Y(()=>l(()=>
5import(`./PlatformEmailPage-DOGfunFl.js`),__vite__mapDeps([18,1,4,5,6,9]))),um=Y(()=>l(()=>import(`./PlatformConfigPage-BXLarL2i.js`),__vite__mapDeps([19,1,3,4,5,6,9]))),dm=Y(()=>l(()=>import(`./PlansPage-CXvn98dX.js`),__vite__mapDeps([20,1,4,5,6,14,16]))),fm=Y(()=>l(()=>import(`./InvoicesPage-BWBt3sW-.js`),__vite__mapDeps([21,1,4,5,6,15,16]))),pm=Y(()=>l(()=>import(`./IpnLogPage-BAWvnQi5.js`),__vite__mapDeps([22,1,4,5,6,15,16]))),mm=Y(()=>l(()=>import(`./AuditLogPage-BgGe4dtq.js`),__vite__mapDeps([23,1,3,4,5,6,15,16]))),hm=Y(()=>l(()=>import(`./FinancePage-B-_O-Eu8.js`),__vite__mapDeps([24,1,3,4,5,6,15,16]))),gm=Y(()=>l(()=>import(`./AffiliatePage-CQZTyo1i.js`),__vite__mapDeps([25,1,3,4,5,6,15,16]))),_m=Y(()=>l(()=>import(`./CustomersPage-Dr1aHQpU.js`),__vite__mapDeps([26,1,3,4,5,6,9,27,28,29,30]))),vm=Y(()=>l(()=>import(`./DuplicateContactsPage--GsO4Yzk.js`),__vite__mapDeps([31,1,3,4,5,6,29,32]))),ym=Y(()=>l(()=>import(`./PhoneExtractPage-LOX0qtjw.js`),__vite__mapDeps([33,1,3,4,5,6,9,34]))),bm=Y(()=>l(()=>import(`./AnalyticsPage-B45PQlyj.js`),__vite__mapDeps([35,1,3,4,5,6,9,36,37,38]))),xm=Y(()=>l(()=>import(`./AutomationPage-CKHFcd6f.js`),__vite__mapDeps([39,1,3,4,5,6,40,9,38]))),Sm=Y(()=>l(()=>import(`./AutomationFlowPage-DJBiqArZ.js`),__vite__mapDeps([41,1,3,4,5,6,42,43,9,44,45,40,36,29,46,47]))),Cm=Y(()=>l(()=>import(`./IntegrationsPage-EMvIZqYf.js`),__vite__mapDeps([48,1,3,4,5,6,9,27,28,49,50,51,38]))),wm=Y(()=>l(()=>import(`./SettingsPage-hPtFoGHh.js`),__vite__mapDeps([52,1,3,4,5,6,9,53,27,28,49,50,29,46,14,37,54,38]))),Tm=Y(()=>l(()=>import(`./ZnsCampaignsPage-BqJhlsay.js`),__vite__mapDeps([55,1,4,5,6,9,56,29,57,58]))),Em=Y(()=>l(()=>import(`./AiWorkspacePage-DzN_mYJm.js`),__vite__mapDeps([59,1,3,4,5,6,9,60,61,37,62,38]))),Dm=Y(()=>l(()=>import(`./FollowUpPage-CsV_nDMH.js`),__vite__mapDeps([63,1,4,5,6,9,64]))),Om=Y(()=>l(()=>import(`./ProductKnowledgePage-ClnG1mqg.js`),__vite__mapDeps([65,1,3,4,5,6,9,60,50,38]))),km=Y(()=>l(()=>import(`./QuotesPage-Cr9qmnEA.js`),__vite__mapDeps([66,1,3,4,5,6,37]))),Am=Y(()=>l(()=>import(`./TasksPage-Dp7gWHVq.js`),__vite__mapDeps([67,1,3,4,5,6,9,28,68]))),jm=Y(()=>l(()=>import(`./PositionMapPage-Brv_WX1s.js`),__vite__mapDeps([69,1,4,5,6,42,43,9,44,28,70]))),Mm=Y(()=>l(()=>import(`./MarketingPage-B9iit_ZQ.js`),__vite__mapDeps([71,1,3,4,5,6,9,72,50,73]))),Nm=Y(()=>l(()=>import(`./PublicQuotePage-IUYdYk2n.js`),__vite__mapDeps([74,1,3,4,5,6,75]))),Pm=Y(()=>l(()=>import(`./PrivacyPage-C1QlXKkm.js`),__vite__mapDeps([76,1,6,4,5,77,78]))),Fm=Y(()=>l(()=>import(`./TermsPage-CeqUsynE.js`),__vite__mapDeps([79,1,6,4,5,77,78]))),Im=Y(()=>l(()=>import(`./DataDeletionPage-CPxSPeSp.js`),__vite__mapDeps([80,1,6,4,5,77,78]))),Lm=Y(()=>l(()=>import(`./PublicContractPage-3j60mtS7.js`),__vite__mapDeps([81,1,3,4,5,6,82]))),Rm=Y(()=>l(()=>import(`./ForgotPasswordPage-nk9CvskJ.js`),__vite__mapDeps([83,1,3,4,5,6,9,84]))),zm=Y(()=>l(()=>import(`./ResetPasswordPage-DpjyhiYP.js`),__vite__mapDeps([85,1,3,4,5,6,9,84]))),Bm=Y(()=>l(()=>import(`./SignupPage-X0aJ9OM4.js`),__vite__mapDeps([86,1,3,4,5,6,9,84]))),Vm=Y(()=>l(()=>import(`./VerifyEmailPage-CpK5zTE1.js`),__vite__mapDeps([87,1,3,4,5,6,9,84]))),Hm=Y(()=>l(()=>Promise.resolve().then(()=>Pc),void 0)),Um=Y(()=>l(()=>import(`./NotFoundPage-LC6nz8KG.js`),__vite__mapDeps([88,1,3,4,5,6]))),Wm=Y(()=>l(()=>import(`./MobileLayout-DndKo7Au.js`),__vite__mapDeps([89,1,3,4,5,6,90,9,91]))),Gm=Y(()=>l(()=>import(`./MInbox-Bq-PaoyP.js`),__vite__mapDeps([92,1,3,4,5,6]))),Km=Y(()=>l(()=>import(`./MThread-H9WBQBcd.js`),__vite__mapDeps([93,1,3,4,5,6]))),qm=Y(()=>l(()=>import(`./MCustomers-HTrOZAWu.js`),__vite__mapDeps([94,1,3,4,5,6,29]))),Jm=Y(()=>l(()=>import(`./MToday-BcXPlOUf.js`),__vite__mapDeps([95,1,3,4,5,6,90,9]))),Ym=Y(()=>l(()=>import(`./MMe-DNCw5d8M.js`),__vite__mapDeps([96,1,6,4,5]))),Xm=Y(()=>l(()=>import(`./MAddCustomer-C0PKyc6m.js`),__vite__mapDeps([97,1,3,4,5,6]))),Zm=Y(()=>l(()=>import(`./MNewQuote-CnABaYRZ.js`),__vite__mapDeps([98,1,3,4,5,6,9,60,29]))),Qm=Y(()=>l(()=>import(`./MHub-CcpOYUvm.js`),__vite__mapDeps([99,1,3,4,5,6]))),$m=Y(()=>l(()=>
5import(`./MDashboard-BKQobFuk.js`),__vite__mapDeps([100,1,3,4,5,6]))),eh=Y(()=>l(()=>import(`./MApprovals-gWn0Yx4R.js`),__vite__mapDeps([101,1,4,5,6,9,61]))),th=Y(()=>l(()=>import(`./MAutomation-BTDhB7Wy.js`),__vite__mapDeps([102,1,4,5,6,45,40,9]))),nh=Y(()=>l(()=>import(`./MMarketing-fECFWjdz.js`),__vite__mapDeps([103,1,4,5,6,72,9]))),rh=Y(()=>l(()=>import(`./MCustomer360-BdxUuc43.js`),__vite__mapDeps([104,1,3,4,5,6,53,36,9,29]))),ih=Y(()=>l(()=>import(`./MProducts-CXK-a7ef.js`),__vite__mapDeps([105,1,4,5,6,60,9]))),ah=Y(()=>l(()=>import(`./MKnowledge-WtMpv2Sa.js`),__vite__mapDeps([106,1,4,5,6,60,9]))),oh=Y(()=>l(()=>import(`./MZns-CoCOIrz9.js`),__vite__mapDeps([107,1,4,5,6,56,9]))),sh=Y(()=>l(()=>import(`./MNotifications-BwCY9OrP.js`),__vite__mapDeps([108,1,3,4,5,6,9]))),ch=Y(()=>l(()=>import(`./MNewTask-DSm0Ie5u.js`),__vite__mapDeps([109,1,3,4,5,6,9,28,29,90]))),lh=Y(()=>l(()=>import(`./MQuotes-Dn0EJuaE.js`),__vite__mapDeps([110,1,3,4,5,6,9,37]))),$=(0,q.jsx)(`div`,{style:{display:`flex`,justifyContent:`center`,alignItems:`center`,height:`60vh`,opacity:.5},children:(0,q.jsx)(`div`,{className:`spinner`})});function uh(){return(0,q.jsx)(X,{context:`app-root`,children:(0,q.jsxs)(h,{children:[(0,q.jsx)(p,{path:`/`,element:(0,q.jsx)(xc,{})}),(0,q.jsx)(p,{path:`/login`,element:(0,q.jsx)(Ec,{})}),(0,q.jsx)(p,{path:`/signup`,element:(0,q.jsx)(X,{context:`signup`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Bm,{})})})}),(0,q.jsx)(p,{path:`/verify-email/:token`,element:(0,q.jsx)(X,{context:`verify-email`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Vm,{})})})}),(0,q.jsx)(p,{path:`/forgot-password`,element:(0,q.jsx)(X,{context:`forgot-password`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Rm,{})})})}),(0,q.jsx)(p,{path:`/reset-password/:token`,element:(0,q.jsx)(X,{context:`reset-password`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(zm,{})})})}),(0,q.jsx)(p,{path:`/c/:token`,element:(0,q.jsx)(X,{context:`public-contract`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Lm,{})})})}),(0,q.jsx)(p,{path:`/q/:token`,element:(0,q.jsx)(X,{context:`public-quote`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Nm,{})})})}),(0,q.jsx)(p,{path:`/privacy`,element:(0,q.jsx)(X,{context:`privacy`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Pm,{})})})}),(0,q.jsx)(p,{path:`/terms`,element:(0,q.jsx)(X,{context:`terms`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Fm,{})})})}),(0,q.jsx)(p,{path:`/data-deletion`,element:(0,q.jsx)(X,{context:`data-deletion`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Im,{})})})}),(0,q.jsxs)(p,{element:(0,q.jsx)(dc,{children:(0,q.jsx)(lc,{})}),children:[(0,q.jsx)(p,{path:`/dashboard/*`,element:(0,q.jsx)(X,{context:`dashboard`,children:(0,q.jsx)(Gl,{})})}),(0,q.jsx)(p,{path:`/conversations`,element:(0,q.jsx)(X,{context:`conversations`,children:(0,q.jsx)(Wp,{})})}),(0,q.jsx)(p,{path:`/customers/duplicates`,element:(0,q.jsx)(X,{context:`duplicates`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(vm,{})})})}),(0,q.jsx)(p,{path:`/customers/extract-phones`,element:(0,q.jsx)(X,{context:`extract-phones`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(ym,{})})})}),(0,q.jsx)(p,{path:`/customers/:tab?`,element:(0,q.jsx)(X,{context:`customers`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(_m,{})})})}),(0,q.jsx)(p,{path:`/appointments`,element:(0,q.jsx)(u,{to:`/dashboard/appointments`,replace:!0})}),(0,q.jsx)(p,{path:`/appointments/:filter`,element:(0,q.jsx)(u,{to:`/dashboard/appointments`,replace:!0})}),(0,q.jsx)(p,{path:`/analytics/:tab?`,element:(0,q.jsx)(X,{context:`analytics`,children:(0,q.jsx)(Lc,{feature:`cdp`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(bm,{})})})})}),(0,q.jsx)(p,{path:`/automation/:tab?`,element:(0,q.jsx)(X,{context:`automation`,children:(0,q.jsx)(Lc,{feature:`automation`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(xm,{})})})})}),(0,q.jsx)(p,{path:`/zns-campaigns`,element:(0,q.jsx)(X,{context:`zns-campaigns`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Tm,{})})})}),(0,q.jsx)(p,{path:`/integrations/:tab?`,element:(0,q.jsx)(Sc,{children:(0,q.jsx)(X,{context:`integrations`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Cm,{})})})})}),(0,q.jsx)(p,{path:`/ai/:tab?`,element:(0,q.jsx)(Sc,{children:(0,q.jsx)(X,{context:`ai-workspace`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Em,{})})})})}),(0,q.jsx)(p,{path:`/knowledge-base/:tab?`,element:(0,q.jsx)(X,{context:`knowledge-base`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Om,{})})})}),(0,q.jsx)(p,{path:`/tasks`,element:(0,q.jsx)(X,{context:`tasks`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Am,{})})})}),(0,q.jsx)(p,{path:`/positions`,element:(0,q.jsx)(X,{context:`positions`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(jm,{})})})}),(0,q.jsx)(p,{path:`/followup`,element:(0,q.jsx)(X,{context:`followup`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Dm,{})})})}),(0,q.jsx)(p,{path:`/quotes`,element:(0,q.jsx)(X,{context:`quotes`,children:(0,q.jsx)(Lc,{feature:`quotes`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(km,{})})})})}),(0,q.jsx)(p,{path:`/marketing/:tab?`,element:(0,q.jsx)(X,{context:`marketing`,children:(0,q.jsx)(Rc,{domain:`marketing`,children:(0,q.jsx)(Lc,{feature:`marketing`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Mm,{})})})})})}),(0,q.jsx)(p,{path:`/ai-improvements`,element:(0,q.jsx)(u,{to:`/ai/improvements`,replace:!0})}),(0,q.jsx)(p,{path:`/ai-logs`,element:(0,q.jsx)(u,{to:`/ai/logs`,replace:!0})}),(0,q.jsx)(p,{path:`/settings/ai-config`,element:(0,q.jsx)(u,{to:`/ai/config`,replace:!0})}),(0,q.jsx)(p,{path:`/settings/ai-logic-docs`,element:(0,q.jsx)(u,{to:`/ai/logic-docs`,replace:!0})}),(0,q.jsx)(p,{path:`/settings/ai-knowledge`,element:(0,q.jsx)(u,{to:`/ai/knowledge`,replace:!0})}),(0,q.jsx)(p,{path:`/settings/:tab?`,element:(0,q.jsx)(X,{context:`settings`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(wm,{})})})}),(0,q.jsx)(p,{path:`/upgrade`,element:(0,q.jsx)(X,{context:`upgrade`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Hm,{})})})}),(0,q.jsx)(p,{path:`*`,element:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Um,{})})})]}),(0,q.jsxs)(p,{element:(0,q.jsx)(bc,{children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Wm,{})})}),children:[(0,q.jsx)(p,{path:`/m`,element:(0,q.jsx)(X,{context:`m-inbox`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Gm,{})})})}),(0,q.jsx)(p,{path:`/m/chat/:id`,element:(0,q.jsx)(X,{context:`m-thread`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Km,{})})})}),(0,q.jsx)(p,{path:`/m/customers/new`,element:(0,q.jsx)(X,{context:`m-add-customer`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`contacts`,ten:`Thêm khách hàng`,children:(0,q.jsx)(Xm,{})})})})}),(0,q.jsx)(p,{path:`/m/quotes/new`,element:(0,q.jsx)(X,{context:`m-new-quote`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`quotes`,ten:`Tạo báo giá`,children:(0,q.jsx)(Zm,{})})})})}),(0,q.jsx)(p,{path:`/m/hub`,element:(0,q.jsx)(X,{context:`m-hub`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Qm,{})})})}),(0,q.jsx)(p,{path:`/m/dashboard`,element:(0,q.jsx)(X,{context:`m-dashboard`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`dashboard`,ten:`Số liệu`,children:(0,q.jsx)($m,{})})})})}),(0,q.jsx)(p,{path:`/m/approvals`,element:(0,q.jsx)(X,{context:`m-approvals`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`ai_config`,ten:`Duyệt hành động AI`,children:(0,q.jsx)(eh,{})})})})}),(0,q.jsx)(p,{path:`/m/automation`,element:(0,q.jsx)(X,{context:`m-automation`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`automation`,ten:`Kịch bản tự động`,children:(0,q.jsx)(th,{})})})})}),(0,q.jsx)(p,{path:`/m/marketing`,element:(0,q.jsx)(X,{context:`m-marketing`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`marketing`,ten:`Bài đăng`,children:(0,q.jsx)(nh,{})})})})}),(0,q.jsx)(p,{path:`/m/products`,element:(0,q.jsx)(X,{context:`m-products`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`products`,ten:`Sản phẩm & giá`,children:(0,q.jsx)(ih,{})})})})}),(0,q.jsx)(p,{path:`/m/knowledge`,element:(0,q.jsx)(X,{context:`m-knowledge`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`knowledge`,ten:`Kiến thức`,children:(0,q.jsx)(ah,{})})})})}),(0,q.jsx)(p,{path:`/m/zns`,element:(0,q.jsx)(X,{context:`m-zns`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`zns_campaign`,ten:`Chiến dịch ZNS`,children:(0,q.jsx)(oh,{})})})})}),(0,q.jsx)(p,{path:`/m/notifications`,element:(0,q.jsx)(X,{context:`m-notifications`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(sh,{})})})}),(0,q.jsx)(p,{path:`/m/tasks/new`,element:(0,q.jsx)(X,{context:`m-new-task`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`appointments`,ten:`Ghi việc cần làm`,children:(0,q.jsx)(ch,{})})})})}),(0,q.jsx)(p,{path:`/m/quotes`,element:(0,q.jsx)(X,{context:`m-quotes`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`quotes`,ten:`Báo giá & Hợp đồng`,children:(0,q.jsx)(lh,{})})})})}),(0,q.jsx)(p,{path:`/m/customers/:id`,element:(0,q.jsx)(X,{context:`m-customer-360`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(nm,{mien:`contacts`,ten:`Khách hàng`,children:(0,q.jsx)(rh,{})})})})}),(0,q.jsx)(p,{path:`/m/customers`,element:(0,q.jsx)(X,{context:`m-customers`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(qm,{})})})}),(0,q.jsx)(p,{path:`/m/today`,element:(0,q.jsx)(X,{context:`m-today`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Jm,{})})})}),(0,q.jsx)(p,{path:`/m/me`,element:(0,q.jsx)(X,{context:`m-me`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Ym,{})})})}),(0,q.jsx)(p,{path:`/m/*`,element:(0,q.jsx)(u,{to:`/m`,replace:!0})})]}),(0,q.jsx)(p,{element:(0,q.jsx)(dc,{children:(0,q.jsx)(o,{})}),children:(0,q.jsx)(p,{path:`/automation/flow/:ruleId`,element:(0,q.jsx)(X,{context:`automation-flow`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(Sm,{})})})})}),(0,q.jsx)(p,{path:`/platform/*`,element:(0,q.jsx)(Kc,{children:(0,q.jsxs)(h,{children:[(0,q.jsx)(p,{path:`setup`,element:(0,q.jsx)(X,{context:`platform-setup`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(rm,{})})})}),(0,q.jsx)(p,{path:`login`,element:(0,q.jsx)(X,{context:`platform-login`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(im,{})})})}),(0,q.jsxs)(p,{element:(0,q.jsx)(Jc,{children:(0,q.jsx)(Xc,{})}),children:[(0,q.jsx)(p,{index:!0,element:(0,q.jsx)(X,{context:`platform-dashboard`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(am,{})})})}),(0,q.jsx)(p,{path:`companies`,element:(0,q.jsx)(X,{context:`platform-companies`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(om,{})})})}),(0,q.jsx)(p,{path:`companies/:orgId`,element:(0,q.jsx)(X,{context:`platform-company-detail`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(sm,{})})})}),(0,q.jsx)(p,{path:`plans`,element:(0,q.jsx)(X,{context:`platform-plans`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(dm,{})})})}),(0,q.jsx)(p,{path:`invoices`,element:(0,q.jsx)(X,{context:`platform-invoices`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(fm,{})})})}),(0,q.jsx)(p,{path:`ipn-logs`,element:(0,q.jsx)(X,{context:`platform-ipn-logs`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(pm,{})})})}),(0,q.jsx)(p,{path:`audit-logs`,element:(0,q.jsx)(X,{context:`platform-audit-logs`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(mm,{})})})}),(0,q.jsx)(p,{path:`finance`,element:(0,q.jsx)(X,{context:`platform-finance`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(hm,{})})})}),(0,q.jsx)(p,{path:`affiliate`,element:(0,q.jsx)(X,{context:`platform-affiliate`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(gm,{})})})}),(0,q.jsx)(p,{path:`branding`,element:(0,q.jsx)(X,{context:`platform-branding`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(cm,{})})})}),(0,q.jsx)(p,{path:`email`,element:(0,q.jsx)(X,{context:`platform-email`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(lm,{})})})}),(0,q.jsx)(p,{path:`config`,element:(0,q.jsx)(X,{context:`platform-config`,children:(0,q.jsx)(K.Suspense,{fallback:$,children:(0,q.jsx)(um,{})})})})]}),(0,q.jsx)(p,{path:`*`,element:(0,q.jsx)(u,{to:`/platform`,replace:!0})})]})})})]})})}var dh=0;function fh(){let[e,t]=(0,K.useState)([]),n=(0,K.useCallback)(e=>{let{message:n,type:r,duration:i=5e3}=e.detail,a=++dh;t(e=>[...e,{id:a,message:n,type:r}]),setTimeout(()=>{t(e=>e.map(e=>e.id===a?{...e,removing:!0}:e))},i-300),setTimeout(()=>{t(e=>e.filter(e=>e.id!==a))},i)},[]);if((0,K.useEffect)(()=>(window.addEventListener(`app:toast`,n),()=>window.removeEventListener(`app:toast`,n)),[n]),e.length===0)return null;let r={success:{bg:`#f0fdf4`,border:`#bbf7d0`,text:`#16a34a`,icon:`✓`},error:{bg:`#fef2f2`,border:`#fecaca`,text:`#dc2626`,icon:`✕`},info:{bg:`#eff6ff`,border:`#bfdbfe`,text:`#2563eb`,icon:`ℹ`},warning:{bg:`#fffbeb`,border:`#fde68a`,text:`#d97706`,icon:`⚠`}};return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`style`,{children:`
6        @keyframes globalToastSlideIn {
7          from { transform: translateX(100%); opacity: 0; }
8          to   { transform: translateX(0);    opacity: 1; }
9        }
10        @keyframes globalToastFadeOut {
11          from { transform: translateX(0);    opacity: 1; }
12          to   { transform: translateX(100%); opacity: 0; }
13        }
14      `}),(0,q.jsx)(`div`,{style:{position:`fixed`,top:20,right:20,zIndex:99999,display:`flex`,flexDirection:`column`,gap:8,maxWidth:420,pointerEvents:`none`},children:e.map(e=>{let n=r[e.type];return(0,q.jsxs)(`div`,{style:{background:n.bg,border:`1px solid ${n.border}`,borderRadius:10,padding:`12px 18px`,fontSize:13,color:n.text,display:`flex`,alignItems:`flex-start`,gap:8,boxShadow:`0 4px 20px rgba(0,0,0,0.12)`,animation:e.removing?`globalToastFadeOut 0.3s ease-in forwards`:`globalToastSlideIn 0.3s ease-out`,pointerEvents:`auto`,cursor:`pointer`},onClick:()=>t(t=>t.filter(t=>t.id!==e.id)),children:[(0,q.jsx)(`span`,{style:{fontWeight:700,fontSize:15,flexShrink:0},children:n.icon}),(0,q.jsx)(`span`,{style:{lineHeight:1.4,wordBreak:`break-word`},children:e.message})]},e.id)})})]})}Bn.createRoot(document.getElementById(`root`)).render((0,q.jsx)(K.StrictMode,{children:(0,q.jsx)(i,{locale:a,children:(0,q.jsx)(g,{children:(0,q.jsx)(Fr,{children:(0,q.jsxs)(pr,{children:[(0,q.jsx)(uh,{}),(0,q.jsx)(fh,{})]})})})})}));export{xl as $,cu as A,Gi as At,jl as B,xr as Bt,zu as C,Ea as Ct,yu as D,Ki as Dt,_u as E,Hi as Et,Jl as F,Ir as Ft,Dl as G,J as Gt,Ml as H,Cr as Ht,Yl as I,gr as It,Ll as J,Ol as K,lr as Kt,Ql as L,mr as Lt,ou as M,vi as Mt,iu as N,li as Nt,hu as O,qi as Ot,ru as P,Kr as Pt,bl as Q,Bl as R,Tr as Rt,Yu as S,eo as St,vu as T,Wi as Tt,Fl as U,wr as Ut,Nl as V,yr as Vt,Pl as W,vr as Wt,Rl as X,Il as Y,El as Z,fd as _,os as _t,em as a,Lc as at,sd as b,es as bt,Yp as c,Mc as ct,_f as d,kc as dt,Sl as et,pf as f,Oc as ft,ud as g,ns as gt,dd as h,Us as ht,Zp as i,Bc as it,su as j,Ni as jt,pu as k,Ji as kt,qp as l,jc as lt,md as m,gc as mt,tm as n,ll as nt,Qp as o,Ic as ot,vd as p,wc as pt,kl as q,qn as qt,$p as r,qc as rt,Jp as s,Nc as st,Kp as t,cl as tt,yf as u,Ac as ut,od as v,ts as vt,Ru as w,Ui as wt,Qu as x,as as xt,cd as y,is as yt,Al as z,br as zt};

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.