PageSourceSearch

https://paperworld-hamburg.de/assets/CustomersManager-CpRxb9VR.js

js paperworld-hamburg.de collected 2026-10-06 16:37:35 UTC 113,557 bytes, 25 lines download raw bytes

1import{r as h,j as e}from"./vendor-DkvdaZ_o.js";import{D as us,q as hs,r as xs,t as gs,v as Da,R as ye,C as P,g as O,h as U,a as M,aJ as Se,s as S,c0 as Gs,bp as La,av as Ta,V as B,c5 as It,ag as Kt,aY as za,dp as Ba,co as Pa,cx as Ma,bb as Ra,F as Ot,b_ as Ia,bf as Ps,M as Ft,be as Ms,B as L,a6 as Ka,aR as Vt,aS as Oa,aN as Fa,dq as Va,l as j,a7 as me,a8 as ue,a9 as he,aa as xe,ab as $t,ac as C,ad as w,bZ as $a,a$ as Ua,b0 as Ha,p as Za,J as A,K as ks,O as Ie,cS as Wa,a4 as Et,bQ as qa,bx as Ga,d9 as Ya,da as Ja,dr as Qa,dc as Xa,dd as en,de as sn,ds as tn,at as an,m as Ne,dt as Dt,i as Lt,E as As,b as Tt,aj as zt,cR as nn,_ as rn,U as ln,du as cn,dv as dn,I as on,T as mn,c2 as un,d5 as hn,bV as xn,bW as gn}from"./index-D5Z1SVx2.js";import{m as pn,f as fn,n as Es,i as Ds}from"./GirocodeQr-CbbC_oUi.js";import{c as jn,u as _n}from"./router-BgWwGfEz.js";import{T as Rs,a as Is,b as Ke,c as V,d as Ks,e as $}from"./table-DVnncWiR.js";import{A as vn}from"./AdminTableScroll-Cy3NIBj7.js";import{T as Ut,a as Ht,b as ge,c as pe}from"./tabs-CD_1EUsZ.js";import{T as Os}from"./textarea-DW0uU-g8.js";import{C as bn,a as Nn,b as yn}from"./CustomerCorrespondenceTab-A9rwwEGL.js";import{u as Zt}from"./query-BW4_HVfB.js";import{u as wn}from"./useCustomerHistory-BCIi38aK.js";import{A as Fs,a as Vs,b as $s,c as Us,d as Hs,e as Zs,f as Ws,g as qs}from"./alert-dialog-DGqHu1Vb.js";import{u as Cn}from"./usePagination-B-2YEfQX.js";import{P as Sn,a as kn,c as Ls,b as An,d as En,e as Dn}from"./pagination-DpvHOLW3.js";import{O as Ln}from"./OrderDetailsDialog-vdZAWFr6.js";import{C as Tn}from"./CustomerContactsTab-gNqj7Tlh.js";import"./supabase-1Y6IIqT4.js";import"./ui-BEX0hx1v.js";import"./specialPrices-DaD7V189.js";import"./SpecialPriceTierComparison-ByWhfasT.js";import"./useProductAccess-D3QunLPX.js";import"./fileNaming-yLfY4i1v.js";import"./status-BvpQit6K.js";import"./collapsible-vkXbSppY.js";import"./PdfPreviewDialog-4uYNeOv5.js";import"./pdf-dS6wF_D2.js";import"./vatId-4Lje2Vkp.js";import"./OfflineOrderPreviewDialog-Cp90XcCU.js";import"./useDunning-B0QfIf5P.js";import"./BankTransferQrBlock-KqW4LQI6.js";import"./orderSkonto-CXPmeoVa.js";import"./ShipmentDialog-BT4b-HmJ.js";import"./usePurchaseOrders-CKOVe_gP.js";import"./PurchaseOrderDialog-1ChAgssh.js";const G=new Intl.NumberFormat("de-DE");function Ue(n){return`${G.format(Math.round(n*10)/10)}%`}function zn(n){if(!n)return"?";const i=n.trim().toUpperCase();return i==="DEUTSCHLAND"||i==="GERMANY"?"DE":i==="ÖSTERREICH"||i==="OESTERREICH"||i==="AUSTRIA"?"AT":i==="SCHWEIZ"||i==="SWITZERLAND"?"CH":i.length===2?i:i.slice(0,2)}function Bn(n){return n==="DE"?"🇩🇪":n==="AT"?"🇦🇹":n==="CH"?"🇨🇭":n==="?"?"❓":"🌍"}const Ts=1e3;async function ds(n){const i=[];let l=0;for(;;){const{data:g,error:p}=await n().range(l,l+Ts-1);if(p)throw p;const d=g??[];if(i.push(...d),d.length<Ts)break;l+=Ts}return i}async function Pn(){var qe,Ge,Pe;const n=new Date,i=new Date(n.getTime()-30*864e5).toISOString(),l=new Date(n.getTime()-90*864e5).toISOString(),g=new Date(n.getTime()-365*864e5).toISOString(),[p,d,R,_,D]=await Promise.all([ds(()=>S.from("user_profiles").select("id, created_at, company_name, vat_id, is_guest_account, is_active")),ds(()=>S.from("customer_special_prices").select("user_id").eq("is_active",!0).not("user_id","is",null)),ds(()=>S.from("orders").select("id, user_id, guest_email, is_guest_order, subtotal, total_amount, billing_address").neq("status","cancelled")),ds(()=>S.from("user_addresses").select("user_id, country, city, postal_code, is_default").not("user_id","is",null)),S.from("newsletter_subscribers").select("id",{count:"exact",head:!0}).eq("is_active",!0)]),v=p.filter(u=>!u.is_guest_account).length,I=p.filter(u=>u.is_guest_account).length,k=u=>p.filter(b=>!b.is_guest_account&&b.created_at&&b.created_at>=u).length,c=p.filter(u=>{var b,H;return!u.is_guest_account&&(((b=u.company_name)==null?void 0:b.trim())||((H=u.vat_id)==null?void 0:H.trim()))}).length,m=v-c,te=new Set(d.map(u=>u.user_id).filter(Boolean)).size,Y=new Map;let ze=0,Q=0,le=0;for(const u of R){const b=Number(u.subtotal??0);le+=b,u.is_guest_order?ze++:Q++;const H=u.user_id||`guest:${u.guest_email||"?"}`,Me=Y.get(H),Re=((qe=u.billing_address)==null?void 0:qe.company)||[(Ge=u.billing_address)==null?void 0:Ge.first_name,(Pe=u.billing_address)==null?void 0:Pe.last_name].filter(
1Boolean).join(" ")||u.guest_email||"Unbekannt";Me?(Me.count+=1,Me.revenue+=b):Y.set(H,{count:1,revenue:b,label:Re})}const ae=new Set(R.filter(u=>u.user_id).map(u=>u.user_id)).size,fe=R.length,je=fe>0?le/fe:0,ke=ae>0?fe/ae:0,f=Array.from(Y.values()).filter(u=>u.count>=2).length,z=Y.size,F=z>0?f/z*100:0,ve=Array.from(Y.values()).sort((u,b)=>b.revenue-u.revenue).slice(0,10).map(u=>({label:u.label,orders:u.count,revenue:u.revenue})),_e=new Map;for(const u of _){if(!u.user_id)continue;(!_e.get(u.user_id)||u.is_default)&&_e.set(u.user_id,u)}const Be=new Map,Oe=new Map,Ae=new Map;for(const u of _e.values()){const b=zn(u.country);if(Be.set(b,(Be.get(b)??0)+1),u.city){const H=u.city.trim();H&&Oe.set(H,(Oe.get(H)??0)+1)}if(b==="DE"&&u.postal_code){const H=String(u.postal_code).trim().charAt(0);H&&Ae.set(H,(Ae.get(H)??0)+1)}}const ne=Array.from(Be.entries()).map(([u,b])=>({code:u,count:b})).sort((u,b)=>b.count-u.count),We=Array.from(Oe.entries()).map(([u,b])=>({city:u,count:b})).sort((u,b)=>b.count-u.count).slice(0,10),Fe=Array.from(Ae.entries()).map(([u,b])=>({region:u,count:b})).sort((u,b)=>u.region.localeCompare(b.region)),we=new Map;for(let u=11;u>=0;u--){const b=new Date(n.getFullYear(),n.getMonth()-u,1),H=`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}`;we.set(H,0)}for(const u of p){if(u.is_guest_account||!u.created_at)continue;const b=new Date(u.created_at),H=`${b.getFullYear()}-${String(b.getMonth()+1).padStart(2,"0")}`;we.has(H)&&we.set(H,(we.get(H)??0)+1)}const Ve=Array.from(we.entries()).map(([u,b])=>({month:u,count:b}));return{totalCustomers:v,activeCustomers:ae,guestCustomers:I,newLast30:k(i),newLast90:k(l),newLast365:k(g),newsletterSubs:D.count??0,b2bCount:c,b2cCount:m,specialPriceCustomers:te,totalOrders:fe,guestOrders:ze,registeredOrders:
1Q,totalRevenueNet:le,avgOrderValueNet:je,avgOrdersPerActive:ke,repeatCustomerRate:F,countries:ne,topCities:We,postalRegions:Fe,topCustomers:ve,monthlySignups:Ve}}function ee({label:n,value:i,sub:l}){return e.jsxs("div",{className:"rounded-lg border p-3",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:n}),e.jsx("div",{className:"text-xl font-semibold",children:i}),l&&e.jsx("div",{className:"text-xs text-muted-foreground mt-0.5",children:l})]})}function zs({label:n,value:i,max:l}){const g=l>0?i/l*100:0;return e.jsxs("div",{className:"grid grid-cols-[8rem_1fr_3rem] items-center gap-2 text-sm",children:[e.jsx("div",{className:"truncate",children:n}),e.jsx("div",{className:"h-2 rounded bg-muted overflow-hidden",children:e.jsx("div",{className:"h-full bg-primary",style:{width:`${g}%`}})}),e.jsx("div",{className:"text-right tabular-nums",children:G.format(i)})]})}function Mn({open:n,onOpenChange:i}){const[l,g]=h.useState(null),[p,d]=h.useState(!1),[R,_]=h.useState(null);h.useEffect(()=>{if(!n)return;let c=!1;return d(!0),_(null),Pn().then(m=>{c||g(m)}).catch(m=>{console.error("[CustomerAnalytics] load failed",m),c||_((m==null?void 0:m.message)??"Fehler beim Laden")}).finally(()=>!c&&d(!1)),()=>{c=!0}},[n]);const D=l?Math.max(1,...l.countries.map(c=>c.count)):1,v=l?Math.max(1,...l.topCities.map(c=>c.count)):1,I=l?Math.max(1,...l.postalRegions.map(c=>c.count)):1,k=l?Math.max(1,...l.monthlySignups.map(c=>c.count)):1;return e.jsx(us,{open:n,onOpenChange:i,children:e.jsxs(hs,{className:"w-[calc(100%-16px)] sm:w-[95vw] sm:max-w-7xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(xs,{children:[e.jsx(gs,{children:"Kundenanalyse"}),e.jsx(Da,{children:"Kennzahlen & Verteilungen über den gesamten Kundenstamm."})]}),p&&e.jsxs("div",{className:"flex items-center justify-center py-16 text-muted-foreground",children:[e.jsx(ye,{className:"h-5 w-5 mr-2 animate-spin"}),"Analyse wird geladen…"]}),R&&!p&&e.jsx("div",{className:"rounded border border-destructive/40 bg-destructive/10 p-4 text-sm text-destructive",children:R}),l&&!p&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs(P,{children:[e.jsx(O,{children:e.jsx(U,{className:"text-base",children:"Überblick"})}),e.jsxs(M,{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[e.jsx(ee,{label:"Kunden gesamt",value:G.format(l.totalCustomers)}),e.jsx(ee,{label:"Aktive Kunden (≥ 1 Bestellung)",value:G.format(l.activeCustomers),sub:l.totalCustomers>0?`${Ue(l.activeCustomers/l.totalCustomers*100)} aller Kunden`:void 0}),e.jsx(ee,{label:"Neu (30 Tage)",value:G.format(l.newLast30)}),e.jsx(ee,{label:"Neu (90 Tage)",value:G.format(l.newLast90)}),e.jsx(ee,{label:"Neu (365 Tage)",value:G.format(l.newLast365)}),e.jsx(ee,{label:"Gast-Accounts",value:G.format(l.guestCustomers)}),e.jsx(ee,{label:"Newsletter-Abos",value:G.format(l.newsletterSubs),sub:l.totalCustomers>0?`${Ue(l.newsletterSubs/l.totalCustomers*100)} vs. Kunden`:void 0}),e.jsx(ee,{label:"Sonderpreis-Kunden",value:G.format(l.specialPriceCustomers)})]})]}),e.jsxs(P,{children:[e.jsx(O,{children:e.jsx(U,{className:"text-base",children:"Umsatz & Verhalten"})}),e.jsxs(M,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-4 gap-3",children:[e.jsx(ee,{label:"Bestellungen gesamt",value:G.format(l.totalOrders),sub:`${G.format(l.registeredOrders)} Kunden · ${G.format(l.guestOrders)} Gäste`}),e.jsx(ee,{label:"Netto-Umsatz",value:Se(l.totalRevenueNet)}),e.jsx(ee,{label:"Ø Warenkorbwert (netto)",value:Se(l.avgOrderValueNet)}),e.jsx(ee,{label:"Ø Bestellungen / aktivem Kunde",value:G.format(Math.round(l.avgOrdersPerActive*10)/10)}),e.jsx(ee,{label:"Wiederkäufer-Quote",value:Ue(l.repeatCustomerRate),sub:"≥ 2 Bestellungen"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium mb-2",children:"Top 10 Kunden nach Umsatz"}),l.topCustomers.length===0?e.jsx("div",{className:"text-sm text-muted-foreground",children:"Keine Bestellungen vorhanden."}):e.jsx("div",{className:"space-y-1",children:l.topCustomers.map((c,m)=>e.jsxs("div",{className:"grid grid-cols-[1.5rem_1fr_4rem_6rem] items-center gap-2 text-sm py-1 border-b last:border-0",children:[e.jsxs("div",{className:"text-muted-foreground",children:["#",m+1]}),e.jsx("div",{className:"truncate",children:c.label}),e.jsxs("div",{className:"text-right tabular-nums text-muted-foreground",children:[G.format(c.orders),"×"]}),e.jsx("div",{className:"text-right tabular-nums font-medium",children:Se(c.revenue)})]},m))})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{children:e.jsx(U,{className:"text-base",children:"Geografie"})}),e.jsxs(M,{className:"grid md:grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium mb-2",children:"Länder"}),e.jsx("div",{className:"space-y-1",children:l.countries.map(c=>e.jsx(zs,{label:`${Bn(c.code)} ${c.code}`,value:c.count,max:D},c.code))}
1),e.jsx("div",{className:"text-sm font-medium mt-4 mb-2",children:"PLZ-Regionen (DE)"}),e.jsx("div",{className:"space-y-1",children:l.postalRegions.length===0?e.jsx("div",{className:"text-sm text-muted-foreground",children:"Keine DE-Adressen."}):l.postalRegions.map(c=>e.jsx(zs,{label:`PLZ ${c.region}____`,value:c.count,max:I},c.region))})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium mb-2",children:"Top 10 Städte"}),e.jsx("div",{className:"space-y-1",children:l.topCities.length===0?e.jsx("div",{className:"text-sm text-muted-foreground",children:"Keine Adressdaten."}):l.topCities.map(c=>e.jsx(zs,{label:c.city,value:c.count,max:v},c.city))})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{children:e.jsx(U,{className:"text-base",children:"Segmente"})}),e.jsxs(M,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 md:grid-cols-3 gap-3",children:[e.jsx(ee,{label:"B2B (Firma / USt-ID)",value:G.format(l.b2bCount),sub:l.totalCustomers>0?Ue(l.b2bCount/l.totalCustomers*100):void 0}),e.jsx(ee,{label:"B2C (Privat)",value:G.format(l.b2cCount),sub:l.totalCustomers>0?Ue(l.b2cCount/l.totalCustomers*100):void 0}),e.jsx(ee,{label:"Kunden mit Sonderpreisen",value:G.format(l.specialPriceCustomers)})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium mb-2",children:"Registrierungen letzte 12 Monate"}),e.jsx("div",{className:"flex items-end gap-1 h-24",children:l.monthlySignups.map(c=>{const m=k>0?c.count/k*100:0;return e.jsx("div",{className:"flex-1 flex flex-col items-center gap-1",title:`${c.month}: ${c.count}`,children:e.jsx("div",{className:"w-full bg-primary rounded-t",style:{height:`${Math.max(2,m)}%`}})},c.month)})}),e.jsx("div",{className:"flex gap-1 mt-1",children:l.monthlySignups.map(c=>e.jsx("div",{className:"flex-1 text-[10px] text-muted-foreground text-center",children:c.month.slice(5)},c.month))})]})]})]})]})]})})}function Rn({customerId:n,customerEmail:i,ownerType:l="customer"}){return e.jsxs("div",{className:"space-y-6",children:[e.jsx(bn,{customerId:n,customerEmail:i,ownerType:l}),e.jsx(Nn,{customerId:n,ownerType:l})]})}async function Wt(n){const{data:i}=await S.from("orders").select("tracking_session_id").eq("user_id",n).not("tracking_session_id","is",null).limit(200),l=Array.from(new Set((i||[]).map(g=>g.tracking_session_id).filter(g=>typeof g=="string"&&/^[\w.-]+$/.test(g))));return l.length?`user_id.eq.${n},session_id.in.(${l.join(",")})`:`user_id.eq.${n}`}const Bt={loading:!1,lastVisitAt:null,sessionCount30d:0,pageViews30d:0,topPages:[],topReferrers:[],interests:[]};function In(n,i){const l=Zt({queryKey:["customer-activity",n],enabled:!!n&&i,staleTime:6e4,queryFn:async()=>{var ke;if(!n)return Bt;const g=new Date(Date.now()-30*864e5).toISOString(),p=new Date(Date.now()-90*864e5).toISOString(),d=await Wt(n),[R,_,D,v,I]=await Promise.all([S.from("visitor_analytics").select("id, session_id, page_path, referrer, created_at").or(d).gte("created_at",g).order("created_at",{ascending:!1}).limit(500),S.from("conversion_analytics").select("id, conversion_type, product_id, created_at").eq("user_id",n).gte("created_at",p).not("product_id","is",null).order("created_at",{ascending:!1}).limit(500),S.from("wishlist_items").select("product_id, created_at").eq("user_id",n).limit(200),S.from("compare_analytics").select("product_id, created_at").eq("user_id",n).not("product_id","is",null).order("created_at",{ascending:!1}).limit(200),S.from("order_items").select("product_id, created_at, orders!inner(user_id)").eq("orders.user_id",n).limit(200)]),k=R.data||[],c=new Set,m=new Map,te=new Map;for(const f of k)if(f.session_id&&c.add(f.session_id),f.page_path&&m.set(f.page_path,(m.get(f.page_path)||0)+1),f.referrer)try{const z=new URL(f.referrer).hostname||f.referrer;te.set(z,(te.get(z)||0)+1)}catch{te.set(f.referrer,(te.get(f.referrer)||0)+1)}const Y=Array.from(m.entries()).map(([f,z])=>({path:f,count:z})).sort((f,z)=>z.count-f.count).slice(0,10),ze=Array.from(te.entries()).map(([f,z])=>({referrer:f,count:z})).sort((f,z)=>z.count-f.count).slice(0,5),Q=new Map,le=(f,z,F)=>{if(!f)return;const ve=Q.get(f)||{sources:new Set,last_at:F};ve.sources.add(z),new Date(F).getTime()>
1new Date(ve.last_at).getTime()&&(ve.last_at=F),Q.set(f,ve)};for(const f of _.data||[]){const z=f.conversion_type;z==="purchase"?le(f.product_id,"purchase",f.created_at):z==="add_to_cart"?le(f.product_id,"cart",f.created_at):z==="checkout"&&le(f.product_id,"checkout",f.created_at)}for(const f of I.data||[])le(f.product_id,"purchase",f.created_at);for(const f of D.data||[])le(f.product_id,"wishlist",f.created_at);for(const f of v.data||[])le(f.product_id,"compare",f.created_at);const ae=Array.from(Q.keys());let fe=new Map;if(ae.length){const{data:f}=await S.from("products").select("id, name, sku, image_url, slug").in("id",ae);fe=new Map((f||[]).map(z=>[z.id,z]))}const je=ae.map(f=>{const z=Q.get(f),F=fe.get(f);return{product_id:f,name:(F==null?void 0:F.name)||null,sku:(F==null?void 0:F.sku)||null,image_url:(F==null?void 0:F.image_url)||null,slug:(F==null?void 0:F.slug)||null,sources:Array.from(z.sources),last_at:z.last_at}}).sort((f,z)=>new Date(z.last_at).getTime()-new Date(f.last_at).getTime()).slice(0,30);return{loading:!1,lastVisitAt:((ke=k[0])==null?void 0:ke.created_at)||null,sessionCount30d:c.size,pageViews30d:k.length,topPages:Y,topReferrers:ze,interests:je}}});return{...l.data||Bt,loading:l.isLoading}}function Kn({userId:n,active:i}){const[l,g]=h.useState({}),{data:p,isLoading:d}=Zt({queryKey:["customer-visit-log",n],enabled:!!n&&i,staleTime:6e4,queryFn:async()=>{const _=new Date(Date.now()-7776e6).toISOString(),D=await Wt(n),{data:v}=await S.from("visitor_analytics").select("session_id, page_path, referrer, created_at").or(D).gte("created_at",_).order("created_at",{ascending:!1}).limit(1e3),I=new Map;for(const k of v||[]){const c=k.session_id||k.created_at,m=I.get(c);m?(m.pages.push({path:k.page_path,at:k.created_at}),k.created_at<m.start&&(m.start=k.created_at),k.created_at>m.end&&(m.end=k.created_at),!m.referrer&&k.referrer&&(m.referrer=k.referrer)):I.set(c,{sessionId:c,start:k.created_at,end:k.created_at,referrer:k.referrer||null,pages:[{path:k.page_path,at:k.created_at}]})}return Array.from(I.values()).sort((k,c)=>new Date(c.end).getTime()-new Date(k.end).getTime())}}),R=p||[];return e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Gs,{className:"h-4 w-4"})," Besuchsprotokoll (letzte 90 Tage)"]})}),e.jsx(M,{className:"space-y-2 max-h-[480px] overflow-y-auto",children:d?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Laden…"}):R.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Besuche in den letzten 90 Tagen."}):R.map(_=>{const D=!!l[_.sessionId];return e.jsxs("div",{className:"border rounded-md",children:[e.jsxs("button",{type:"button",className:"w-full flex items-center justify-between gap-2 p-2 text-left text-sm",onClick:()=>g(v=>({...v,[_.sessionId]:!D})),children:[e.jsxs("span",{className:"flex items-center gap-2 min-w-0",children:[D?e.jsx(La,{className:"h-4 w-4 shrink-0"}):e.jsx(Ta,{className:"h-4 w-4 shrink-0"}),e.jsx("span",{children:new Date(_.end).toLocaleString("de-DE")})]}),e.jsxs("span",{className:"flex items-center gap-2 shrink-0",children:[_.referrer&&e.jsx(B,{variant:"outline",className:"text-[10px] max-w-[220px] truncate",children:_.referrer}),e.jsxs(B,{variant:"secondary",className:"text-[10px]",children:[_.pages.length," Seiten"]})]})]}),D&&e.jsx("ol",{className:"border-t px-3 py-2 space-y-1 text-xs",children:_.pages.slice().sort((v,I)=>new Date(v.at).getTime()-new Date(I.at).getTime()).map((v,I)=>e.jsxs("li",{className:"flex justify-between gap-3",children:[e.jsx("span",{className:"font-mono break-all",children:v.path}),e.jsx("span",{className:"text-muted-foreground shrink-0",children:new Date(v.at).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})})]},`${v.path}-${I}`))})]},_.sessionId)})})]})}function On({userId:n,active:i,lastLoginAt:l}){const g=In(n,i);return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(It,{className:"h-4 w-4"})," Aktivität (letzte 30 Tage)"]})}),e.jsx(M,{className:"space-y-2 text-sm",children:g.loading?e.jsx("p",{className:"text-muted-foreground",children:"Laden…"}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Letzter Website-Besuch:"}),e.jsx("span",{children:g.lastVisitAt?new Date(g.lastVisitAt).toLocaleStr
1ing("de-DE"):"–"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Letzte Anmeldung:"}),e.jsx("span",{children:l?new Date(l).toLocaleString("de-DE"):"–"})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Sessions:"}),e.jsx("span",{className:"font-semibold",children:g.sessionCount30d})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-muted-foreground",children:"Seitenaufrufe:"}),e.jsx("span",{className:"font-semibold",children:g.pageViews30d})]}),g.topReferrers.length>0&&e.jsxs("div",{className:"pt-2 border-t",children:[e.jsx("div",{className:"text-muted-foreground text-xs mb-1",children:"Top Referrer:"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:g.topReferrers.map(p=>e.jsxs(B,{variant:"outline",className:"text-[10px]",children:[p.referrer," · ",p.count]},p.referrer))})]})]})})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Kt,{className:"h-4 w-4"})," Meistbesuchte Seiten"]})}),e.jsx(M,{children:g.loading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Laden…"}):g.topPages.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Besuchsdaten in den letzten 30 Tagen."}):e.jsx("ol",{className:"text-xs space-y-1",children:g.topPages.map(p=>e.jsxs("li",{className:"flex justify-between gap-2",children:[e.jsx("span",{className:"font-mono break-all",children:p.path}),e.jsxs("span",{className:"tabular-nums text-muted-foreground shrink-0",children:[p.count,"×"]})]},p.path))})})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(za,{className:"h-4 w-4"})," Produkt-Interesse"]})}),e.jsx(M,{children:g.loading?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Laden…"}):g.interests.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Produkt-Signale (Warenkorb, Wishlist, Vergleich, Bestellungen)."}):e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-2",children:g.interests.map(p=>e.jsxs("div",{className:"flex items-center gap-3 border rounded-md p-2",children:[p.image_url?e.jsx("img",{src:Ba(p.image_url,160),alt:p.name||"",className:"w-12 h-12 object-contain rounded",loading:"lazy"}):e.jsx("div",{className:"w-12 h-12 rounded bg-muted"}),e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsx("div",{className:"text-sm font-medium truncate",children:p.name||p.product_id}),p.sku&&e.jsx("div",{className:"text-xs text-muted-foreground",children:p.sku}),e.jsxs("div",{className:"flex flex-wrap gap-1 mt-1",children:[p.sources.includes("purchase")&&e.jsx(B,{className:"text-[10px] bg-emerald-100 text-emerald-900 border border-emerald-300 hover:bg-emerald-100",children:"gekauft"}),p.sources.includes("checkout")&&e.jsx(B,{className:"text-[10px] bg-blue-100 text-blue-900 border border-blue-300 hover:bg-blue-100",children:"Checkout"}),p.sources.includes("cart")&&e.jsx(B,{className:"text-[10px] bg-amber-100 text-amber-900 border border-amber-300 hover:bg-amber-100",children:"Warenkorb"}),p.sources.includes("wishlist")&&e.jsxs(B,{variant:"outline",className:"text-[10px] gap-1",children:[e.jsx(Pa,{className:"h-3 w-3"}),"Wishlist"]}),p.sources.includes("compare")&&e.jsxs(B,{variant:"outline",className:"text-[10px] gap-1",children:[e.jsx(Ma,{className:"h-3 w-3"}),"Vergleich"]})]})]})]},p.product_id))})})]}),e.jsx(Kn,{userId:n,active:i})]})}const He=n=>n?new Date(n).toLocaleDateString("de-DE"):"–",Fn=n=>n?new Date(n).toLocaleString("de-DE"):"–",Bs=n=>typeof n=="number"?n.toLocaleString("de-DE",{style:"currency",currency:"EUR"}):"–";function Ze({text:n}){return e.jsx("p",{className:"text-sm text-muted-foreground",children:n})}function Vn({userId:n,email:i,active:l}){const{data:g,loading:p}=wn(n,i,l);return p?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Laden…"}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ra,{className:"h-4 w-4"})," Lead-Herkunft"]})}),e.jsx(M,{className:"space-y-2",children:g.leads.length===0?e.jsx(Ze,{text:"Dieser Kunde war zuvor kein Lead."}):g.leads.map(d=>e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 text-sm border rounded-md p-2",children:[e.jsx("span",{className:"font-medium",children:[d.company_name,d.company_name_2].filter(
1Boolean).join(" ")||"Ohne Firma"}),e.jsxs("span",{className:"text-muted-foreground",children:["angelegt ",He(d.created_at)]}),d.converted_at&&e.jsxs("span",{className:"text-muted-foreground",children:["Kunde seit ",He(d.converted_at)]}),d.status&&e.jsx(B,{variant:"outline",children:d.status})]},d.id))})]}),e.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-2 gap-4",children:[e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ot,{className:"h-4 w-4"})," Angebote"]})}),e.jsx(M,{className:"space-y-2",children:g.quotes.length===0?e.jsx(Ze,{text:"Noch keine Angebote."}):g.quotes.map(d=>e.jsxs("div",{className:"flex items-center justify-between gap-2 text-sm border rounded-md p-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-mono",children:d.quote_number}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[He(d.quote_date),d.from_lead&&" · aus Lead-Zeit"]})]}),e.jsxs("div",{className:"text-right shrink-0",children:[e.jsx("div",{className:"tabular-nums",children:Bs(d.total_gross)}),d.status&&e.jsx(B,{variant:"outline",className:"text-[10px]",children:d.status})]})]},d.id))})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ia,{className:"h-4 w-4"})," Rechnungen"]})}),e.jsx(M,{className:"space-y-2",children:g.invoices.length===0?e.jsx(Ze,{text:"Noch keine Rechnungen."}):g.invoices.map(d=>e.jsxs("div",{className:"flex items-center justify-between gap-2 text-sm border rounded-md p-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-mono",children:d.invoice_number}),e.jsxs("div",{className:"text-xs text-muted-foreground",children:[He(d.issued_at),d.order_number&&` · ${d.order_number}`]})]}),e.jsxs("div",{className:"text-right shrink-0",children:[e.jsx("div",{className:"tabular-nums",children:Bs(d.total_gross)}),d.status&&e.jsx(B,{variant:"outline",className:"text-[10px]",children:d.status})]})]},d.id))})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ps,{className:"h-4 w-4"})," Bestellungen"]})}),e.jsx(M,{className:"space-y-2",children:g.orders.length===0?e.jsx(Ze,{text:"Noch keine Bestellungen."}):g.orders.map(d=>e.jsxs("div",{className:"flex items-center justify-between gap-2 text-sm border rounded-md p-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"font-mono",children:d.order_number}),e.jsx("div",{className:"text-xs text-muted-foreground",children:He(d.created_at)})]}),e.jsxs("div",{className:"text-right shrink-0",children:[e.jsx("div",{className:"tabular-nums",children:Bs(d.total_amount)}),d.status&&e.jsx(B,{variant:"outline",className:"text-[10px]",children:d.status})]})]},d.id))})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ft,{className:"h-4 w-4"})," E-Mails"]})}),e.jsx(M,{className:"space-y-2 max-h-[420px] overflow-y-auto",children:g.emails.length===0?e.jsx(Ze,{text:"Noch keine E-Mails an diesen Kunden."}):g.emails.map(d=>e.jsxs("div",{className:"flex items-start justify-between gap-2 text-sm border rounded-md p-2",children:[e.jsxs("div",{className:"min-w-0",children:[e.jsx("div",{className:"truncate",children:d.subject||"Ohne Betreff"}),e.jsxs("div",{className:"text-xs text-muted-foreground truncate",children:[d.recipient_email," · ",Fn(d.sent_at||d.created_at)]})]}),d.status&&e.jsx(B,{variant:"outline",className:"text-[10px] shrink-0",children:d.status})]},d.id))})]})]})]})}function $n({active:n,userId:i,email:l,customerName:g,lastLoginAt:p}){const[d,R]=h.useState("engagement");return e.jsxs(Ut,{value:d,onValueChange:R,className:"space-y-4",children:[e.jsxs(Ht,{className:"h-auto",children:[e.jsxs(ge,{value:"engagement",className:"flex items-center gap-1",children:[e.jsx(It,{className:"h-3.5 w-3.5"}),"Engagement"]}),e.jsxs(ge,{value:"historie",className:"flex items-center gap-1",children:[e.jsx(Gs,{className:"h-3.5 w-3.5"}),"Historie"]}),e.jsxs(ge,{value:"korrespondenz",className:"flex items-center gap-1",children:[e.jsx(Ft,{className:"h-3.5 w-3.5"}),"Korrespondenz"]})]}),e.jsx(pe,{value:"engagement",className:"space-y-4",children:i&&e.jsx(On,{userId:i,active:n&&d==="engagement",lastLoginAt:p})}),e.jsx(pe,{value:"historie",className:"space-y-4",children:e.jsx(Vn,{active:n&&d==="historie",userId:i,email:l})}),e.jsx(pe,{value:"korrespondenz",className:"space-y-4",children:e.jsx(yn,{active:n&&d==="korrespondenz",userId:i,email:l,customerName:g})})]})}const Un={billing_email:"Rechnungs-E-Mail",vat_id:"USt-IdNr.",tax_number:"Steuernummer",leitweg_id:"Leitweg-ID",sepa_iban:"IBAN",sepa_bic:"BIC",sepa_account_holder:"Kontoinhaber",sepa_mandate_reference:"Mandatsreferenz",sepa_mandate_date:"Mandatsdatum",preferred_payment_method:"Bevorzugte Zahlart",is_active:"Kunde aktiv"},Hn={company:"Firma",first_name:"Vorname",last_name:"Nachname",street:"Straße",address_supplement:"Adresszusatz",postal_code:"PLZ",city:"Ort",country:"Land"},os=n=>n===!0?"Ja":n===!1?"Nein":(n==null?"":String(n).trim())||"—",ms=n=>n==null?"":typeof n=="boolean"?String(n):String(n).trim();function Zn(n,i,l,g){if(!n)return[];const p=[];for(const[d,R]of Object.entries(Un)){const _=d==="is_active"?!!n[d]:n[d],D=d==="is_active"?!!i[d]:i[d];ms(_)!==ms(D)&&p.push({label:R,before:os(_),after:os(D)})}for(const[d,R]of Object.entries(Hn)){const _=l==null?void 0:l[d],D=g==null?void 0:g[d];ms(_)!==ms(D)&&p.push({label:`Rechnungsadresse: ${R}`,before:os(_),after:os(D)})}return p}function Wn({open:n,changes:i,onCancel:l,onConfirm:g}){return e.jsx(Fs,{open:n,onOpenChange:p=>!p&&l(),children:e.jsxs(Vs,{className:"max-w-[calc(100vw-1rem)] sm:max-w-2xl",children:[e.jsxs($s,{children:[e.jsxs(Us,{className:"flex items-center gap-2",children:[e.jsx(Ms,{className:"h-5 w-5 text-destructive"}),"Sensible Kundendaten geändert"]}),e.jsx(Hs,{asChild:!0,children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{children:"Bitte prüfen Sie die folgenden Änderungen. Sie wirken sich auf Rechnungen, Zahlungen oder den Kontozugang aus."}),e.jsx("div",{className:"max-h-72 overflow-y-auto rounded-md border",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-muted text-left",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-3 py-2 font-medium",children:"Feld"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Vorher"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Nachher"})]})}),e.jsx("tbody",{children:i.map((p,d)=>e.jsxs("tr",{className:"border-t",children:[e.jsx("td",{className:"px-3 py-2 font-medium text-foreground",children:p.label}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground line-through break-all",children:p.before}),e.jsx("td",{className:"px-3 py-2 text-foreground break-all",children:p.after})]},d))})]})})]})})]}),e.jsxs(Zs,{children:[e.jsx(Ws,{onClick:l,children:"Zurück"}),e.jsx(qs,{onClick:g,children:"Ja, speichern"})]})]})})}const qn={email:"Login-E-Mail",billing_email:"Rechnungs-E-Mail",s
1alutation:"Anrede",first_name:"Vorname",last_name:"Nachname",job_title:"Position",company_name:"Firma",company_name_2:"Firma (Zusatz)",industry:"Branche",website:"Website",phone:"Telefon",mobile:"Mobil",fax:"Fax",vat_id:"USt-IdNr.",tax_number:"Steuernummer",leitweg_id:"Leitweg-ID",buyer_reference:"Bestellreferenz",old_customer_id:"Alte Kundennummer",preferred_payment_method:"Bevorzugte Zahlart",offline_payment_days:"Zahlungsziel (manuell)",offline_skonto_percent:"Skonto (manuell)",customer_since:"Kunde seit",sepa_iban:"IBAN",sepa_bic:"BIC",sepa_account_holder:"Kontoinhaber",sepa_mandate_reference:"Mandatsreferenz",sepa_mandate_date:"Mandatsdatum",billing_is_shipping_address:"Rechnung = Lieferung",is_active:"Kunde aktiv",marketing_opt_in:"Werbeeinwilligung",notes:"Notizen",street:"Straße",address_supplement:"Adresszusatz",postal_code:"PLZ",city:"Ort",country:"Land",company:"Firma",is_default:"Standardadresse",type:"Adressart"},Gn=new Set(["billing_email","salutation","first_name","last_name","job_title","company_name","company_name_2","industry","website","phone","mobile","fax","vat_id","tax_number","leitweg_id","buyer_reference","old_customer_id","preferred_payment_method","offline_payment_days","offline_skonto_percent","customer_since","sepa_iban","sepa_bic","sepa_account_holder","sepa_mandate_reference","sepa_mandate_date","billing_is_shipping_address","is_active","marketing_opt_in"]),Pt=n=>n==null||n===""?"—":n==="true"?"Ja":n==="false"?"Nein":n;function Yn({customerId:n,active:i,onRestore:l}){const[g,p]=h.useState([]),[d,R]=h.useState(!1);return h.useEffect(()=>{if(!i||!n)return;let _=!1;return R(!0),S.from("customer_profile_versions").select("id, changed_by_email, table_name, operation, field, old_value, new_value, created_at").eq("customer_id",n).order("created_at",{ascending:!1}).limit(500).then(({data:D,error:v})=>{_||(v&&console.error("Versionen laden fehlgeschlagen:",v),p(D||[]),R(!1))}),()=>{_=!0}},[n,i]),d?e.jsxs("div",{className:"flex items-center gap-2 p-6 text-muted-foreground",children:[e.jsx(ye,{className:"h-4 w-4 animate-spin"})," Lade Versionen…"]}):g.length===0?e.jsx("p",{className:"p-6 text-sm text-muted-foreground",children:"Noch keine Änderungen protokolliert. Ab jetzt wird jede Änderung an Stammdaten und Adressen hier festgehalten."}):e.jsx("div",{className:"rounded-md border overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{className:"bg-muted text-left",children:e.jsxs("tr",{children:[e.jsx("th",{className:"px-3 py-2 font-medium",children:"Zeitpunkt"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Von"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Bereich"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Feld"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Vorher"}),e.jsx("th",{className:"px-3 py-2 font-medium",children:"Nachher"}),e.jsx("th",{className:"px-3 py-2"})]})}),e.jsx("tbody",{children:g.map(_=>{const D=_.table_name==="user_profiles";return e.jsxs("tr",{className:"border-t align-top",children:[e.jsx("td",{className:"px-3 py-2 whitespace-nowrap",children:new Date(_.created_at).toLocaleString("de-DE")}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground",children:_.changed_by_email||"System"}),e.jsx("td",{className:"px-3 py-2",children:e.jsx(B,{variant:"outline",children:D?"Stammdaten":_.operation==="INSERT"?"Adresse neu":_.operation==="DELETE"?"Adresse gelöscht":"Adresse"})}),e.jsx("td",{className:"px-3 py-2 font-medium",children:qn[_.field]||_.field}),e.jsx("td",{className:"px-3 py-2 text-muted-foreground break-all max-w-xs",children:Pt(_.old_value)}),e.jsx("td",{className:"px-3 py-2 break-all max-w-xs",children:Pt(_.new_value)}),e.jsx("td",{className:"px-3 py-2 text-right",children:D&&Gn.has(_.field)&&_.operation==="UPDATE"&&e.jsxs(L,{size:"sm",variant:"ghost",onClick:()=>l(_.field,_.old_value),title:"Diesen Wert wiederherstellen",children:[e.jsx(Ka,{className:"h-4 w-4 mr-1"})," Wiederherstellen"]})})]},_.id)})})]})})}const Jn={advance_payment:"Vorkasse",invoice:"Kauf auf Rechnung",sepa:"SEPA-Lastschrift",stripe:"Karte",payp
1al:"PayPal"};function Mt(n){const i=[];n.company&&i.push(n.company),n.company_name_2&&i.push(n.company_name_2);const l=[Vt(n.salutation),n.first_name,n.last_name].filter(Boolean).join(" ").trim();return l&&i.push(l),n.street&&i.push(n.street),n.address_supplement&&i.push(n.address_supplement),i.push(`${n.postal_code||""} ${n.city||""}`.trim()),i.push(Oa(n.country)),i.filter(Boolean)}function Z({label:n,value:i}){return i==null||i===""?null:e.jsxs("div",{className:"flex justify-between gap-3",children:[e.jsx("span",{className:"text-muted-foreground",children:n}),e.jsx("span",{className:"text-right break-words",children:i})]})}function Qn({customer:n,stats:i,addresses:l,subscriptions:g,orders:p,providerLabel:d,statusBadge:R,onOpenTab:_,onOpenOrder:D}){const v=l.filter(c=>c.type==="billing"),I=l.filter(c=>c.type==="shipping"),k=p.slice(0,5);return e.jsxs("div",{className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:[{label:"Gesamtumsatz",value:Se((i==null?void 0:i.totalSpent)||0)},{label:"Bestellungen",value:String((i==null?void 0:i.orderCount)||0)},{label:"Ø Bestellwert",value:Se((i==null?void 0:i.averageOrder)||0)},{label:"Erster Kauf",value:i!=null&&i.firstOrderDate?new Date(i.firstOrderDate).toLocaleDateString("de-DE"):"–"},{label:"Letzter Kauf",value:i!=null&&i.lastOrderDate?new Date(i.lastOrderDate).toLocaleDateString("de-DE"):"–"}].map(c=>e.jsx(P,{children:e.jsxs(M,{className:"p-3",children:[e.jsx("div",{className:"text-xs text-muted-foreground",children:c.label}),e.jsx("div",{className:"text-lg font-semibold",children:c.value})]})},c.label))}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[e.jsxs(P,{className:"lg:col-span-1",children:[e.jsxs(O,{className:"pb-2 flex-row items-center justify-between space-y-0",children:[e.jsx(U,{className:"text-base",children:"Kurzprofil"}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>_("stammdaten"),children:"Bearbeiten"})]}),e.jsxs(M,{className:"space-y-1.5 text-sm",children:[e.jsx(Z,{label:"Name",value:[Vt(n.salutation),n.first_name,n.last_name].filter(Boolean).join(" ")}),e.jsx(Z,{label:"Firma",value:n.company_name}),e.jsx(Z,{label:"Firma (Zusatz)",value:n.company_name_2}),e.jsx(Z,{label:"Position",value:n.job_title}),e.jsx(Z,{label:"Branche",value:n.industry}),e.jsx(Z,{label:"E-Mail",value:n.email}),e.jsx(Z,{label:"Rechnungs-E-Mail",value:n.billing_email}),e.jsx(Z,{label:"Telefon",value:n.phone}),e.jsx(Z,{label:"Mobil",value:n.mobile}),e.jsx(Z,{label:"Fax",value:n.fax}),e.jsx(Z,{label:"Website",value:n.website}),e.jsx(Z,{label:"USt-IdNr.",value:n.vat_id}),e.jsx(Z,{label:"Steuernummer",value:n.tax_number}),e.jsx(Z,{label:"Bevorzugte Zahlart",value:n.preferred_payment_method?Jn[n.preferred_payment_method]??n.preferred_payment_method:null}),e.jsx(Z,{label:"Zahlungsziel (manuell)",value:n.offline_payment_days!=null?`${n.offline_payment_days} Tage`:null}),e.jsx(Z,{label:"Skonto (manuell)",value:n.offline_skonto_percent!=null?`${Number(n.offline_skonto_percent).toLocaleString("de-DE")} %`:null}),n.preferred_payment_method==="sepa"&&e.jsx(Z,{label:"SEPA-Konto",value:n.sepa_iban?`${pn(n.sepa_iban)}${n.sepa_mandate_reference?` · Mandat ${n.sepa_mandate_reference}`:""}`:"IBAN fehlt"}),e.jsx(Z,{label:"Kunde seit",value:n.customer_since?new Date(n.customer_since).toLocaleDateString("de-DE"):null}),e.jsx(Z,{label:"Werbeeinwilligung",value:e.jsx(B,{variant:n.marketing_opt_in?"default":"secondary",children:n.marketing_opt_in?"Ja":"Nein"})}),e.jsx(Z,{label:"Status",value:e.jsx(B,{variant:n.is_active?"default":"secondary",children:n.is_active?"Aktiv":"Inaktiv"})}),e.jsx(Z,{label:"Registriert",value:e.jsxs("span",{children:[new Date(n.created_at).toLocaleDateString("de-DE")," · ",e.jsx(B,{variant:"outline",children:d})]})}),e.jsx(Z,{label:"Letzte Anmeldung",value:n.last_login_at?new Date(n.last_login_at).toLocaleString("de-DE"):null})]})]}),e.jsxs(P,{className:"lg:col-span-2",children:[e.jsxs(O,{className:"pb-2 flex-row items-center justify-between space-y-0",children:[e.jsx(U,{className:"text-base",children:"Adressen"}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>_("adressen"),children:"Bearbeiten"})]}),e.jsxs(M,{className:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-medium mb-1",children:"Rechnungsadresse"}),v.length===0?e.jsx("p",{className:"text-muted-foreground",children:"Keine Rechnungsadresse hinterlegt"}):v.map(c=>
1e.jsx("div",{className:"space-y-0.5",children:Mt(c).map((m,te)=>e.jsx("p",{children:m},te))},c.id))]}),e.jsxs("div",{children:[e.jsxs("div",{className:"font-medium mb-1",children:["Lieferadressen (",I.length,")"]}),I.length===0?e.jsx("p",{className:"text-muted-foreground",children:n.billing_is_shipping_address?"Rechnungsadresse ist zugleich Lieferadresse":"Keine Lieferadressen hinterlegt"}):e.jsxs(e.Fragment,{children:[n.billing_is_shipping_address&&e.jsx("p",{className:"text-muted-foreground mb-2",children:"Rechnungsadresse ist zugleich Standard-Lieferadresse"}),e.jsx("div",{className:"space-y-3",children:I.map(c=>e.jsxs("div",{className:"space-y-0.5 border-b last:border-0 pb-2 last:pb-0",children:[c.is_default&&e.jsx(B,{variant:"default",className:"mb-1",children:"Standard"}),Mt(c).map((m,te)=>e.jsx("p",{children:m},te))]},c.id))})]})]})]})]})]}),e.jsxs(P,{children:[e.jsxs(O,{className:"pb-2 flex-row items-center justify-between space-y-0",children:[e.jsxs(U,{className:"text-base",children:["Letzte Bestellungen (",p.length,")"]}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>_("bestellungen"),children:"Alle anzeigen"})]}),e.jsx(M,{children:k.length===0?e.jsx("p",{className:"text-sm text-muted-foreground",children:"Noch keine Bestellungen vorhanden"}):e.jsxs(Rs,{children:[e.jsx(Is,{children:e.jsxs(Ke,{children:[e.jsx(V,{children:"Bestell-Nr."}),e.jsx(V,{children:"Datum"}),e.jsx(V,{children:"Betrag"}),e.jsx(V,{children:"Status"})]})}),e.jsx(Ks,{children:k.map(c=>e.jsxs(Ke,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>D(c),children:[e.jsx($,{className:"font-mono text-sm",children:c.order_number}),e.jsx($,{children:new Date(c.created_at).toLocaleDateString("de-DE")}),e.jsx($,{className:"font-semibold",children:Se(c.total_amount)}),e.jsx($,{children:R(c.status)})]},c.id))})]})})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsxs(U,{className:"text-base",children:["Abonnements (",g.length,")"]})}),e.jsx(M,{className:"text-sm",children:g.length===0?e.jsx("p",{className:"text-muted-foreground",children:"Keine Abonnements vorhanden"}):e.jsx("ul",{className:"space-y-1",children:g.map(c=>{var m;return e.jsxs("li",{className:"flex justify-between gap-2",children:[e.jsx("span",{className:"truncate",children:((m=c.products)==null?void 0:m.name)||c.product_id}),e.jsxs("span",{className:"text-muted-foreground shrink-0",children:["alle ",c.interval_months," Mon. · ",c.next_order_date?new Date(c.next_order_date).toLocaleDateString("de-DE"):"–"]})]},c.id)})})})]}),e.jsxs(P,{children:[e.jsxs(O,{className:"pb-2 flex-row items-center justify-between space-y-0",children:[e.jsx(U,{className:"text-base",children:"Admin-Notizen"}),e.jsx(L,{variant:"ghost",size:"sm",onClick:()=>_("notizen"),children:"Bearbeiten"})]}),e.jsx(M,{children:n.notes?e.jsx("p",{className:"text-sm whitespace-pre-wrap",children:n.notes}):e.jsx("p",{className:"text-sm text-muted-foreground",children:"Keine Notizen hinterlegt"})})]})]})]})}function Rt({address:n,onChange:i,notesLabel:l,notesPlaceholder:g}){const[p,d]=h.useState([]),[R,_]=h.useState(null),D=Fa(n.country),v=async()=>{const m=(n.postal_code||"").trim();if(!m){_("PLZ fehlt");return}if(!Ua(m,D)){_(D==="DE"?"PLZ muss 5 Stellen haben":"PLZ muss 4 Stellen haben"),d([]);return}_(null);try{const Y=(await Ha(D,m,(n.city||"").trim())).suggestions||[];if(Y.length===0){d([]);return}if(Y.length===1){d([]),(!n.city||n.city.trim()!==Y[0])&&i("city",Y[0]);return}d(Y),(!n.city||!Y.includes(n.city.trim()))&&i("city",Y[0])}catch{d([])}},I=!(n.street||"").trim(),k=!(n.city||"").trim(),c=!I&&!Va(n.street);return e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Anrede"}),e.jsxs(me,{value:n.salutation||"",onValueChange:m=>i("salutation",m),children:[e.jsx(ue,{className:"h-9",children:e.jsx(he,{placeholder:"Bitte wählen"})}),e.jsx(xe,{children:$t.map(m=>e.jsx(C,{value:m.value,children:m.label},m.value))})]})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Vorname"}),e.jsx(w,{className:"h-9",value:n.first_name||"",onChange:m=>i("first_name",m.target.value)})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Nachname"}),e.jsx(w,{className:"h-9",value:n.last_name||"",onChange:m=>i("last_name",m.target.value)})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Firma"}),e.jsx(w,{className:"h-9",value:n.company||"",onChange:m=>i("company",m.target.value)})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Firma (Zusatz, 2. Zeile)"}),e.jsx(w,{className:"h-9",value:n.company_name_2||"",onChange:m=>i("company_name_2",m.target.value)})]})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Adresszusatz"}),e.jsx(w,{className:"h-9",value:n.address_supplement||"",onChange:m=>i("address_supplement",m.target.value)})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Straße & Hausnummer *"}),e.jsx(w,{className:"h-9",value:n.street||"",onChange:m=>i("street",m.target.value)}),I&&e.jsx("p",{className:"text-xs text-destructive mt-1",children:"Straße fehlt"}),c&&e.jsx("p",{className:"text-xs text-amber-600 mt-1",children:"Hausnummer fehlt vermutlich"})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-6",children:[e.jsxs("div",{className:"sm:col-span-1",children:[e.jsx(j,{className:"text-xs",children:"PLZ *"}),e.jsx(w,{className:"h-9",inputMode:"numeric",value:n.postal_code||"",onChange:m=>i("postal_code",m.target.value),onBlur:v,placeholder:D==="DE"?"12345":"1234"}),R&&e.jsx("p",{className:"text-xs text-destructive mt-1",children:R})]}),e.jsxs("div",{className:"sm:col-span-3",children:[e.jsx(j,{className:"text-xs",children:"Ort *"}),p.length>1?e.jsxs(me,{value:n.city,onValueChange:m=>i("city",m),children:[e.jsx(ue,{className:"h-9",children:e.jsx(he,{placeholder:"Ort wählen"})}),e.jsx(xe,{children:p.map(m=>e.jsx(C,{value:m,children:m},m))})]}):e.jsx(w,{className:"h-9",value:n.city||"",onChange:m=>i("city",m.target.value),onBlur:v}),k&&e.jsx("p",{className:"text-xs text-destructive mt-1",children:"Ort fehlt"}),p.length>1&&e.jsx("p",{className:"text-xs text-muted-foreground mt-1",children:"Diese PLZ gilt für mehrere Ortschaften."})]}),e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(j,{className:"text-xs",children:"Land"}),e.jsxs(me,{value:D,onValueChange:m=>i("country",m),children:[e.jsx(ue,{className:"h-9",children:e.jsx(he,{})}),e.jsx(xe,{children:$a.map(m=>e.jsx(C,{value:m.code,children:m.label},m.code))})]})]})]}),l&&e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:l}),e.jsx(Os,{value:n.notes||"",onChange:m=>i("notes",m.target.value),rows:2,placeholder:g})]})]})}function Pr(){var At;const[n,i]=jn(),l=_n(),[g,p]=h.useState([]),[d,R]=h.useState(!0),[_,D]=h.useState(()=>n.get("search")??""),[v,I]=h.useState([]),[k,c]=h.useState(!1),[m,te]=h.useState(50),[Y,ze]=h.useState(()=>localStorage.getItem("customersManagerLastClicked")||null),[Q,le]=
1h.useState("all"),[ae,fe]=h.useState("all"),[je,ke]=h.useState("all"),[f,z]=h.useState("all"),[F,ve]=h.useState("all"),[_e,Be]=h.useState("all"),[Oe,Ae]=h.useState(!1),[ne,We]=h.useState(null),[Fe,we]=h.useState(!1),[Ve,qe]=h.useState(!1),[Ge,Pe]=h.useState(!1),[u,b]=h.useState(!1),[H,Me]=h.useState({done:0,total:0}),[Re,qt]=h.useState("created_at"),[Ye,Ys]=h.useState("desc"),[T,Gt]=h.useState(()=>{const s=localStorage.getItem("customersManagerVisibleColumns");if(s)try{return{customer_number:!0,name:!0,email:!0,company_name:!0,billingCountry:!0,subscriptionCount:!0,orderCount:!0,totalSpent:!0,status:!0,hasAddress:!0,hasSpecialPrices:!1,signup_provider:!1,created_at:!0,last_login_at:!1,...JSON.parse(s)}}catch{}return{customer_number:!0,name:!0,email:!0,company_name:!0,billingCountry:!0,subscriptionCount:!0,orderCount:!0,totalSpent:!0,status:!0,hasAddress:!0,hasSpecialPrices:!1,signup_provider:!1,created_at:!0,last_login_at:!1}});h.useEffect(()=>{localStorage.setItem("customersManagerVisibleColumns",JSON.stringify(T))},[T]);const Yt={customer_number:"Kundennr.",name:"Name",email:"E-Mail",company_name:"Unternehmen",billingCountry:"Land",subscriptionCount:"Abos",orderCount:"Bestellungen",totalSpent:"Umsatz",status:"Status",hasAddress:"Adresse",hasSpecialPrices:"Sonderpreise",signup_provider:"Anmeldung",created_at:"Registriert",last_login_at:"Zuletzt angemeldet"},Jt=s=>{Gt(a=>({...a,[s]:!a[s]}))},[Ee,$e]=h.useState(!1),[t,y]=h.useState(null),[ps,De]=h.useState("stammdaten"),{user:fs}=Za(),[js,Js]=h.useState(""),[Qt,_s]=h.useState(!1),Xt=s=>(s||"").replace(/^\[\d{2}\.\d{2}\.\d{4},? \d{2}:\d{2} · [^\]]*\][ \t]*$/gm,"").replace(/\n{3,}/g,`
2
3`).trim()||null,Qs=()=>`[${new Date().toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"})} · ${(fs==null?void 0:fs.email)||"Admin"}] `,ea=()=>{const s=js.trim();if(!s||!t)return;const a=`${Qs()}${s}`,r=(t.notes||"").trim();y({...t,notes:r?`${a}
4
5${r}`:a}),Js("")},sa=()=>{if(!t||Qt)return;const s=t.notes||"",a=Qs();_s(!0),y({...t,notes:s.trim()?`${a}
6
7${s.trim()}`:a})},Je=h.useRef(0),[Qe,Xs]=h.useState(null);h.useEffect(()=>{let s=!1;const a=t==null?void 0:t.id;if(!Ee||!a){Xs(null);return}return(async()=>{const{data:r}=await S.from("wws_leads").select("id, company_name, updated_at").eq("user_profile_id",a).order("updated_at",{ascending:!1}).limit(1).maybeSingle();s||Xs(r?{id:r.id,company:r.company_name,date:r.updated_at}:null)})(),()=>{s=!0}},[Ee,t==null?void 0:t.id]);const[W,Xe]=h.useState(!1),[es,et]=h.useState(!1),[vs,ss]=h.useState(!1),[ta,bs]=h.useState(null),[aa,ts]=h.useState(null),[st,Ns]=h.useState([]),[as,tt]=h.useState(!1),at=async s=>{if(!s.email){A.error("Für diesen Kunden ist keine E-Mail-Adresse hinterlegt");return}tt(!0);try{const{data:a,error:r}=await S.functions.invoke("admin-send-activation-email",{body:{user_id:s.id,activation_url:`${window.location.origin}/konto-aktivieren`}}),x=a??{};if(r||!(x!=null&&x.success))throw new Error((x==null?void 0:x.error)||(r==null?void 0:r.message)||"Versand fehlgeschlagen");A.success(`Aktivierungs-E-Mail an ${s.email} versendet (48 Stunden gültig)`)}catch(a){A.error(a instanceof Error?a.message:"Versand fehlgeschlagen")}finally{tt(!1)}},[Xn,nt]=h.useState(null),[ns,rt]=h.useState([]),[na,lt]=h.useState(null),[er,it]=h.useState([]),[ra,ct]=h.useState([]),[re,Le]=h.useState([]),[la,dt]=h.useState(!1),[ot,ia]=h.useState(null),[ca,mt]=h.useState(!1),[Te,da]=h.useState(null),[X,rs]=h.useState(null),[oa,ut]=h.useState(!1);h.useEffect(()=>{be()},[]),h.useEffect(()=>{if(!Ee&&Je.current>0){const s=Je.current,a=()=>{window.scrollTo({top:s,behavior:"instant"})};a(),requestAnimationFrame(a),setTimeout(a,50),setTimeout(a,150)}},[Ee]),h.useEffect(()=>{const s=n.get("edit");if(s&&g.length>0&&!Ee){const a=g.find(r=>r.id===s);a&&(ys(a),i({}))}},[n,g,Ee]);const be=async()=>{R(!0);try{let a=[],r=0;for(;;){const{data:o,error:E}=await S.rpc("admin_list_customers_overview").range(r,r+1e3-1);if(E)throw E;if(a=a.concat(o||[]),!o||o.length<1e3)break;r+=1e3}const x=(a||[]).map(o=>({id:o.id,email:o.email,first_name:o.first_name,last_name:o.last_name,salutation:o.salutation,company_name:o.company_name,company_name_2:o.company_name_2,ph
7one:o.phone,mobile:o.mobile,fax:o.fax,website:o.website,job_title:o.job_title,industry:o.industry,preferred_payment_method:o.preferred_payment_method,offline_payment_days:null,offline_skonto_percent:null,sepa_iban:o.sepa_iban,sepa_bic:o.sepa_bic,sepa_account_holder:o.sepa_account_holder,sepa_mandate_reference:o.sepa_mandate_reference,sepa_mandate_date:o.sepa_mandate_date,customer_since:o.customer_since,marketing_opt_in:o.marketing_opt_in,marketing_opt_in_at:o.marketing_opt_in_at,billing_is_shipping_address:null,buyer_reference:null,leitweg_id:null,old_customer_id:null,customer_number:o.customer_number,vat_id:o.vat_id,tax_number:o.tax_number,notes:o.notes,is_active:o.is_active,last_login_at:o.last_login_at,created_at:o.created_at,billing_email:o.billing_email,signup_provider:o.signup_provider,billingCountry:o.billing_country||void 0,orderCount:Number(o.order_count)||0,totalSpent:Number(o.total_spent)||0,subscriptionCount:Number(o.subscription_count)||0,hasAddress:!!o.has_address,hasSpecialPrices:!!o.has_special_prices,is_guest_account:!!o.is_guest_account}));p(x)}catch(s){console.error("Error fetching customers:",s),A.error("Fehler",{description:"Kunden konnten nicht geladen werden"})}finally{R(!1)}},ma=async s=>{try{const{data:a,error:r}=await S.from("orders").select(`
8          *,
9          order_items(id, order_id, product_id, product_name, product_sku, quantity, unit_price, total_price, created_at)
10
11        `).eq("user_id",s).order("created_at",{ascending:!1});if(r)throw r;rt(a||[])}catch(a){console.error("Error fetching customer orders:",a),A.error("Fehler",{description:"Bestellhistorie konnte nicht geladen werden"})}},ua=async s=>{var a,r;try{const{data:x,error:o}=await S.from("orders").select("total_amount, created_at, status").eq("user_id",s).not("status","in","(cancelled,returned)");if(o)throw o;const E=x||[],K=E.reduce((q,se)=>q+se.total_amount,0),N=E.length,oe=N>0?K/N:0,J=[...E].sort((q,se)=>new Date(q.created_at).getTime()-new Date(se.created_at).getTime());lt({totalSpent:K,orderCount:N,averageOrder:oe,firstOrderDate:((a=J[0])==null?void 0:a.created_at)||null,lastOrderDate:((r=J[J.length-1])==null?void 0:r.created_at)||null})}catch(x){console.error("Error fetching customer stats:",x)}},ha=async s=>{try{const{data:a,error:r}=await S.from("subscriptions").select(`
12          id,
13          user_id,
14          product_id,
15          status,
16          interval_months,
17          next_order_date,
18          created_at,
19          products (
20            id,
21            name,
22            sku,
23            image_url
24          )
25        `).eq("user_id",s).order("created_at",{ascending:!1});if(r)throw r;ct(a||[])}catch(a){console.error("Error fetching customer subscriptions:",a)}},ys=async s=>{Je.current=window.scrollY,ze(s.id),localStorage.setItem("customersManagerLastClicked",s.id),De("uebersicht"),nt(s);const[a,r]=await Promise.all([S.from("user_profiles").select("*").eq("id",s.id).single(),S.from("user_addresses").select("*").eq("user_id",s.id).order("is_default",{ascending:!1}),ma(s.id),ua(s.id),ha(s.id)]);if(a.error){A.error("Kundendaten konnten nicht vollständig geladen werden");return}const x=a.data||{},o=(x.created_at||s.created_at||"").slice(0,10)||null,E={...s,...x,customer_since:x.customer_since||o};Xe(!1),y(E),bs({...E}),!r.error&&r.data?(it(r.data),Le(r.data),ts(ls(r.data)||null)):ts(null),_s(!1),$e(!0)},ws=s=>{ia(s),dt(!0)},xa=()=>{Je.current=window.scrollY,Xe(!0),et(!1),bs(null),ts(null),nt(null),rt([]),lt(null),ct([]),it([]),Le([]),y({id:"new",email:"",first_name:"",last_name:"",is_active:!0,country:"DE",customer_since:new Date().toISOString().slice(0,10),billing_is_shipping_address:!0}),De("stammdaten"),_s(!1),$e(!0)},ga=(s,a)=>
25{if(!t)return;const r=a==="true"?!0:a==="false"?!1:a;y({...t,[s]:r}),De("stammdaten"),A.info("Wert übernommen – bitte zum Übernehmen speichern.")},pa=async()=>{if(!t)return;const s=t,a=(s.email||"").trim().toLowerCase();if(!a){A.error("Bitte eine Login-E-Mail angeben");return}if(/[^\x20-\x7E]/.test(a)){A.error('Die E-Mail enthält Umlaute oder Sonderzeichen. Bitte "ae/oe/ue/ss" schreiben.');return}if(!(s.last_name||"").trim()&&!(s.company_name||"").trim()){A.error("Bitte Nachname oder Firma angeben");return}const r=ls(re),x=Es(s.sepa_iban)||null;if(x&&!Ds(x)){A.error("IBAN ungültig");return}ss(!0);try{const{data:o,error:E}=await S.functions.invoke("admin-create-customer",{body:{email:a,salutation:s.salutation||null,first_name:s.first_name||null,last_name:s.last_name||null,job_title:s.job_title||null,company_name:s.company_name||null,company_name_2:s.company_name_2||null,industry:s.industry||null,website:s.website||null,phone:s.phone||null,mobile:s.mobile||null,fax:s.fax||null,vat_id:s.vat_id||null,tax_number:s.tax_number||null,leitweg_id:s.leitweg_id||null,buyer_reference:s.buyer_reference||null,old_customer_id:s.old_customer_id||null,preferred_payment_method:s.preferred_payment_method||null,customer_since:s.customer_since||null,offline_payment_days:s.offline_payment_days??null,offline_skonto_percent:s.offline_skonto_percent??null,sepa_iban:x,sepa_bic:s.sepa_bic||null,sepa_account_holder:s.sepa_account_holder||null,sepa_mandate_reference:s.sepa_mandate_reference||null,sepa_mandate_date:s.sepa_mandate_date||null,billing_email:s.billing_email||null,billing_is_shipping_address:!!s.billing_is_shipping_address,is_active:s.is_active!==!1,marketing_opt_in:!!s.marketing_opt_in,notes:s.notes||null,address:r&&(r.street||r.postal_code||r.city)?{street:r.street,address_supplement:r.address_supplement,postal_code:r.postal_code,city:r.city,country:r.country||"DE"}:null,send_activation:es,activation_url:`${window.location.origin}/konto-aktivieren`}});let K=o??{};if(E&&!o)try{const q=E==null?void 0:E.context;q!=null&&q.json&&(K=await q.json())}catch{}if(E||!(K!=null&&K.success))throw new Error((K==null?void 0:K.error)||(E==null?void 0:E.message)||"Anlegen fehlgeschlagen");const N=K.data.user_id;if((s.first_name||"").trim()||(s.last_name||"").trim()){const{error:q}=await S.from("customer_contacts").insert({user_id:N,salutation:s.salutation||null,first_name:s.first_name||null,last_name:s.last_name||null,role_or_department:s.job_title||null,email:a||s.billing_email,phone:s.phone||null,mobile:s.mobile||null,is_primary:!0,is_invoice_recipient:!(s.billing_email||"").trim()||(s.billing_email||"").trim().toLowerCase()===(a||"").trim().toLowerCase()});q&&console.error("Ansprechpartner konnte nicht angelegt werden:",q)}const oe=s.billing_is_shipping_address?[]:re.filter(q=>q.type==="shipping"&&(q.street||"").trim());if(oe.length>0){const{error:q}=await S.from("user_addresses").insert(oe.map(se=>({user_id:N,type:"shipping",salutation:se.salutation,first_name:se.first_name,last_name:se.last_name,company:se.company,company_name_2:se.company_name_2||null,street:se.street,address_supplement:se.address_supplement,postal_code:se.postal_code,city:se.city,country:se.country,is_default:se.is_default})));q&&A.error("Lieferadressen konnten nicht gespeichert werden",{description:q.message})}const J=K.data.customer_number?` (${K.data.customer_number})`:"";es&&!K.data.activation_sent?A.warning(`Kunde angelegt${J}, Aktivierungs-E-Mail fehlgeschlagen: ${K.data.activation_error??"unbekannt"}`):A.success(`Kunde angelegt${J}${es?" – Aktivierungs-E-Mail versendet":""}`),Xe(!1),be(),await ys({id:N,email:a}),De("stammdaten")}catch(o){A.error(o instanceof Error?o.message:"Anlegen fehlgeschlagen")}finally{ss(!1)}},ht=async()=>{if(!t)return;if(W){await pa();return}const s=Zn(ta,t,aa,ls(re));if(s.length>0){Ns(s);return}await xt()},xt=async()=>{var a,r;if(!t)return;const s=Es(t.sepa_iban)||null;if(s&&!Ds(s)){A.error("IBAN ungültig",{description:"Bitte die IBAN prüfen (Prüfsumme stimmt nicht)."});return}t.preferred_payment_method==="sepa"&&!s&&A.warning("Ohne IBAN erscheint kein Lastschrift-Hinweis auf der Rechnung."),ss(!0);try{const{error:x}=await S.from("user_profiles").update({first_name:t.first_name,salutation:t.salutation,last_name:t.last_name,company_name:t.company_name,phone:t.phone,mobile:t.mobile,fax:t.fax,website:t.website,company_name_2:t.company_name_2,job_title:t.job_title,industry:t.industry,preferred_payment_method:t.preferred_payment_method,offline_payment_days:t.offline_payment_days,offline_skonto_percent:t.offline_skonto_percent,sepa_iban:s,sepa_bic:(t.sepa_bic||"").replace(/\s/g,"").toUpperCase()||null,sepa_account_holder:((a=t.sepa_account_holder)==null?void 0:a.trim())||null,sepa_mandate_reference:((r=t.
25sepa_mandate_reference)==null?void 0:r.trim())||(s?t.customer_number:null)||null,sepa_mandate_date:t.sepa_mandate_date||null,customer_since:t.customer_since,marketing_opt_in:t.marketing_opt_in??!1,marketing_opt_in_at:t.marketing_opt_in_at,billing_is_shipping_address:t.billing_is_shipping_address,buyer_reference:t.buyer_reference,leitweg_id:t.leitweg_id,old_customer_id:t.old_customer_id,vat_id:t.vat_id,tax_number:t.tax_number,notes:Xt(t.notes),is_active:t.is_active,billing_email:t.billing_email}).eq("id",t.id);if(x)throw x;const o=t.billing_is_shipping_address?re.filter(N=>N.type==="billing"||(N.street||"").trim()):re,E=o.find(N=>!(N.street||"").trim()||!(N.postal_code||"").trim()||!(N.city||"").trim());if(E){A.error("Adresse unvollständig",{description:`${E.type==="billing"?"Rechnungsadresse":"Lieferadresse"}: Straße, PLZ und Ort sind Pflichtfelder.`});return}const K=[];for(const N of o){const oe={type:N.type,salutation:N.salutation,first_name:N.first_name,last_name:N.last_name,company:N.company,company_name_2:N.company_name_2||null,street:N.street,address_supplement:N.address_supplement,postal_code:N.postal_code,city:N.city,country:N.country,is_default:N.is_default,notes:N.notes||null};if(N.id.startsWith("new-")){const{error:J}=await S.from("user_addresses").insert({user_id:t.id,...oe});J&&(console.error("Error inserting address:",J),K.push(J.message))}else{const{error:J}=await S.from("user_addresses").update(oe).eq("id",N.id);J&&(console.error("Error updating address:",J),K.push(J.message))}}if(K.length>0?A.error("Adressen konnten nicht gespeichert werden",{description:K[0]}):A.success("Erfolg",{description:"Kunde und Adressen erfolgreich aktualisiert"}),be(),t){const{data:N}=await S.from("user_addresses").select("*").eq("user_id",t.id);N&&(Le(N),ts(ls(N)||null)),bs({...t})}}catch(x){console.error("Error updating customer:",x),A.error("Fehler",{description:"Kunde konnte nicht aktualisiert werden"})}finally{ss(!1)}},Cs=(s,a,r)=>{Le(x=>{const o=x.find(E=>E.id===s);return x.map(E=>E.id===s?{...E,[a]:r}:a==="is_default"&&r===!0&&o&&E.type===o.type?{...E,is_default:!1}:E)})},ls=s=>s.find(a=>a.type==="billing"&&a.is_default)||s.find(a=>a.type==="billing"),gt=s=>{if(!t)return;const a={id:`new-${Date.now()}`,user_id:t.id,type:s,salutation:t.salutation,first_name:t.first_name||"",last_name:t.last_name||"",company:t.company_name||"",company_name_2:t.company_name_2||"",street:"",address_supplement:"",postal_code:"",city:"",country:"DE",is_default:re.filter(r=>r.type===s).length===0};Le(r=>[...r,a])},pt=async s=>{if(s.startsWith("new-")){Le(a=>a.filter(r=>r.id!==s));return}try{const{error:a}=await S.from("user_addresses").delete().eq("id",s);if(a)throw a;Le(r=>r.filter(x=>x.id!==s)),A.success("Erfolg",{description:"Adresse wurde gelöscht"})}catch(a){console.error("Error deleting address:",a),A.error("Fehler",{description:"Adresse konnte nicht gelöscht werden"})}},fa=s=>{I(a=>a.includes(s)?a.filter(r=>r!==s):[...a,s])},ja=()=>{v.length===Ce.length?I([]):I(Ce.map(s=>s.id))},_a=async()=>{if(v.length!==0)try{const{error:s}=await S.from("user_profiles").update({is_active:!0}).in("id",v);if(s)throw s;A.success("Erfolg",{description:`${v.length} Kunden aktiviert`}),I([]),be()}catch(s){console.error("Error:",s),A.error("Fehler",{description:"Bulk-Aktion fehlgeschlagen"})}},va=async()=>{if(v.length!==0)try{const{error:s}=await S.from("user_profiles").update({is_active:!1}).in("id",v);if(s)throw s;A.success("Erfolg",{description:`${v.length} Kunden deaktiviert`}),I([]),be()}catch(s){console.error("Error:",s),A.error("Fehler",{description:"Bulk-Aktion fehlgeschlagen"})}},[ba,is]=h.useState(!1),[ft,jt]=h.useState(""),[_t,vt]=h.useState(!0),[cs,bt]=h.useState(!1),[Nt,yt]=h.useState(!1),Na=()=>{t&&(jt(t.email||""),vt(!0),yt(!1),is(!0))},ya=async()=>{if(!t)return;const s=ft.trim().toLowerCase();if(!s){A.error("E-Mail-Adresse erforderlich");return}bt(!0);try{const{data:a,error:r}=await S.functions.invoke("admin-update-customer-email",{body:{user_id:t.id,new_email:s,update_orders:_t}}),x=(a==null?void 0:a.error)||(r==null?void 0:r.message);if(x){A.error("E-Mail konnte nicht geändert werden",{description:x});return}y({...t,email:s}),A.success("E-Mail-Adresse geändert",{description:a!=null&&a.auth_updated?"Login- und Profil-E-Mail wurden aktualisiert.":"Profil-E-Mail wurde aktualisiert (kein Login-Konto vorhanden)."}),is(!1),be()}catch(a){A.error("Fehler",{description:(a==null?void 0:a.message)||"Unbekannter Fehler"})}finally{bt(!1)}},wt=s=>{const a=(s||"email").toLowerCase();return a==="google"?"Google":a==="email"?"E-Mail":a.charAt(0).toUpperCase()+a.slice(1)},Ct=async s=>{try{const{data:a,error:r}=await S.functions.invoke("admin-delete-customer",{body:{user_id:s}});return r?{ok:!1,error:r.message}:a!=null&&a.error?{ok:!1,error:a.error}:{ok:!0}
25}catch(a){return{ok:!1,error:(a==null?void 0:a.message)||"Unbekannter Fehler"}}},wa=async()=>{if(!ne)return;we(!0);const s=await Ct(ne.id);s.ok?(A.success("Erfolg",{description:`Kunde ${ne.customer_number||ne.email} wurde gelöscht`}),Ae(!1),We(null),be()):A.error("Fehler",{description:s.error||"Kunde konnte nicht gelöscht werden"}),we(!1)},Ca=async()=>{const s=[...v];if(s.length===0)return;b(!0),Me({done:0,total:s.length});const a=[];let r=0;for(let x=0;x<s.length;x++){const o=await Ct(s[x]);o.ok?r++:a.push({id:s[x],error:o.error||"Fehler"}),Me({done:x+1,total:s.length})}b(!1),Pe(!1),I([]),a.length===0?A.success("Erfolg",{description:`${r} Kunden wurden gelöscht`}):A.error(a.length===s.length?"Fehler":"Teilweise erfolgreich",{description:`${r} gelöscht, ${a.length} fehlgeschlagen. Erster Fehler: ${a[0].error}`}),be()},Sa=s=>{We(s),Ae(!0)},ka=async s=>{da(s),rs(null),mt(!0),await St(s)},St=async s=>{ut(!0),rs(null);try{const{data:{session:a}}=await S.auth.getSession(),r=await S.functions.invoke("validate-aut-vat-id",{body:{vatId:s.vat_id},headers:a!=null&&a.access_token?{Authorization:`Bearer ${a.access_token}`}:void 0});if(r.error)throw new Error(r.error.message);rs(r.data)}catch(a){console.error("VAT validation error:",a),rs({status:"unavailable",valid:!1,vatId:s.vat_id||"",countryCode:"",isAustrian:!1,message:"Prüfung derzeit nicht möglich",error:a.message})}finally{ut(!1)}},ie=s=>{Re===s?Ys(a=>a==="asc"?"desc":"asc"):(qt(s),Ys("asc"))},ce=s=>
25Re!==s?e.jsx(hn,{className:"h-4 w-4 ml-1 text-muted-foreground"}):Ye==="asc"?e.jsx(xn,{className:"h-4 w-4 ml-1"}):e.jsx(gn,{className:"h-4 w-4 ml-1"}),Ce=h.useMemo(()=>{let s=[...g];if(_){const a=_.toLowerCase();s=s.filter(r=>r.email.toLowerCase().includes(a)||r.first_name&&r.first_name.toLowerCase().includes(a)||r.last_name&&r.last_name.toLowerCase().includes(a)||r.company_name&&r.company_name.toLowerCase().includes(a)||r.customer_number&&r.customer_number.toLowerCase().includes(a)||r.vat_id&&r.vat_id.toLowerCase().includes(a)||r.website&&r.website.toLowerCase().includes(a)||r.industry&&r.industry.toLowerCase().includes(a)||r.fax&&r.fax.toLowerCase().includes(a)||r.job_title&&r.job_title.toLowerCase().includes(a)||r.company_name_2&&r.company_name_2.toLowerCase().includes(a))}return Q!=="all"&&(s=s.filter(a=>{var x;const r=((x=a.billingCountry)==null?void 0:x.toUpperCase())||"";return Q==="DE"?r==="DE"||r==="DEUTSCHLAND"||r==="GERMANY":Q==="AT"?r==="AT"||r==="ÖSTERREICH"||r==="AUSTRIA":Q==="CH"?r==="CH"||r==="SCHWEIZ"||r==="SWITZERLAND":Q==="OTHER"?!["DE","DEUTSCHLAND","GERMANY","AT","ÖSTERREICH","AUSTRIA","CH","SCHWEIZ","SWITZERLAND"].includes(r)&&r!=="":!0})),ae!=="all"&&(s=s.filter(a=>ae==="active"?a.is_active===!0:ae==="inactive"?a.is_active===!1:!0)),je!=="all"&&(s=s.filter(a=>je==="yes"?(a.orderCount||0)>0:je==="no"?(a.orderCount||0)===0:!0)),f!=="all"&&(s=s.filter(a=>{var r,x;return f==="yes"?!!a.vat_id:f==="no"?!a.vat_id:f==="austrian"?(r=a.vat_id)==null?void 0:r.toUpperCase().startsWith("ATU"):f==="german"?(x=a.vat_id)==null?void 0:x.toUpperCase().startsWith("DE"):!0})),F!=="all"&&(s=s.filter(a=>F==="yes"?a.hasAddress===!0:F==="no"?a.hasAddress===!1:!0)),_e!=="all"&&(s=s.filter(a=>_e==="guest"?a.is_guest_account===!0:_e==="registered"?a.is_guest_account!==!0:!0)),s.sort((a,r)=>{var E,K,N,oe;let x,o;switch(Re){case"customer_number":x=a.customer_number||"",o=r.customer_number||"";break;case"name":x=`${a.first_name||""} ${a.last_name||""}`.trim().toLowerCase(),o=`${r.first_name||""} ${r.last_name||""}`.trim().toLowerCase();break;case"email":x=a.email.toLowerCase(),o=r.email.toLowerCase();break;case"company_name":x=((E=a.company_name)==null?void 0:E.toLowerCase())||"",o=((K=r.company_name)==null?void 0:K.toLowerCase())||"";break;case"created_at":x=new Date(a.created_at).getTime(),o=new Date(r.created_at).getTime();break;case"last_login_at":x=a.last_login_at?new Date(a.last_login_at).getTime():0,o=r.last_login_at?new Date(r.last_login_at).getTime():0;break;case"orderCount":x=a.orderCount||0,o=r.orderCount||0;break;case"totalSpent":x=a.totalSpent||0,o=r.totalSpent||0;break;case"billingCountry":x=((N=a.billingCountry)==null?void 0:N.toLowerCase())||"",o=((oe=r.billingCountry)==null?void 0:oe.toLowerCase())||"";break;case"subscriptionCount":x=a.subscriptionCount||0,o=r.subscriptionCount||0;break;case"status":x=a.is_active?1:0,o=r.is_active?1:0;break;case"hasSpecialPrices":x=a.hasSpecialPrices?1:0,o=r.hasSpecialPrices?1:0;break;default:x=a.created_at,o=r.created_at}return x<o?Ye==="asc"?-1:1:x>o?Ye==="asc"?1:-1:0}),s},[g,_,Q,ae,je,f,F,_e,Re,Ye]),de=Cn({data:Ce,itemsPerPage:m}),Aa=()=>{D(""),le("all"),fe("all"),ke("all"),z("all"),ve("all"),Be("all")},Ss=[Q!=="all",ae!=="all",je!=="all",f!=="all",F!=="all",_e!=="all"].filter(Boolean).length,kt=s=>{const r={pending:{label:"Ausstehend",variant:"secondary"},confirmed:{label:"Bestätigt",variant:"default"},processing:{label:"In Bearbeitung",variant:"default"},shipped:{label:"Versendet",variant:"default"},delivered:{label:"Zugestellt",variant:"default"},cancelled:{label:"Storniert",variant:"destructive"},returned:{label:"Zurückgesendet",variant:"destructive"}}[s]||{label:s,variant:"outline"};return e.jsx(B,{variant:r.variant,children:r.label})},Ea=s=>{if(!s)return"";const a=s.trim().toUpperCase();return a==="DE"||a==="DEUTSCHLAND"||a==="GERMANY"?"DE":a==="AT"||a==="ÖSTERREICH"||a==="OESTERREICH"||a==="AUSTRIA"?"AT":a==="CH"||a==="SCHWEIZ"||a==="SWITZERLAND"?"CH":a.slice(0,2)};return d?e.jsx("div",{className:"flex justify-center items-center h-64",children:"Laden..."}):e.jsxs("div",{className:"space-y-6",children:[e.jsx(Mn,{open:k,onOpenChange:c}),e.jsx(Wn,{open:st.length>0,changes:st,onCancel:()=>Ns([]),onConfirm:()=>{Ns([]),xt()}}),e.jsx("div",{className:"flex justify-end items-center",children:e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsxs(L,{size:"sm",onClick:xa,children:[e.jsx(ks,{className:"h-4 w-4 mr-2"}),"Neuer Kunde"]}),v.length>0&&e.jsxs(e.Fragment,{children:[e.jsxs(L,{variant:"outline",size:"sm",onClick:_a,children:[v.length," aktivieren"]}),e.jsxs(L,{variant:"outline",size:"sm",onClick:va,children:[v.length," deaktivieren"]}),e.jsxs(L,{variant:"outline",size:"sm",onClick:()=>Pe(!0),className:"text-destructive hover:text-destructive hover:bg-destructive/10 border-destructive/30",children:[e.jsx(Ie,{className:"h-4 w-4 mr-1"}),v.length," löschen"]})]}),e.jsxs(L,{variant:"outline",size:"sm",onClick:()=>c(!0),children:[e.jsx(Wa,{className:"h-4 w-4 mr-2"}),"Kundenanalyse"]}),e.jsxs(L,{variant:"outline",size:"sm",onClick:be,children:[e.jsx(Et,{className:"h-4 w-4 mr-2"}),"Aktualisieren"]})]})}),e.jsxs(P,{children:[e.jsxs(O,{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(qa,{className:"absolute left-3 top-3 h-4 w-4 text-muted-foreground"}),e.jsx(w,{placeholder:"Kunden suchen (Name, E-Mail, Kundennr., Firma, USt-IdNr.)...",value:_,onCh
25ange:s=>D(s.target.value),className:"pl-9"})]}),e.jsxs(L,{variant:Ve?"secondary":"outline",onClick:()=>qe(!Ve),className:"relative",children:[e.jsx(Ga,{className:"h-4 w-4 mr-2"}),"Filter",Ss>0&&e.jsx(B,{className:"ml-2 h-5 w-5 p-0 flex items-center justify-center text-xs",children:Ss})]}),e.jsxs(Ya,{children:[e.jsx(Ja,{asChild:!0,children:e.jsxs(L,{variant:"outline",size:"sm",children:[e.jsx(Qa,{className:"h-4 w-4 mr-2"}),"Spalten"]})}),e.jsxs(Xa,{align:"end",className:"w-48",children:[e.jsx(en,{children:"Sichtbare Spalten"}),e.jsx(sn,{}),Object.entries(Yt).map(([s,a])=>e.jsx(tn,{checked:T[s],onCheckedChange:()=>Jt(s),children:a},s))]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{htmlFor:"items-per-page",className:"text-sm whitespace-nowrap",children:"Pro Seite:"}),e.jsxs(me,{value:m.toString(),onValueChange:s=>te(Number(s)),children:[e.jsx(ue,{className:"w-20",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"25",children:"25"}),e.jsx(C,{value:"50",children:"50"}),e.jsx(C,{value:"100",children:"100"}),e.jsx(C,{value:"200",children:"200"})]})]})]})]}),Ve&&e.jsxs("div",{className:"flex flex-wrap items-center gap-4 p-4 bg-muted/50 rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"Land:"}),e.jsxs(me,{value:Q,onValueChange:le,children:[e.jsx(ue,{className:"w-40",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle Länder"}),e.jsx(C,{value:"DE",children:"🇩🇪 Deutschland"}),e.jsx(C,{value:"AT",children:"🇦🇹 Österreich"}),e.jsx(C,{value:"CH",children:"🇨🇭 Schweiz"}),e.jsx(C,{value:"OTHER",children:"🌍 Andere"})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"Status:"}),e.jsxs(me,{value:ae,onValueChange:fe,children:[e.jsx(ue,{className:"w-32",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle"}),e.jsx(C,{value:"active",children:"Aktiv"}),e.jsx(C,{value:"inactive",children:"Inaktiv"})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"Bestellungen:"}),e.jsxs(me,{value:je,onValueChange:ke,children:[e.jsx(ue,{className:"w-36",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle"}),e.jsx(C,{value:"yes",children:"Mit Bestellungen"}),e.jsx(C,{value:"no",children:"Ohne Bestellungen"})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"USt-IdNr.:"}),e.jsxs(me,{value:f,onValueChange:z,children:[e.jsx(ue,{className:"w-40",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle"}),e.jsx(C,{value:"yes",children:"Hat USt-IdNr."}),e.jsx(C,{value:"no",children:"Keine USt-IdNr."}),e.jsx(C,{value:"austrian",children:"🇦🇹 ATU..."}),e.jsx(C,{value:"german",children:"🇩🇪 DE..."})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"Adresse:"}),e.jsxs(me,{value:F,onValueChange:ve,children:[e.jsx(ue,{className:"w-36",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle"}),e.jsx(C,{value:"yes",children:"Mit Adresse"}),e.jsx(C,{value:"no",children:"Ohne Adresse"})]})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(j,{className:"text-sm whitespace-nowrap",children:"Kontotyp:"}),e.jsxs(me,{value:_e,onValueChange:Be,children:[e.jsx(ue,{className:"w-40",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"all",children:"Alle"}),e.jsx(C,{value:"registered",children:"Nur registrierte"}),e.jsx(C,{value:"guest",children:"Nur Gäste"})]})]})]}),Ss>0&&e.jsxs(L,{variant:"ghost",size:"sm",onClick:Aa,children:[e.jsx(an,{className:"h-4 w-4 mr-1"}),"Filter zurücksetzen"]})]})]}),e.jsxs(M,{children:[e.jsxs("div",{className:"text-sm text-muted-foreground mb-2",children:[Ce.length," von ",g.length," Kunden"]}),e.jsx(vn,{children:e.jsxs(Rs,{children:[e.jsx(Is,{children:e.jsxs(Ke,{children:[e.jsx(V,{className:"w-12",children:e.jsx(Ne,{checked:v.length===Ce.length&&Ce.length>0,onCheckedChange:ja})}),T.customer_number&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("customer_number"),children:e.jsxs("div",{className:"flex items-center",children:["Kundennr.",ce("customer_number")]})}),T.name&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("name"),children:e.jsxs("div",{className:"flex items-center",children:["Name",ce("name")]})}),T.email&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("email"),children:e.jsxs("div",{className:"flex items-center",children:["E-Mail",ce("email")]})}),T.company_name&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("company_name"),children:e.jsxs("div",{className:"flex items-center",children:["Unternehmen",ce("company_name")]})}),T.billingCountry&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50 w-[64px] px-2",onClick:()=>ie("billingCountry"),children:e.jsxs("div",{className:"flex items-center justify-center whitespace-nowrap",children:["Land",ce("billingCountry")]})}),T.subscriptionCount&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("subscriptionCount"),children:e.jsxs("div",{className:"flex items-center",children:[e.jsx(Dt,{className:"h-4 w-4 mr-1"}),"Abos",ce("subscriptionCount")]})}),T.orderCount&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("orderCount"),children:e.jsxs("div",{className:"flex items-center",children:["Bestellungen",ce("orderCount")]})}),T.totalSpent&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("totalSpent"),children:e.jsxs("div",{className:"flex items-center",children:["Umsatz",ce("totalSpent")]})}),T.status&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("status"),children:e.jsxs("div",{className:"flex items-center",children:["Status",ce("status")]})}),T.hasAddress&&e.jsx(V,{children:e.jsxs("div",{className:"flex items-center",children:[e.jsx(Lt,{className:"h-4 w-4 mr-1"}),"Adresse"]})}),T.hasSpecialPrices&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>
25ie("hasSpecialPrices"),children:e.jsxs("div",{className:"flex items-center",children:[e.jsx(As,{className:"h-4 w-4 mr-1"}),"Sonderpreise",ce("hasSpecialPrices")]})}),T.created_at&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("created_at"),children:e.jsxs("div",{className:"flex items-center",children:["Registriert",ce("created_at")]})}),T.last_login_at&&e.jsx(V,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ie("last_login_at"),children:e.jsxs("div",{className:"flex items-center",children:["Zuletzt angemeldet",ce("last_login_at")]})}),T.signup_provider&&e.jsx(V,{children:e.jsx("div",{className:"flex items-center",children:"Anmeldung"})})]})}),e.jsx(Ks,{children:de.paginatedData.map(s=>e.jsxs(Ke,{className:`cursor-pointer hover:bg-muted/50 transition-colors ${Y===s.id?"bg-primary/10 dark:bg-primary/20":""}`,onClick:()=>ys(s),children:[e.jsx($,{onClick:a=>a.stopPropagation(),children:e.jsx(Ne,{checked:v.includes(s.id),onCheckedChange:()=>fa(s.id)})}),T.customer_number&&e.jsx($,{className:"font-mono text-sm",children:e.jsxs("div",{className:"flex items-center gap-1.5",children:[e.jsx("span",{children:s.customer_number||"-"}),s.is_guest_account&&e.jsx(B,{variant:"outline",className:"text-[10px] px-1.5 py-0 bg-amber-50 text-amber-700 border-amber-300",title:"Konto wurde durch eine Gastbestellung erstellt",children:"Gast"})]})}),T.name&&e.jsx($,{className:"font-medium",children:e.jsx("span",{children:s.first_name&&s.last_name?`${s.first_name} ${s.last_name}`:"-"})}),T.email&&e.jsx($,{children:s.email}),T.company_name&&e.jsx($,{children:s.company_name||"-"}),T.billingCountry&&e.jsx($,{className:"w-[64px] px-2 text-center",children:(()=>{const a=Ea(s.billingCountry);return a?e.jsx(B,{variant:"outline",className:a==="AT"?"px-1.5 py-0 text-[11px] font-medium bg-red-50 text-red-700 border-red-200":"px-1.5 py-0 text-[11px] font-medium",children:a}):e.jsx("span",{className:"text-muted-foreground",children:"–"})})()}),T.subscriptionCount&&e.jsx($,{className:"text-center",children:s.subscriptionCount&&s.subscriptionCount>0?e.jsxs(B,{variant:"outline",className:"bg-green-50 text-green-700 border-green-200",children:[e.jsx(Dt,{className:"h-3 w-3 mr-1"}),s.subscriptionCount]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),T.orderCount&&e.jsx($,{className:"text-center",children:s.orderCount||0}),T.totalSpent&&e.jsx($,{children:Se(s.totalSpent||0)}),T.status&&e.jsx($,{children:e.jsx(B,{variant:s.is_active?"default":"secondary",children:s.is_active?"Aktiv":"Inaktiv"})}),T.hasAddress&&e.jsx($,{className:"text-center",children:s.hasAddress?e.jsx(Tt,{className:"h-4 w-4 text-green-600 mx-auto"}):e.jsx(zt,{className:"h-4 w-4 text-red-500 mx-auto"})}),T.hasSpecialPrices&&e.jsx($,{className:"text-center",children:s.hasSpecialPrices?e.jsxs(B,{variant:"outline",className:"bg-amber-50 text-amber-700 border-amber-200",children:[e.jsx(As,{className:"h-3 w-3 mr-1"}),"Ja"]}):e.jsx("span",{className:"text-muted-foreground",children:"-"})}),T.created_at&&e.jsx($,{children:new Date(s.created_at).toLocaleDateString("de-DE")}),T.last_login_at&&e.jsx($,{children:s.last_login_at?new Date(s.last_login_at).toLocaleString("de-DE",{dateStyle:"short",timeStyle:"short"}):e.jsx("span",{className:"text-muted-foreground",children:"–"})}),T.signup_provider&&e.jsx($,{children:e.jsx(B,{variant:"outline",children:wt(s.signup_provider)})})]},s.id))})]})}),Ce.length>m&&e.jsxs("div",{className:"flex items-center justify-between pt-4",children:[e.jsxs("div",{className:"text-sm text-muted-foreground",children:["Zeige ",de.startIndex," bis ",de.endIndex," von ",Ce.length," Kunden"]}),e.jsx(Sn,{children:e.jsxs(kn,{children:[e.jsx(Ls,{children:e.jsx(An,{onClick:de.goToPreviousPage,disabled:!de.hasPreviousPage})}),Array.from({length:de.totalPages},(s,a)=>a+1).filter(s=>s===1||s===de.totalPages||Math.abs(s-de.currentPage)<=2).map((s,a,r)=>{const x=a>0&&s-r[a-1]>1;return e.jsxs(Ls,{children:[x&&e.jsx("span",{className:"px-2",children:"..."}),e.jsx(En,{onClick:()=>de.goToPage(s),isActive:s===de.currentPage,children:s})]},s)}),e.jsx(Ls,{children:e.jsx(Dn,{onClick:de.goToNextPage,disabled:!de.hasNextPage})})]})})]})]})]}),e.jsx(us,{open:Ee,onOpenChange:$e,children:e.jsxs(hs,{className:"w-[calc(100%-16px)] sm:w-[98vw] sm:max-w-[98vw] h-[95vh] max-h-[95vh] overflow-hidden flex flex-col p-4 sm:p-6",children:[e.jsx(xs,{children:e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 pr-8",children:[e.jsxs(gs,{className:"flex flex-wrap items-center gap-2",children:[e.jsx("span",{children:W?"Neuer Kunde":[t==null?void 0:t.first_name,t==null?void 0:t.last_name].filter(
25Boolean).join(" ")||(t==null?void 0:t.company_name)||"Kunde"}),(t==null?void 0:t.company_name)&&((t==null?void 0:t.first_name)||(t==null?void 0:t.last_name))&&e.jsx("span",{className:"text-sm font-normal text-muted-foreground",children:t.company_name}),e.jsx("span",{className:"font-mono text-sm text-muted-foreground",children:t==null?void 0:t.customer_number}),t&&!W&&e.jsx(B,{variant:t.is_active?"default":"secondary",children:t.is_active?"Aktiv":"Inaktiv"}),t&&!W&&!t.is_guest_account&&!t.last_login_at&&e.jsx(B,{variant:"outline",className:"text-muted-foreground font-normal",children:"Noch kein Login verzeichnet"}),t&&!W&&t.is_guest_account&&e.jsxs(e.Fragment,{children:[e.jsx(B,{variant:"outline",children:"Konto noch nicht aktiviert"}),e.jsxs(L,{type:"button",size:"sm",variant:"outline",className:"h-7",disabled:as||!t.email,onClick:()=>at(t),children:[as?e.jsx(ye,{className:"h-4 w-4 mr-1 animate-spin"}):null,"Aktivierungslink senden"]})]})]}),t&&e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[e.jsxs(L,{size:"sm",onClick:ht,disabled:vs,children:[vs&&e.jsx(ye,{className:"h-4 w-4 mr-2 animate-spin"}),W?"Kunde anlegen":"Speichern"]}),!W&&t.vat_id&&e.jsx(L,{size:"sm",variant:"outline",className:"text-amber-600 hover:text-amber-700 hover:bg-amber-50",onClick:()=>ka(t),title:"USt-IdNr. im EU-Register prüfen",children:"USt-IdNr. prüfen"}),!W&&e.jsx(L,{size:"sm",variant:"outline",className:"text-destructive hover:text-destructive hover:bg-destructive/10",onClick:()=>Sa(t),title:"Kunde löschen",children:e.jsx(Ie,{className:"h-4 w-4"})})]})]})}),Qe&&e.jsxs("div",{className:"rounded-md border border-dashed bg-muted/40 px-3 py-2 text-sm text-muted-foreground",children:["Aus Lead gewonnen am ",new Date(Qe.date).toLocaleDateString("de-DE"),Qe.company?` · ${Qe.company}`:""," – der Lead wird nicht mehr in der Lead-Kartei geführt, die Historie bleibt erhalten."]}),t&&e.jsxs(Ut,{value:ps,onValueChange:De,className:"flex-1 min-h-0 overflow-hidden flex flex-col",children:[e.jsxs(Ht,{className:"grid w-full grid-cols-4 lg:grid-cols-9 h-auto",children:[e.jsxs(ge,{value:"uebersicht",className:"flex items-center gap-1",children:[e.jsx(nn,{className:"h-3.5 w-3.5"}),"Übersicht"]}),e.jsxs(ge,{value:"stammdaten",className:"flex items-center gap-1",children:[e.jsx(rn,{className:"h-3.5 w-3.5"}),"Stammdaten"]}),e.jsxs(ge,{value:"adressen",className:"flex items-center gap-1",children:[e.jsx(Lt,{className:"h-3.5 w-3.5"}),"Adressen"]}),e.jsxs(ge,{value:"ansprechpartner",disabled:W,className:"flex items-center gap-1",children:[e.jsx(ln,{className:"h-3.5 w-3.5"}),"Kontakte"]}),e.jsxs(ge,{value:"spezial",disabled:W,className:"flex items-center gap-1",children:[e.jsx(As,{className:"h-3.5 w-3.5"}),"Spezial"]}),e.jsxs(ge,{value:"verlauf",disabled:W,className:"flex items-center gap-1",children:[e.jsx(Gs,{className:"h-3.5 w-3.5"}),"Verlauf"]}),e.jsxs(ge,{value:"bestellungen",disabled:W,className:"flex items-center gap-1",children:[e.jsx(Ps,{className:"h-3.5 w-3.5"}),"Bestellungen"]}),e.jsxs(ge,{value:"notizen",className:"flex items-center gap-1",children:[e.jsx(cn,{className:"h-3.5 w-3.5"}),"Notizen",!!((At=t==null?void 0:t.notes)!=null&&At.trim())&&e.jsx("span",{className:"ml-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full bg-amber-500 text-[10px] font-bold text-white",title:"Notizen vorhanden",children:"!"})]}),e.jsxs(ge,{value:"versionen",disabled:W,className:"flex items-center gap-1",children:[e.jsx(dn,{className:"h-3.5 w-3.5"}),"Versionen"]})]}),e.jsx(pe,{value:"uebersicht",className:"space-y-4 flex-1 overflow-y-auto",children:W?e.jsx("div",{className:"rounded-md border border-dashed p-8 text-center text-muted-foreground",children:"Noch keine Daten – bitte zuerst die Stammdaten ausfüllen und speichern."}):e.jsx(Qn,{customer:t,stats:na,addresses:re,subscriptions:ra,orders:ns,providerLabel:wt(t.signup_provider),statusBadge:kt,onOpenTab:s=>De(s==="rechnung"||s==="lieferung"?"adressen":s),onOpenOrder:ws})}),e.jsxs(pe,{value:"stammdaten",className:"space-y-4 flex-1 overflow-y-auto",children:[e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Person"})}),e.jsxs(M,{className:"grid gap-3 sm:grid-cols-4",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Anrede"}),e.jsxs(me,{value:t.salutation||"",onValueChange:s=>
25y({...t,salutation:s}),children:[e.jsx(ue,{className:"h-9",children:e.jsx(he,{placeholder:"Bitte wählen"})}),e.jsx(xe,{children:$t.map(s=>e.jsx(C,{value:s.value,children:s.label},s.value))})]})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Vorname"}),e.jsx(w,{className:"h-9",value:t.first_name||"",onChange:s=>y({...t,first_name:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Nachname"}),e.jsx(w,{className:"h-9",value:t.last_name||"",onChange:s=>y({...t,last_name:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Position"}),e.jsx(w,{className:"h-9",value:t.job_title||"",onChange:s=>y({...t,job_title:s.target.value}),placeholder:"z. B. Einkaufsleitung"})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Firma"})}),e.jsxs(M,{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-4",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Firma / Institution"}),e.jsx(w,{className:"h-9",value:t.company_name||"",onChange:s=>y({...t,company_name:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Firma (Zusatz, 2. Zeile)"}),e.jsx(w,{className:"h-9",value:t.company_name_2||"",onChange:s=>y({...t,company_name_2:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Branche"}),e.jsx(w,{className:"h-9",value:t.industry||"",onChange:s=>y({...t,industry:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Website"}),e.jsx(w,{className:"h-9",value:t.website||"",onChange:s=>y({...t,website:s.target.value}),placeholder:"www.firma.de"})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Kontakt"})}),e.jsxs(M,{className:"space-y-3",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsxs(j,{className:"text-xs",children:["E-Mail (Login)",W?" *":""]}),W?e.jsx(w,{className:"h-9",type:"email",autoComplete:"off",value:t.email||"",onChange:s=>y({...t,email:s.target.value}),placeholder:"[email protected]"}):e.jsxs("div",{className:"flex gap-2",children:[e.jsx(w,{className:"h-9",value:t.email,disabled:!0}),e.jsx(L,{type:"button",variant:"outline",size:"sm",className:"h-9",onClick:Na,title:"Login-E-Mail ändern",children:e.jsx(on,{className:"h-4 w-4"})})]})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"E-Mail für Rechnungen"}),e.jsx(w,{className:"h-9",type:"email",value:t.billing_email||"",onChange:s=>y({...t,billing_email:s.target.value}),placeholder:"[email protected]"})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-3",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Telefon"}),e.jsx(w,{className:"h-9",value:t.phone||"",onChange:s=>y({...t,phone:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Mobil"}),e.jsx(w,{className:"h-9",value:t.mobile||"",onChange:s=>y({...t,mobile:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Fax"}),e.jsx(w,{className:"h-9",value:t.fax||"",onChange:s=>y({...t,fax:s.target.value})})]})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Steuer & Rechnung"})}),e.jsxs(M,{className:"grid gap-3 sm:grid-cols-2 lg:grid-cols-5",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"USt-IdNr."}),e.jsx(w,{className:"h-9",value:t.vat_id||"",onChange:s=>y({...t,vat_id:s.target.value}),placeholder:"DE123456789"})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Steuernummer"}),e.jsx(w,{className:"h-9",value:t.tax_number||"",onChange:s=>y({...t,tax_number:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Leitweg-ID"}),e.jsx(w,{className:"h-9",value:t.leitweg_id||"",onChange:s=>y({...t,leitweg_id:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Bestellreferenz"}),e.jsx(w,{className:"h-9",value:t.buyer_reference||"",onChange:s=>y({...t,buyer_reference:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Alte Kundennummer"}),e.jsx(w,{className:"h-9",value:t.old_customer_id||"",onChange:s=>y({...t,old_customer_id:s.target.value})})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Konditionen & Logistik"})}),e.jsxs(M,{className:"space-y-3",children:[e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Bevorzugte Zahlart"}),e.jsxs(me,{value:t.preferred_payment_method||"none",onValueChange:s=>y({...t,preferred_payment_method:s==="none"?null:s}),children:[e.jsx(ue,{className:"h-9",children:e.jsx(he,{})}),e.jsxs(xe,{children:[e.jsx(C,{value:"none",children:"Keine Angabe"}),e.jsx(C,{value:"advance_payment",children:"Vorkasse"}),e.jsx(C,{value:"invoice",children:"Kauf auf Rechnung"}),e.jsx(C,{value:"sepa",children:"SEPA-Lastschrift"}),e.jsx(C,{value:"stripe",children:"Karte"}),e.jsx(C,{value:"paypal",children:"PayPal"})]})]})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Kunde seit"}),e.jsx(w,{className:"h-9",type:"date",value:t.customer_since||"",onChange:s=>y({...t,customer_since:s.target.value||null})})]})]}),e.jsxs("div",{className:"grid gap-3 sm:grid-cols-2",children:[e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Zahlungsziel für manuelle Aufträge (Tage)"}),e.jsx(w,{className:"h-9",type:"number",min:"1",max:"365",value:t.offline_payment_days??"",placeholder:"Standard",onChange:s=>y({...t,offline_payment_days:s.target.value===""?null:Number(s.target.value)})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Skonto für manuelle Aufträge (%)"}),e.jsx(w,{className:"h-9",type:"number",min:"0",max:"100",step:"0.01",value:t.offline_skonto_percent??"",placeholder:"Standard",onChange:s=>y({...t,offline_skonto_percent:s.target.value===""?null:Number(s.target.value)})})]})]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:t.offline_payment_days!=null||t.offline_skonto_percent!=null?`${t.offline_payment_days??(t.preferred_payment_method==="advance_payment"?7:10)} Tage ${Number(t.offline_skonto_percent??(t.preferred_payment_method==="advance_payment"?3:0))>0?`mit ${Number(t.offline_skonto_percent??(t.preferred_payment_method==="advance_payment"?3:0)).toLocaleStr
25ing("de-DE")} % Skonto`:"netto"}`:"Standard: 10 Tage netto (Vorkasse: 7 Tage, 3 % Skonto)."}),t.preferred_payment_method==="sepa"&&e.jsxs("div",{className:"grid gap-3 rounded-md border p-3 sm:grid-cols-2",children:[e.jsxs("div",{className:"sm:col-span-2",children:[e.jsx(j,{className:"text-xs",children:"IBAN (für SEPA-Firmenlastschrift)"}),e.jsx(w,{className:"h-9 font-mono",value:t.sepa_iban?fn(t.sepa_iban):"",onChange:s=>y({...t,sepa_iban:Es(s.target.value)}),placeholder:"DE12 3456 7890 1234 5678 90"}),t.sepa_iban&&!Ds(t.sepa_iban)&&e.jsx("p",{className:"mt-1 text-xs text-destructive",children:"IBAN ungültig"})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"BIC (optional)"}),e.jsx(w,{className:"h-9",value:t.sepa_bic||"",onChange:s=>y({...t,sepa_bic:s.target.value})})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Kontoinhaber (optional)"}),e.jsx(w,{className:"h-9",value:t.sepa_account_holder||"",onChange:s=>y({...t,sepa_account_holder:s.target.value}),placeholder:t.company_name||""})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Mandatsreferenz"}),e.jsx(w,{className:"h-9",value:t.sepa_mandate_reference||"",onChange:s=>y({...t,sepa_mandate_reference:s.target.value}),placeholder:t.customer_number||"Kundennummer"})]}),e.jsxs("div",{children:[e.jsx(j,{className:"text-xs",children:"Mandatsdatum"}),e.jsx(w,{className:"h-9",type:"date",value:t.sepa_mandate_date||"",onChange:s=>y({...t,sepa_mandate_date:s.target.value||null})})]}),e.jsx("p",{className:"text-xs text-muted-foreground sm:col-span-2",children:"Mit IBAN druckt jede neue Rechnung einen Abbuchungshinweis (gekürzte IBAN, Mandatsreferenz, Gläubiger-ID) statt der Überweisungsdaten."})]})]})]}),e.jsxs(P,{children:[e.jsx(O,{className:"pb-2",children:e.jsx(U,{className:"text-sm",children:"Status & Einwilligungen"})}),e.jsxs(M,{className:"space-y-3",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-6",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Ne,{id:"is_active",checked:t.is_active||!1,onCheckedChange:s=>y({...t,is_active:!!s})}),e.jsx(j,{htmlFor:"is_active",className:"cursor-pointer text-sm",children:"Kunde ist aktiv"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Ne,{id:"marketing-opt-in",checked:!!t.marketing_opt_in,onCheckedChange:s=>y({...t,marketing_opt_in:s===!0,marketing_opt_in_at:s===!0?t.marketing_opt_in_at||new Date().toISOString():null})}),e.jsxs(j,{htmlFor:"marketing-opt-in",className:"cursor-pointer text-sm",children:["Werbeeinwilligung erteilt",t.marketing_opt_in&&t.marketing_opt_in_at&&e.jsxs("span",{className:"text-xs text-muted-foreground ml-1",children:["(seit ",new Date(t.marketing_opt_in_at).toLocaleDateString("de-DE"),")"]})]})]})]}),W?e.jsxs("div",{className:"flex items-center space-x-2 pt-3 border-t",children:[e.jsx(Ne,{id:"send-activation-new",checked:es,onCheckedChange:s=>et(s===!0)}),e.jsx(j,{htmlFor:"send-activation-new",className:"cursor-pointer text-sm",children:"Nach dem Anlegen Aktivierungs-E-Mail senden (Einmal-Link, 48 Stunden gültig)"})]}):e.jsxs("div",{className:"flex flex-wrap items-center gap-2 pt-1 border-t",children:[e.jsxs(L,{type:"button",variant:"outline",size:"sm",className:"mt-3",disabled:as||!t.email,onClick:()=>at(t),children:[as?e.jsx(ye,{className:"h-4 w-4 mr-2 animate-spin"}):null,"Aktivierungs-E-Mail senden"]}),e.jsx("span",{className:"text-xs text-muted-foreground mt-3",children:"Einmal-Link, 48 Stunden gültig – der Kunde legt sein Passwort selbst fest."})]})]})]})]}),e.jsx(pe,{value:"adressen",className:"flex-1 overflow-y-auto",children:e.jsxs("div",{className:`grid gap-6 ${t.billing_is_shipping_address?"lg:grid-cols-1":"lg:grid-cols-2"}`,children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(Ot,{className:"h-4 w-4"})," Rechnungsadresse"]}),re.filter(s=>s.type==="billing").length===0&&e.jsxs(L,{type:"button",variant:"outline",size:"sm",onClick:()=>gt("billing"),children:[e.jsx(ks,{className:"h-4 w-4 mr-2"})," Rechnungsadresse anlegen"]})]}),re.filter(s=>s.type==="billing").length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-6 text-center border rounded-md",children:"Keine Rechnungsadresse hinterlegt."}):re.filter(s=>s.type==="billing").map((s,a)=>e.jsx(P,{children:e.jsxs(M,{className:"pt-4 space-y-4",children:[a>0&&e.jsxs("div",{className:"flex items-center justify-between rounded-md border border-dashed p-2 text-xs text-muted-foreground",children:[e.jsx("span",{children:"Weitere (alte) Rechnungsadresse – pro Konto gilt nur eine."}),e.jsxs(L,{type:"button",variant:"ghost",size:"sm",className:"text-destructive",onClick:()=>pt(s.id),children:[e.jsx(Ie,{className:"h-4 w-4 mr-1"})," Entfernen"]})]}),e.jsx(Rt,{address:s,onChange:(r,x)=>Cs(s.id,r,x),notesLabel:t.billing_is_shipping_address?"Hinweis zur Rechnungsadresse / Lieferadresse":"Hinweis zur Rechnungsadresse",notesPlaceholder:t.billing_is_shipping_address?"Hinweise für Rechnungsstellung und Warenanlieferung":void 0})]})},s.id)),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Ne,{id:"billing-is-shipping-addr",checked:!!t.billing_is_shipping_address,onCheckedChange:s=>{y({...t,billing_is_shipping_address:s===!0})}}),e.jsx(j,{htmlFor:"billing-is-shipping-addr",className:"cursor-pointer text-sm",children:"Rechnungsadresse ist zugleich Lieferadresse"})]})]}),(!t.billing_is_shipping_address||re.some(s=>s.type==="shipping"&&(s.street||"").trim()))&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-sm font-semibold flex items-center gap-2",children:[e.jsx(mn,{className:"h-4 w-4"})," Lieferadressen (",re.filter(s=>s.type==="shipping").length,")"]}),e.jsxs(L,{type:"button",variant:"outline",size:"sm",onClick:()=>gt("shipping"),children:[e.jsx(ks,{className:"h-4 w-4 mr-2"})," Neue Lieferadresse"]})]}),re.filter(s=>s.type==="shipping").length===0?e.jsx("p",{className:"text-sm text-muted-foreground py-6 text-center border rounded-md",children:"Keine Lieferadresse hinterlegt."}):re.filter(s=>s.type==="shipping").map((s,a)=>e.jsx(P,{className:`border-l-4 ${a%2===0?"border-l-primary bg-primary/5":"border-l-accent bg-accent/5"}`,children:e.jsxs(M,{className:"pt-4 space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:s.id.startsWith("new-")?"Neue Lieferadresse":`Lieferadresse ${a+1}`}),e.jsxs(L,{type:"button",variant:"ghost",size:"sm",className:"text-destructive hover:text-destructive hover:bg-destructive/10",onClick:()=>pt(s.id),children:[e.jsx(Ie,{className:"h-4 w-4 mr-1"})," Löschen"]})]}),e.jsx(Rt,{address:s,onChange:(r,x)=>Cs(s.id,r,x),notesLabel:"Lieferhinweis",notesPlaceholder:"z. B. Anlieferung nur vormittags, Hebebühne erforderlich"}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Ne,{id:`shipping-default-${s.id}`,checked:s.is_default,onCheckedChange:r=>Cs(s.id,"is_default",!!r)}),e.jsx(j,{htmlFor:`shipping-default-${s.id}`,className:"cursor-pointer",children:"Standard-Lieferadresse"})]})]})},s.id))]})]})}),e.jsx(pe,{value:"ansprechpartner",className:"space-y-4 flex-1 overflow-y-auto",children:W||!(t!=null&&t.id)?e.jsx("div",{className:"rounded-md border border-dashed p-8 text-center text-muted-foreground",children:"Bitte zuerst die Stammdaten speichern, danach können Ansprechpartner erfasst werden."}):e.jsx(Tn,{customerId:t.id})}),e.jsx(pe,{value:"spezial",className:"space-y-4 flex-1 overflow-y-auto",children:e.jsx(Rn,{customerId:t.id,customerEmail:t.email})}),e.jsx(pe,{value:"bestellungen",className:"space-y-4",children:e.jsxs(P,{children:[e.jsx(O,{children:e.jsxs(U,{className:"text-base flex items-center gap-2",children:[e.jsx(Ps,{className:"h-5 w-5"}),"Bestellhistorie (",ns.length," Bestellungen)"]})}),e.jsx(M,{children:ns.length>0?e.jsxs(Rs,{children:[e.jsx(Is,{children:e.jsxs(Ke,{children:[e.jsx(V,{children:"Bestell-Nr."}),e.jsx(V,{children:"Datum"}),e.jsx(V,{children:"Uhrzeit"}),e.jsx(V,{children:"Betrag"}),e.jsx(V,{children:"Status"}),e.jsx(V,{children:"Aktion"})]})}),e.jsx(Ks,{children:ns.map(s=>e.jsxs(Ke,{className:"cursor-pointer hover:bg-muted/50",onClick:()=>ws(s),children:[e.jsx($,{className:"font-mono text-sm",children:s.order_number}),e.jsx($,{children:new Date(s.created_at).toLocaleDateString("de-DE")}),e.jsx($,{children:new Date(s.created_at).toLocaleTimeString("de-DE",{hour:"2-digit",minute:"2-digit"})}),e.jsx($,{className:"font-semibold",children:Se(s.total_amount)}),e.jsx($,{children:kt(s.status)}),e.jsx($,{children:e.jsxs("div",{className:"flex gap-1",children:[e.jsx(L,{size:"sm",variant:"outline",onClick:a=>{a.stopPropagation(),ws(s)},title:"Bestellung ansehen",children:e.jsx(Kt,{className:"h-4 w-4"})}),e.jsx(L,{size:"sm",variant:"outline",onClick:a=>{a.stopPropagation(),$e(!1),l(`/admin/orders?highlight=${s.id}`)},title:"In Bestellverwaltung öffnen",children:e.jsx(un,{className:"h-4 w-4"})})]})})]},s.id))})]}):e.jsx("p",{className:"text-muted-foreground",children:"Noch keine Bestellungen vorhanden"})})]})}),e.jsx(pe,{value:"verlauf",className:"space-y-4 flex-1 overflow-y-auto",children:e.jsx($n,{active:ps==="verlauf",userId:t.id||null,email:t.email||null,customerName:[t.first_name,t.last_name].filter(
25Boolean).join(" ")||t.company_name||null,lastLoginAt:t.last_login_at})}),e.jsxs(pe,{value:"notizen",className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(j,{children:"Neue Notiz"}),e.jsx(Os,{value:js,onChange:s=>Js(s.target.value),rows:3,placeholder:"Notiz eingeben – Datum und Ihre E-Mail-Adresse werden automatisch vorangestellt"}),e.jsx(L,{size:"sm",onClick:ea,disabled:!js.trim(),children:"Notiz hinzufügen"})]}),e.jsxs("div",{children:[e.jsx(j,{children:"Admin-Notizen"}),e.jsx(Os,{value:t.notes||"",onFocus:sa,onChange:s=>y({...t,notes:s.target.value}),rows:12,placeholder:"Interne Notizen zum Kunden..."}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Datum, Uhrzeit und Ihre E-Mail-Adresse werden bei jedem neuen Eintrag automatisch vorangestellt. Nur für Administratoren sichtbar."})]})]}),e.jsx(pe,{value:"versionen",className:"space-y-4 flex-1 overflow-y-auto",children:!W&&e.jsx(Yn,{customerId:t.id,active:ps==="versionen",onRestore:ga})})]}),e.jsxs("div",{className:"flex gap-4 pt-4 border-t shrink-0",children:[e.jsx(L,{onClick:ht,disabled:vs,children:W?"Kunde anlegen":"Speichern"}),e.jsx(L,{variant:"outline",onClick:()=>{$e(!1),y(null),Xe(!1),De("stammdaten")},children:"Abbrechen"})]})]})}),e.jsx(us,{open:ca,onOpenChange:mt,children:e.jsxs(hs,{className:"max-w-lg",children:[e.jsx(xs,{children:e.jsx(gs,{className:"flex items-center gap-2",children:"USt-IdNr. Prüfung (EU-Register)"})}),Te&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-muted rounded-lg space-y-2",children:[e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Kunde:"}),e.jsxs("span",{className:"font-medium",children:[Te.first_name," ",Te.last_name]})]}),e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Firma:"}),e.jsx("span",{className:"font-medium",children:Te.company_name||"-"})]}),e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"USt-IdNr.:"}),e.jsx("span",{className:"font-mono font-medium",children:Te.vat_id||"-"})]})]}),oa?e.jsxs("div",{className:"flex flex-col items-center justify-center py-8 gap-3",children:[e.jsx(ye,{className:"h-8 w-8 animate-spin text-primary"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Prüfe USt-IdNr. im EU-Register (VIES)..."})]}):X?(()=>{var J,q;const s=X.status??(X.valid?"valid":"invalid"),a=s==="valid",r=s==="unavailable",x=a?"bg-green-50 border border-green-200 dark:bg-green-900/20 dark:border-green-800":r?"bg-amber-50 border border-amber-200 dark:bg-amber-900/20 dark:border-amber-800":"bg-red-50 border border-red-200 dark:bg-red-900/20 dark:border-red-800",o=a?"text-green-800 dark:text-green-200":r?"text-amber-800 dark:text-amber-200":"text-red-800 dark:text-red-200",E=a?"Bestätigt":r?"Prüfung nicht möglich":"Nicht bestätigt",K=(J=X.companyName)==null?void 0:J.trim(),N=(q=Te.company_name)==null?void 0:q.trim(),oe=a&&K&&N&&K.toLowerCase()!==N.toLowerCase();return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:`p-4 rounded-lg flex items-start gap-3 ${x}`,children:[a?e.jsx(Tt,{className:"h-5 w-5 text-green-600 flex-shrink-0 mt-0.5"}):e.jsx(zt,{className:`h-5 w-5 flex-shrink-0 mt-0.5 ${r?"text-amber-600":"text-red-600"}`}),e.jsxs("div",{className:"space-y-1",children:[e.jsx("p",{className:`font-medium ${o}`,children:E}),e.jsx("p",{className:"text-sm",children:X.message}),X.checkedAt&&e.jsxs("p",{className:"text-xs text-muted-foreground",children:["Geprüft am ",new Date(X.checkedAt).toLocaleString("de-DE"),X.source?` · Quelle: ${X.source}`:""]})]})]}),a&&(X.companyName||X.companyAddress)&&e.jsxs("div",{className:"p-4 bg-muted rounded-lg space-y-2",children:[e.jsx("p",{className:"font-medium text-sm",children:"Registrierte Firmendaten:"}),X.companyName&&e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Name:"}),e.jsx("span",{children:X.companyName})]}),X.companyAddress&&e.jsxs("div",{className:"flex justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Adresse:"}),e.jsx("span",{children:X.companyAddress})]})]}),oe&&e.jsx("div",{className:"p-4 bg-amber-50 border border-amber-200 rounded-lg dark:bg-amber-900/20 dark:border-amber-800",children:e.jsxs("p",{className:"text-sm text-amber-800 dark:text-amber-200",children:[e.jsx("strong",{children:"Hinweis:"})," Der hinterlegte Firmenname weicht vom amtlichen Namen ab."]})}),a&&X.isAustrian&&e.jsx("div",{className:"p-4 bg-blue-50 border border-blue-200 rounded-lg dark:bg-blue-900/20 dark:border-blue-800",children:e.jsxs("p",{className:"text-sm text-blue-800 dark:text-blue-200",children:[e.jsx("strong",{children:"Steuerhinweis:"}
25)," Bei gültiger österreichischer USt-IdNr. handelt es sich um einen innergemeinschaftlichen B2B-Verkauf. Die deutsche MwSt. entfällt (Reverse-Charge-Verfahren)."]})}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(L,{variant:"outline",size:"sm",onClick:()=>St(Te),children:[e.jsx(Et,{className:"h-4 w-4 mr-2"}),"Erneut prüfen"]})})]})})():null]})]})}),ot&&e.jsx(Ln,{open:la,onOpenChange:dt,order:ot}),e.jsx(Fs,{open:Oe,onOpenChange:Ae,children:e.jsxs(Vs,{children:[e.jsxs($s,{children:[e.jsxs(Us,{className:"flex items-center gap-2",children:[e.jsx(Ms,{className:"h-5 w-5 text-destructive"}),"Kunde löschen?"]}),e.jsx(Hs,{asChild:!0,children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{children:"Sie sind dabei, folgenden Kunden zu löschen:"}),ne&&e.jsxs("div",{className:"p-3 bg-muted rounded-lg space-y-1 text-sm",children:[e.jsxs("div",{children:[e.jsx("strong",{children:"Kundennr.:"})," ",ne.customer_number||"-"]}),e.jsxs("div",{children:[e.jsx("strong",{children:"Name:"})," ",ne.first_name," ",ne.last_name]}),e.jsxs("div",{children:[e.jsx("strong",{children:"Firma:"})," ",ne.company_name||"-"]}),e.jsxs("div",{children:[e.jsx("strong",{children:"E-Mail:"})," ",ne.email]}),(ne.orderCount??0)>0&&e.jsxs("div",{className:"text-amber-600 font-medium mt-2",children:["⚠️ Dieser Kunde hat ",ne.orderCount," Bestellung(en)!"]})]}),e.jsx("p",{className:"text-destructive font-medium",children:"Diese Aktion kann nicht rückgängig gemacht werden. Das Profil und alle zugehörigen Adressen werden gelöscht."})]})})]}),e.jsxs(Zs,{children:[e.jsx(Ws,{disabled:Fe,children:"Abbrechen"}),e.jsx(qs,{onClick:wa,disabled:Fe,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:Fe?e.jsxs(e.Fragment,{children:[e.jsx(ye,{className:"mr-2 h-4 w-4 animate-spin"}),"Lösche..."]}):e.jsxs(e.Fragment,{children:[e.jsx(Ie,{className:"mr-2 h-4 w-4"}),"Endgültig löschen"]})})]})]})}),e.jsx(Fs,{open:Ge,onOpenChange:s=>!u&&Pe(s),children:e.jsxs(Vs,{className:"max-w-[calc(100vw-1rem)] sm:max-w-2xl",children:[e.jsxs($s,{children:[e.jsxs(Us,{className:"flex items-center gap-2",children:[e.jsx(Ms,{className:"h-5 w-5 text-destructive"}),v.length," Kunden löschen?"]}),e.jsx(Hs,{asChild:!0,children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("p",{children:"Folgende Kunden werden endgültig gelöscht (Auth-Account, Profil, Adressen, Warenkorb, Abos). Bestellungen bleiben aus rechtlichen Gründen (GoBD) erhalten und werden anonymisiert."}),e.jsx("div",{className:"max-h-64 overflow-y-auto p-3 bg-muted rounded-lg space-y-1 text-sm",children:g.filter(s=>v.includes(s.id)).map(s=>e.jsxs("div",{className:"flex items-center justify-between gap-2 border-b border-border/50 last:border-0 py-1",children:[e.jsxs("span",{className:"truncate",children:[e.jsx("strong",{children:s.customer_number||"—"})," ",[s.first_name,s.last_name].filter(Boolean).join(" ")||s.company_name||s.email]}),e.jsx("span",{className:"text-xs text-muted-foreground whitespace-nowrap",children:(s.orderCount??0)>0&&`⚠️ ${s.orderCount} Best.`})]},s.id))}),e.jsx("p",{className:"text-destructive font-medium",children:"Diese Aktion kann nicht rückgängig gemacht werden."}),u&&e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Lösche ",H.done," / ",H.total,"..."]})]})})]}),e.jsxs(Zs,{children:[e.jsx(Ws,{disabled:u,children:"Abbrechen"}),e.jsx(qs,{onClick:Ca,disabled:u,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:u?e.jsxs(e.Fragment,{children:[e.jsx(ye,{className:"mr-2 h-4 w-4 animate-spin"}),"Lösche ",H.done,"/",H.total,"..."]}):e.jsxs(e.Fragment,{children:[e.jsx(Ie,{className:"mr-2 h-4 w-4"}),v.length," Kunden endgültig löschen"]})})]})]})}),e.jsx(us,{open:ba,onOpenChange:s=>!cs&&is(s),children:e.jsxs(hs,{className:"max-w-[calc(100vw-1rem)] sm:max-w-md",children:[e.jsx(xs,{children:e.jsx(gs,{children:"Login-E-Mail ändern"})}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(j,{children:"Bisherige E-Mail"}),e.jsx(w,{value:(t==null?void 0:t.email)||"",disabled:!0,className:"bg-muted"})]}),e.jsxs("div",{children:[e.jsx(j,{children:"Neue E-Mail *"}
25),e.jsx(w,{type:"email",value:ft,onChange:s=>jt(s.target.value),placeholder:"[email protected]",autoComplete:"off"}),e.jsx("p",{className:"text-sm text-muted-foreground mt-1",children:"Keine Umlaute oder Sonderzeichen. Der Kunde meldet sich anschließend mit dieser Adresse an."})]}),e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Ne,{id:"sync-order-emails",checked:_t,onCheckedChange:s=>vt(!!s)}),e.jsx(j,{htmlFor:"sync-order-emails",className:"text-sm font-normal",children:"Bestell-E-Mails (Gastbestellungen) dieses Kunden mitziehen"})]}),e.jsxs("div",{className:"rounded-md border border-destructive/40 bg-destructive/5 p-3 flex items-start gap-2",children:[e.jsx(Ne,{id:"confirm-email-change",checked:Nt,onCheckedChange:s=>yt(!!s)}),e.jsx(j,{htmlFor:"confirm-email-change",className:"text-sm font-normal",children:"Mir ist bewusst: Der Kunde kann sich mit der bisherigen Adresse nicht mehr anmelden."})]})]}),e.jsxs("div",{className:"flex justify-end gap-2 pt-2",children:[e.jsx(L,{variant:"outline",onClick:()=>is(!1),disabled:cs,children:"Abbrechen"}),e.jsx(L,{onClick:ya,disabled:cs||!Nt,children:cs?e.jsxs(e.Fragment,{children:[e.jsx(ye,{className:"mr-2 h-4 w-4 animate-spin"}),"Speichere..."]}):"E-Mail ändern"})]})]})})]})}export{Pr as CustomersManager};

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.