1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/trash-DEYuTNgk.js","assets/index-DUjTBDAw.js"])))=>i.map(i=>d[i]); 2import{as as se,j as e,O as re,u as Y,r as d,s as C,L as J,B as _,av as R,aw as B,ax as M,ay as U,az as O,aA as V,aB as $,aC as H,aD as G,T as te,t as l,an as ne}from"./index-DUjTBDAw.js";import{C as W}from"./card-BaVU7wM7.js";import{I as f}from"./input-D1zqKC5g.js";import{L as h}from"./label-CqjUiLe_.js";import{S as q,a as k,b as S,c as D,d as c}from"./select-TmllBw2C.js";import{D as oe,f as le,a as ie,b as ce,c as de,e as me}from"./dialog-Bdeu2XHV.js";import{B as A}from"./badge-CXzgzJAM.js";import{a as ue,d as he,c as pe}from"./instagram.functions-EFOd17KZ.js";import{p as K}from"./products-NTSUy-AF.js";import{L as E}from"./loader-circle-C_hZKJH-.js";import{U as xe}from"./upload-DOo4EiCG.js";import{P as _e}from"./pencil-8FP54kOY.js";import{P as ge}from"./plus-DgzByaHb.js";import{I as je}from"./instagram-D8J3WiL7.js";import{R as ye}from"./refresh-cw-hxz2bMGg.js";import{U as fe}from"./unplug-CyyT1Vja.js";import{L as ve}from"./link-2-x30y4G5k.js";import{C as Ce}from"./copy-CUr_KiRb.js";import"./index-CmpVwWb7.js";import"./index-CFRUpRML.js";import"./index-CVvrTIwl.js";import"./index-C1bIQB6s.js";import"./chevron-down-0_iIJDrP.js";import"./check-BzGlD8RL.js";import"./x-CQ33KZgR.js";import"./createServerFn-DewbeZsU.js";function Xe(){return se({from:"/_app/clientes/$id",shouldThrow:!1})?e.jsx(re,{}):e.jsx(be,{})}const Q={not_connected:{label:"Não conectado",cls:"bg-slate-100 text-slate-600"},awaiting:{label:"Aguardando conexão",cls:"bg-amber-100 text-amber-700"},connected:{label:"ð¢ Conectado",cls:"bg-emerald-100 text-emerald-700"},expired:{label:"ð´ Token expirado",cls:"bg-red-100 text-red-700"},error:{label:"â ï¸ Erro",cls:"bg-amber-100 text-amber-700"},syncing:{label:"Sincronizandoâ¦",cls:"bg-blue-100 text-blue-700"}};function be(){const{user:a,isAdmin:i,profile:N}
2=Y(),[p,x]=d.useState([]),[m,j]=d.useState([]),[b,y]=d.useState(!0),[v,s]=d.useState(""),[n,w]=d.useState("all"),t=async()=>{let r=C.from("clients").select("*").order("name");!i&&a?.id&&(r=r.eq("analyst_id",a.id));const{data:o}=await r;x(o??[]),y(!1)};d.useEffect(()=>{a&&t()},[a?.id,i]),d.useEffect(()=>{i&&(async()=>{const{data:r}=await C.from("profiles").select("user_id, full_name").order("full_name");j(r??[])})()},[i]);const g=i||!!N?.approved,u=p.filter(r=>{if(i&&n!=="all"){if(n==="unassigned"){if(r.analyst_id)return!1}else if(r.analyst_id!==n)return!1}const o=v.trim().toLowerCase();return o?r.name.toLowerCase().includes(o)||(r.segment??"").toLowerCase().includes(o)||(r.instagram_handle??"").toLowerCase().includes(o)||(r.contact_email??"").toLowerCase().includes(o):!0});return b?e.jsx("div",{className:"flex h-[60vh] items-center justify-center",children:e.jsx(E,{className:"h-6 w-6 animate-spin text-primary"})}):e.jsxs("div",{className:"space-y-6 p-6 lg:p-8",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("div",{children:[e.jsx("h1",{className:"font-display text-3xl font-bold",children:"Clientes"}),e.jsx("p",{className:"mt-1 text-sm text-muted-foreground",children:i?"Gerencie todos os clientes da agência.":"Gerencie os clientes da sua carteira."})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i&&e.jsx(J,{to:"/import-clients",children:e.jsxs(_,{variant:"outline",children:[e.jsx(xe,{className:"mr-2 h-4 w-4"}),"Importação em massa"]})}),g&&e.jsx(X,{onSaved:t})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[e.jsx(f,{placeholder:"Buscar por nome, segmento, @Instagram ou e-mailâ¦",value:v,onChange:r=>s(r.target.value),className:"max-w-md"}),i&&e.jsxs(q,{value:n,onValueChange:w,children:[e.jsx(k,{className:"w-[220px]",children:e.jsx(S,{placeholder:"Filtrar por analista"})}),e.jsxs(D,{children:[e.jsx(c,{value:"all",children:"Todos os analistas"}),e.jsx(c,{value:"unassigned",children:"Sem analista"}),m.map(r=>e.jsx(c,{value:r.user_id,children:r.full_name},r.user_id))]})]}),e.jsxs("span",{className:"text-xs text-muted-foreground",children:[u.length," de ",p.length]})]}),e.jsxs("div",{className:"grid gap-3",children:[u.map(r=>e.jsx(Ne,{client:r,isAdmin:i,currentUserId:a?.id,onChanged:t},r.id)),!u.length&&e.jsx(W,{className:"p-10 text-center text-sm text-muted-foreground",children:p.length?"Nenhum cliente encontrado.":"Nenhum cliente disponÃvel ainda."})]})]})}function Ne({client:a,isAdmin:i,currentUserId:N,onChanged:p}){const[x,m]=d.useState(null),[j,b]=d.useState(null),y=i||a.analyst_id===N,v=a.instagram_status??"not_connected",s=Q[v]??Q.not_connected;async function n(){const{data:r}=await C.auth.getSession();return{Authorization:`Bearer ${r.session?.access_token}`}}async function w(){m("link");try{const r=await n(),o=await pe({data:{clientId:a.id},headers:r});b(o.url),await navigator.clipboard.writeText(o.url).catch(()=>{}),l.success("Link gerado e copiado (válido 7 dias)")}catch(r){l.error(r.message)}finally{m(null)}}async function t(){m("sync");try{const r=await n(),o=await ue({data:{clientId:a.id,daysBack:90},headers:r});l.success(`Sincronizado: ${o.message}`),p()}catch(r){l.error(r.message)}finally{m(null)}}async function g(){m("disc");try{const r=await n();await he({data:{clientId:a.id},headers:r}),l.success("Desconectado"),p()}catch(r){l.error(r.message)}finally{m(null)}}async function u(){try{const{trashClient:r}=await ne(async()=>{const{trashClient:o}=await import("./trash-DEYuTNgk.js");return{trashClient:o}},__vite__mapDeps([0,1]));await r(a.id,a.name),l.success("Cliente movido para a lixeira (15 dias)"),p()}catch(r){l.error(r.message??"Erro ao excluir cliente")}}return e.jsxs(W,{className:"p-4",children:[e.jsxs("div",{className:"flex flex-wrap items-start justify-between gap-3",children:[e.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:[a.logo_url?e.jsx("img",{src:a.logo_url,alt:a.name,className:"h-12 w-12 rounded-lg object-cover"}):e.jsx("div",{className:"flex h-12 w-12 items-center justify-center rounded-lg font-display text-base font-bold text-white",style:{background:a.brand_color_primary??"#1D1E6C"},children:a.name.charAt(0)}),e.jsxs("div",{className:"min-w-0",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx("p",{className:"font-semibold",children:a.name}),e.jsxs(A,{variant:"secondary",className:s.cls,children:[e.jsx(je,{className:"mr-1 h-3 w-3"}),s.label]}),e.jsxs(A,{variant:"outline",className:"text-[10px]",children:["Fonte: ",a.data_source]}),e.jsx(A,{variant:"outline",className:`text-[10px] ${K(a).badgeClass}`,children:K(a).fullLabel}),!y&&e.jsx(A,{variant:"outline",className:"text-[10px]",children:"Outro analista"})]}),e.jsxs("p",{className:"text-xs text-muted-foreground",children:[a.segment??"â",a.instagram_username&&e.jsxs(e.Fragment,{children:[" · @",a.instagram_username]}),a.instagram_last_sync_at&&e.jsxs(e.Fragment,{children:[" · Ãltima sync: ",new Date(a.instagram_last_sync_at).toLocaleStr
2ing("pt-BR")]})]}),a.instagram_last_sync_message&&v!=="connected"&&e.jsxs("p",{className:"mt-1 text-xs text-amber-700",children:["â ",a.instagram_last_sync_message]})]})]}),y&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsx(J,{to:"/clientes/$id",params:{id:a.id},children:e.jsx(_,{size:"sm",children:"Abrir ambiente"})}),v==="connected"?e.jsxs(e.Fragment,{children:[e.jsxs(_,{size:"sm",variant:"outline",onClick:t,disabled:x==="sync",children:[x==="sync"?e.jsx(E,{className:"mr-1.5 h-4 w-4 animate-spin"}):e.jsx(ye,{className:"mr-1.5 h-4 w-4"}),"Sincronizar"]}),i&&e.jsxs(R,{children:[e.jsx(B,{asChild:!0,children:e.jsxs(_,{size:"sm",variant:"outline",children:[e.jsx(fe,{className:"mr-1.5 h-4 w-4"}),"Desconectar"]})}),e.jsxs(M,{children:[e.jsxs(U,{children:[e.jsxs(O,{children:["Desconectar Instagram de ",a.name,"?"]}),e.jsx(V,{children:"O token será removido. Métricas existentes não serão apagadas."})]}),e.jsxs($,{children:[e.jsx(H,{children:"Cancelar"}),e.jsx(G,{onClick:g,children:"Desconectar"})]})]})]})]}):e.jsxs(_,{size:"sm",variant:"outline",onClick:w,disabled:x==="link",children:[x==="link"?e.jsx(E,{className:"mr-1.5 h-4 w-4 animate-spin"}):e.jsx(ve,{className:"mr-1.5 h-4 w-4"}),"Gerar link Instagram"]}),e.jsx(X,{client:a,onSaved:p,isAdmin:i}),i&&e.jsxs(R,{children:[e.jsx(B,{asChild:!0,children:e.jsx(_,{size:"sm",variant:"ghost",className:"text-destructive",children:e.jsx(te,{className:"h-4 w-4"})})}),e.jsxs(M,{children:[e.jsxs(U,{children:[e.jsxs(O,{children:["Excluir ",a.name,"?"]}),e.jsx(V,{children:"Vai para a Lixeira por 15 dias antes da remoção definitiva."})]}),e.jsxs($,{children:[e.jsx(H,{children:"Cancelar"}),e.jsx(G,{onClick:u,children:"Excluir"})]})]})]})]})]}),j&&e.jsxs("div",{className:"mt-3 flex items-center gap-2 rounded-lg bg-slate-50 p-2 text-xs",children:[e.jsx("code",{className:"flex-1 truncate text-slate-700",children:j}),e.jsx(_,{size:"sm",variant:"ghost",onClick:()=>{navigator.clipboard.writeText(j),l.success("Copiado")},children:e.jsx(Ce,{className:"h-3 w-3"})})]})]})}function X({client:a,onSaved:i,isAdmin:N}){const{user:p}
2=Y(),x=!!a,[m,j]=d.useState(!1),[b,y]=d.useState(!1),v=a?.has_creator?"creators":"social_media",[s,n]=d.useState({name:a?.name??"",segment:a?.segment??"",contact_email:a?.contact_email??"",instagram_handle:a?.instagram_handle??"",logo_url:a?.logo_url??"",brand_color_primary:a?.brand_color_primary??"#1D1E6C",brand_color_secondary:a?.brand_color_secondary??"#5F3CC8",data_source:a?.data_source??"manual",product:v,contract_type:a?.contract_type??"pontual",creator_plan:a?.creator_plan??"",hooks_qty:a?.hooks_qty!=null?String(a.hooks_qty):"",scripts_qty:a?.scripts_qty!=null?String(a.scripts_qty):"",creators_qty:a?.creators_qty!=null?String(a.creators_qty):""});d.useEffect(()=>{m&&a&&n({name:a.name,segment:a.segment??"",contact_email:a.contact_email??"",instagram_handle:a.instagram_handle??"",logo_url:a.logo_url??"",brand_color_primary:a.brand_color_primary??"#1D1E6C",brand_color_secondary:a.brand_color_secondary??"#5F3CC8",data_source:a.data_source,product:a.has_creator?"creators":"social_media",contract_type:a.contract_type??"pontual",creator_plan:a.creator_plan??"",hooks_qty:a.hooks_qty!=null?String(a.hooks_qty):"",scripts_qty:a.scripts_qty!=null?String(a.scripts_qty):"",creators_qty:a.creators_qty!=null?String(a.creators_qty):""})},[m,a]);const w=async()=>{if(s.name.trim().length<2)return l.error("Nome muito curto");const t=s.product==="creators";if(t&&!s.creator_plan)return l.error("Selecione o plano do Creator");if(t&&s.creator_plan==="personalizado"&&(!s.hooks_qty.trim()||!s.scripts_qty.trim()||!s.creators_qty.trim()))return l.error("Preencha Hook, Roteiro e Criador para o plano Personalizado");y(!0);const g=r=>r.trim()===""?null:Number(r),u={name:s.name.trim(),segment:s.segment.trim()||null,contact_email:s.contact_email.trim()||null,instagram_handle:s.instagram_handle.trim()||null,logo_url:s.logo_url.trim()||null,brand_color_primary:s.brand_color_primary||null,brand_color_secondary:s.brand_color_secondary||null,data_source:s.data_source,has_social_media:!t,has_creator:t,product_type:"starter",contract_type:s.contract_type,creator_plan:t?s.creator_plan:null,hooks_qty:t?g(s.hooks_qty):null,scripts_qty:t?g(s.scripts_qty):null,creators_qty:t?g(s.creators_qty):null};if(x&&a){const{error:r}=await C.from("clients").update(u).eq("id",a.id);if(y(!1),r)return l.error(r.message);l.success("Cliente atualizado")}else{const r={...u};!N&&p&&(r.analyst_id=p.id);const{data:o,error:I}=await C.from("clients").insert(r).select("id, name").single();if(I)return y(!1),l.error(I.message);const z=t?g(s.creators_qty):null;if(o&&t){const F=new Date,Z=`${F.getFullYear()}-${String(F.getMonth()+1).padStart(2,"0")}-01`,{data:L,error:P}=await C.from("monthly_plans").insert({client_id:o.id,reference_month:Z,expected_posts_count:0,campaign_number:1,campaign_name:"Campanha 1",creator_quantity:z??null}).select("id, campaign_name").single();if(P)l.error("Cliente criado, mas falhou ao criar campanha: "+P.message);else if(L&&z&&z>0){const ee=Array.from({length:z},(we,ae)=>({creator_name:`Creator ${ae+1}`,campaign:L.campaign_name,client_id:o.id,plan_id:L.id,stage:"mapeamento"})),{error:T}=await C.from("creator_kanban_cards").insert(ee);T&&l.error("Cliente criado, mas falhou ao criar cards no Kanban: "+T.message)}}y(!1),l.success("Cliente criado")}j(!1),i()};return e.jsxs(oe,{open:m,onOpenChange:j,children:[e.jsx(le,{asChild:!0,children:x?e.jsxs(_,{size:"sm",variant:"outline",children:[e.jsx(_e,{className:"mr-1.5 h-4 w-4"})," Editar"]}):e.jsxs(_,{children:[e.jsx(ge,{className:"mr-2 h-4 w-4"})," Novo cliente"]})}),e.jsxs(ie,{className:"max-w-2xl max-h-[90vh] overflow-y-auto",children:[e.jsx(ce,{children:e.jsx(de,{children:x?"Editar cliente":"Novo cliente"})}),e.jsxs("div",{className:"grid gap-3 md:grid-cols-2",children:[e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsx(h,{children:"Nome *"}),e.jsx(f,{value:s.name,onChange:t=>n({...s,name:t.target.value})})]}),e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsx(h,{children:"Tipo de contrato *"}),e.jsxs(q,{value:s.contract_type,onValueChange:t=>n({...s,contract_type:t}),children:[e.jsx(k,{children:e.jsx(S,{})}),e.jsxs(D,{children:[e.jsx(c,{value:"pontual",children:"Pontual â
21 campanha"}),e.jsx(c,{value:"recorrente",children:"Recorrente â múltiplas campanhas"})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Pontual permite apenas 1 campanha. Recorrente libera novas campanhas na aba Planejamentos."})]}),e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsx(h,{children:"Produto contratado *"}),e.jsxs(q,{value:s.product,onValueChange:t=>n({...s,product:t,creator_plan:t==="creators"?s.creator_plan:""}),children:[e.jsx(k,{children:e.jsx(S,{})}),e.jsxs(D,{children:[e.jsx(c,{value:"social_media",children:"Social Media"}),e.jsx(c,{value:"creators",children:"Creators"})]})]})]}),s.product==="creators"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsx(h,{children:"Plano *"}),e.jsxs(q,{value:s.creator_plan,onValueChange:t=>{const g={starter:{hooks:"3",scripts:"6",creators:"3"},scale:{hooks:"3",scripts:"8",creators:"4"},enterprise:{hooks:"2",scripts:"12",creators:"8"}};if(t==="personalizado")n({...s,creator_plan:t,hooks_qty:"",scripts_qty:"",creators_qty:""});else{const u=g[t];n({...s,creator_plan:t,hooks_qty:u.hooks,scripts_qty:u.scripts,creators_qty:u.creators})}},children:[e.jsx(k,{children:e.jsx(S,{placeholder:"Selecione o plano"})}),e.jsxs(D,{children:[e.jsx(c,{value:"starter",children:"Starter"}),e.jsx(c,{value:"scale",children:"Scale"}),e.jsx(c,{value:"enterprise",children:"Enterprise"}),e.jsx(c,{value:"personalizado",children:"Personalizado"})]})]})]}),s.creator_plan&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(h,{children:["Hook",s.creator_plan==="personalizado"?" *":""]}),e.jsx(f,{type:"number",min:0,value:s.hooks_qty,onChange:t=>n({...s,hooks_qty:t.target.value}),placeholder:s.creator_plan==="personalizado"?"Ex.: 3":"A definir"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsxs(h,{children:["Roteiro",s.creator_plan==="personalizado"?" *":""]}),e.jsx(f,{type:"number",min:0,value:s.scripts_qty,onChange:t=>n({...s,scripts_qty:t.target.value}),placeholder:s.creator_plan==="personalizado"?"Ex.: 2":"A definir"})]}),e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsxs(h,{children:["Criador",s.creator_plan==="personalizado"?" *":""]}),e.jsx(f,{type:"number",min:0,value:s.creators_qty,onChange:t=>n({...s,creators_qty:t.target.value}),placeholder:s.creator_plan==="personalizado"?"Ex.: 4":"A definir"})]})]})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(h,{children:"Segmento"}),e.jsx(f,{value:s.segment,onChange:t=>n({...s,segment:t.target.value})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(h,{children:"E-mail do responsável"}),e.jsx(f,{type:"email",value:s.contact_email,onChange:t=>n({...s,contact_email:t.target.value})})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(h,{children:"@ do Instagram"}),e.jsx(f,{value:s.instagram_handle,onChange:t=>n({...s,instagram_handle:t.target.value}),placeholder:"@cliente"})]}),e.jsxs("div",{className:"space-y-1.5",children:[e.jsx(h,{children:"Logo (URL)"}),e.jsx(f,{value:s.logo_url,onChange:t=>n({...s,logo_url:t.target.value}),placeholder:"https://..."})]}),e.jsxs("div",{className:"space-y-1.5 md:col-span-2",children:[e.jsx(h,{children:"Fonte de dados"}),e.jsxs(q,{value:s.data_source,onValueChange:t=>n({...s,data_source:t}),children:[e.jsx(k,{children:e.jsx(S,{})}),e.jsxs(D,{children:[e.jsx(c,{value:"manual",children:"Manual â analista preenche tudo"}),e.jsx(c,{value:"instagram",children:"Instagram conectado â automático"}),e.jsx(c,{value:"hybrid",children:"HÃbrido â automático + complemento manual"})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Define como as métricas serão coletadas para este cliente."})]})]}),e.jsxs(me,{children:[e.jsx(_,{variant:"outline",onClick:()=>j(!1),children:"Cancelar"}),e.jsxs(_,{onClick:w,disabled:b,children:[b&&e.jsx(E,{className:"mr-2 h-4 w-4 animate-spin"}),x?"Salvar":"Criar"]})]})]})]})}export{Xe as component};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.