vendor: 5,140 bytes, lines 1-11
1import{c as De,ax as Ie,r as p,aA as ge,j as e,aC as Y,az as oe,aQ as Xe,aE as es,aD as ss,b7 as Pe,aB as as,ay as rs,b8 as ts,b9 as ns,a as Ee,a9 as is,d as W,K as v,E as G,q as j,aj as w,s as I,ah as pe,I as D,l as T,m as z,n as K,o as $,p as b,ai as Z,a8 as ls,x as Be,h as N,i as k,t as E,v as F,w as je,B,a6 as Re,as as me,a3 as cs,a2 as ie,L as Q,F as ue,Y as ds,Z as os,_ as H,$ as U,D as ms,U as us,g as hs,G as xs,a0 as gs,Q as _e}from"./index-Cew4R4zJ.js";import{u as V}from"./useMutation-DcHANNSa.js";import{D as X,b as ee,c as se,d as ae,e as re,a as fe}from"./dialog-CWzllWZF.js";import{T as te}from"./textarea-DPesHxu1.js";import{L as ps}from"./loader-circle-BnpbskcS.js";import{M as js}from"./megaphone-C8Bz2Ohm.js";import{T as fs}from"./truck-DmK-kz30.js";import{S as ye}from"./switch-D6SJIiBD.js";import{S as vs}from"./ServiceMonitoring-kc9jB9pz.js";import{A as Fe,a as Me}from"./alert-Cj0vuxK6.js";import{D as le}from"./database-D49w_PR2.js";import{P as q}from"./plus-DXz3uaPP.js";import{C as Ne}from"./calendar-Dq0_tax7.js";import{R as we}from"./refresh-cw-DkE18_3d.js";import{H as Te}from"./hard-drive-C6rtJfGI.js";import{C as he}from"./circle-check-big-CDcFKoNL.js";import{E as bs}from"./eye-off-DqsUMt8H.js";import{C as ke}from"./code-CiyDN9Zf.js";import{C as M}from"./crown-CbaZG9RR.js";import{E as _s}from"./euro-B8VoH7YC.js";import{p as ce,d as ys}from"./parseISO-pEgTqZde.js";import{S as Ns}from"./server-Bd2XWlg2.js";import{f as Se}from"./format-n1H2z-4w.js";import"./progress-DBpKARnj.js";import"./monitor-3afzNvdT.js";import"./activity-f_pDE9XC.js";/** 2 * @license lucide-react v0.462.0 - ISC 3 * 4 * This source code is licensed under the ISC license. 5 * See the LICENSE file in the root directory of this source tree. 6 */const ws=De("Copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);/** 7 * @license lucide-react v0.462.0 - ISC 8 * 9 * This source code is licensed under the ISC license. 10 * See the LICENSE file in the root directory of this source tree. 11 */const de=De("Key",[["path",{d:"m15.5 7.5 2.3 2.3a1 1 0 0 0 1.4 0l2.1-2.1a1 1 0 0 0 0-1.4L19 4",key:"g0fldk"}],["path",{d:"m21 2-9.6 9.6",key:"1j0ho8"}],["circle",{cx:"7.5",cy:"15.5",r:"5.5",key:"yqb3hr"}]]);var ve="Radio",[ks,ze]=Ie(ve),[Ss,Cs]=ks(ve),Ke=p.forwardRef((s,l)=>{const{__scopeRadio:u,name:f,checked:d=!1,required:r,disabled:c,value:x="on",onCheck:m,form:t,...g}=s,[i,n]=p.useState(null),_=ge(l,o=>n(o)),y=p.useRef(!1),P=i?t||!!i.closest("form"):!0;return e.jsxs(Ss,{scope:u,checked:d,disabled:c,children:[e.jsx(Y.button,{type:"button",role:"radio","aria-checked":d,"data-state":Le(d),"data-disabled":c?"":void 0,disabled:c,value:x,...g,ref:_,onClick:oe(s.onClick,o=>{d||m==null||m(),P&&(y.current=o.isPropagationStopped(),y.current||o.stopPropagation())})}),P&&e.jsx(qe,{control:i,bubbles:!y.current,name:f,value:x,checked:d,required:r,disabled:c,form:t,style:{transform:"translateX(-100%)"}})]})});Ke.displayName=ve;var $e="RadioIndicator",Ve=p.forwardRef((s,l)=>{const{__scopeRadio:u,forceMount:f,...d}=s,r=Cs($e,u);return e.jsx(Xe,{present:f||r.checked,children:e.jsx(Y.span,{"data-state":Le(r.checked),"data-disabled":r.disabled?"":void 0,...d,ref:l})})});Ve.displayName=$e;var As="RadioBubbleInput",qe=p.forwardRef(({__scopeRadio:s,control:l,checked:u,bubbles:f=!0,...d},r)=>{const c=p.useRef(null),x=ge(c,r),m=es(u),t=ss(l);return p.useEffect(()=>{const g=c.current;if(!g)return;const i=window.HTMLInputElement.prototype,_=Object.getOwnPropertyDescriptor(i,"checked").set;if(m!==u&&_){const y=new Event("click",{bubbles:f});_.call(g,u),g.dispatchEvent(y)}},[m,u,f]),e.jsx(Y.input,{type:"radio","aria-hidden":!0,defaultChecked:u,...d,tabIndex:-1,ref:x,style:{...d.style,...t,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});qe.displayName=As;function Le(s){return s?"checked":"unchecked"}var Ds=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],ne="RadioGroup",[Is,ga]=Ie(ne,[Pe,ze]),Oe=Pe(),Ge=ze(),[Ps,Es]=Is(ne),He=p.forwardRef((s,l)=>{const{__scopeRadioGroup:u,name:f,defaultValue:d,value:r,required:c=!1,disabled:x=!1,orientation:m,dir:t,loop:g=!0,onValueChange:i,...n}=s,_=Oe(u),y=as(t),[P,o]=rs({prop:r,defaultProp:d??null,onChange:i,caller:ne});return e.jsx(Ps,{scope:u,name:f,required:c,disabled:x,value:P,onValueChange:o,children:e.jsx(ts,{asChild:!0,..._,orientation:m,dir:y,loop:g,children:e.jsx(Y.div,{role:"radiogroup","aria-required":c,"aria-orientation":m,"data-disabled":x?"":void 0,dir:y,...n,ref:l})})})});He.displayName=ne;var Ue="RadioGroupItem",We=p.forwardRef((s,l)=>{const{__scopeRadioGroup:u,disabled:f,...d}=s,r=Es(Ue,u),c=r.disabled||f,x=Oe(u),m=Ge(u),t=p.useRef(null),g=ge(l,t),i=r.value===d.value,n=p.useRef(!1);return p.useEffect(()=>{const _=P=>{Ds.includes(P.key)&&(n.current=!0)},y=()=>n.current=!1;return document.addEventListener("keydown",_),document.addEventListener("keyup",y),()=>{document.removeEventListener("keydown",_),document.removeEventListener("keyup",y)}},[]),e.jsx(ns,{asChild:!0,...x,focusable:!c,active:i,children:e.jsx(Ke,{disabled:c,required:r.required,
11checked:i,...m,...d,name:r.name,ref:g,onCheck:()=>r.onValueChange(d.value),onKeyDown:oe(_=>{_.key==="Enter"&&_.preventDefault()}),onFocus:oe(d.onFocus,()=>{var _;n.current&&((_=t.current)==null||_.click())})})})});We.displayName=Ue;var Bs="RadioGroupIndicator",Qe=p.forwardRef((s,l)=>{const{__scopeRadioGroup:u,...f}=s,d=Ge(u);return e.jsx(Ve,{...d,...f,ref:l})});Qe.displayName=Bs;var Je=He,Ze=We,Rs=Qe;const Ye=p.forwardRef(({className:s,...l},u)=>e.jsx(Je,{className:Ee("grid gap-2",s),...l,ref:u}));Ye.displayName=Je.displayName;const xe=p.forwardRef(({className:s,...l},u)=>e.jsx(Ze,{ref:u,className:Ee("aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",s),...l,children:e.jsx(Rs,{className:"flex items-center justify-center",children:e.jsx(is,{className:"h-2.5 w-2.5 fill-current text-current"})})}));xe.displayName=Ze.displayName;const Fs=({open:s,onOpenChange:l})=>{const{user:u}=W(),[f,d]=p.useState("monthly"),[r,c]=p.useState(""),[x,m]=p.useState(!1),t={monthly:29.99,yearly:299.99},g=async()=>{if(!(u!=null&&u.id)){w.error("Sie müssen angemeldet sein");return}m(!0);try{const{error:i}=await I.from("webhostmanager_pro_requests").insert({user_id:u.id,request_type:"upgrade",billing_cycle:f,price:t[f],currency:"EUR",notes:r||null,status:"pending"});if(i)throw i;w.success("Upgrade-Anfrage gesendet!",{description:"Wir werden Ihnen in Kürze eine Rechnung per E-Mail zusenden."}),l(!1),c("")}catch(i){console.error("Error submitting upgrade request:",i),w.error("Fehler beim Senden der Anfrage: "+i.message)}finally{m(!1)}};return e.jsx(X,{open:s,onOpenChange:l,children:e.jsxs(ee,{className:"sm:max-w-[500px]",children:[e.jsxs(se,{children:[e.jsx(ae,{children:"WebHostManager Pro upgraden"}),e.jsx(re,{children:"Wählen Sie Ihren Abrechnungszyklus und senden Sie Ihre Upgrade-Anfrage."})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsx(v,{children:"Abrechnungszyklus wählen"}),e.jsxs(Ye,{value:f,onValueChange:i=>d(i),children:[e.jsxs("div",{className:"flex items-center space-x-2 border rounded-lg p-4 cursor-pointer hover:bg-accent transition-colors",children:[e.jsx(xe,{value:"monthly",id:"monthly"}),e.jsxs("label",{htmlFor:"monthly",className:"flex-1 cursor-pointer",children:[e.jsx("div",{className:"font-medium",children:"Monatlich"}),e.jsxs("div",{className:"text-2xl font-bold",children:[t.monthly.toFixed(2)," â¬"]}),e.jsx("div",{className:"text-sm text-muted-foreground",children:"pro Monat"})]})]}),e.jsxs("div",{className:"flex items-center space-x-2 border rounded-lg p-4 cursor-pointer hover:bg-accent transition-colors",children:[e.jsx(xe,{value:"yearly",id:"yearly"}),e.jsxs("label",{htmlFor:"yearly",className:"flex-1 cursor-pointer",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"font-medium",children:"Jährlich"}),e.jsx("span",{className:"text-xs bg-green-500/10 text-green-700 dark:text-green-400 px-2 py-1 rounded",children:"2 Monate gratis"})]}),e.jsxs("div",{className:"text-2xl font-bold",children:[t.yearly.toFixed(2)," â¬"]}),e.jsx("div",{className:"text-sm text-muted-foreground",children:"pro Jahr (24,99 ⬠/ Monat)"})]})]})]})]}),e.jsxs("div",{className:"border rounded-lg p-4 bg-muted/50",children:[e.jsx("div",{className:"font-semibold mb-3",children:"Enthaltene Pro-Features:"}),e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"24/7 Performance-Monitoring aller Verträge"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Automatische Backup-Verwaltung und -Wiederherstellung"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"API-Zugang für Drittanbieter-Integrationen"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Erweiterte Analysen und Reports"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(G,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Priority-Support"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"notes",children:"Anmerkungen (optional)"}),e.jsx(te,{id:"notes",value:r,onChange:i=>c(i.target.value),placeholder:"Haben Sie besondere Wünsche oder Fragen?",rows:3})]}),e.jsx("div",{className:"text-sm text-muted-foreground border-l-2 pl-4",children:"Nach dem Absenden dieser Anfrage erhalten Sie eine Rechnung per E-Mail. Nach Zahlungseingang wird Ihr Pro-Zugang innerhalb von 24 Stunden aktiviert."})]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(j,{variant:"outline",onClick:()=>l(!1),disabled:x,children:"Abbrechen"}),e.jsx(j,{onClick:g,disabled:x,children:x?e.jsxs(e.Fragment,{children:[e.jsx(ps,{className:"h-4 w-4 mr-2 animate-spin"}),"Wird gesendet..."]}):"Upgrade-Anfrage senden"})]})]})})},Ms=({contract:s})=>{const{user:l}=W(),u=pe(),[f,d]=p.useState(!1),[r,c]=p.useState({title:`Migration: ${s.contract_name}`,description:`Suche Unterstützung bei der Migration von ${s.provider_name}. 12 13Aktuelle Konfiguration: 14${s.contract_type} 15${s.server_location?`Standort: ${s.server_location}`:""} 16${s.disk_space_gb?`Speicher: ${s.disk_space_gb} GB`:""} 17${s.bandwidth_gb?`Bandbreite: ${s.bandwidth_gb} GB`:""} 18${s.email_accounts?`E-Mail Accounts: ${s.email_accounts}`:""} 19${s.databases?`Datenbanken: ${s.databases}`:""} 20 21${s.notes||""}`,category:"hosting",budget_min:Math.floor((s.monthly_cost||s.annual_cost||0)*.5),budget_max:Math.floor((s.monthly_cost||s.annual_cost||0)*2),location:s.server_location||"",deadline:new Date(Date.now()+30*24*60*60*1e3).toISOString().split("T")[0],requirements:{current_provider:s.provider_name,contract_type:s.contract_type,domains:s.domain_names||[],technical_specs:{disk_space_gb:s.disk_space_gb,bandwidth_gb:s.bandwidth_gb,email_accounts:s.email_accounts,databases:s.databases}}}),x=V({mutationFn:async()=>
21{if(!(l!=null&&l.id))throw new Error("User not authenticated");const{data:t,error:g}=await I.from("profiles").select("id").eq("user_id",l.id).single();if(g)throw g;const{data:i,error:n}=await I.from("listings").insert({user_id:l.id,profile_id:t.id,title:r.title,description:r.description,category:r.category,budget_min:r.budget_min,budget_max:r.budget_max,location:r.location,deadline:new Date(r.deadline).toISOString(),requirements:r.requirements,status:"active",currency:"EUR",remote_possible:!0}).select().single();if(n)throw n;return i},onSuccess:()=>{w.success("Ausschreibung wurde erfolgreich erstellt!"),d(!1),u.invalidateQueries({queryKey:["listings"]})},onError:t=>{w.error("Fehler beim Erstellen der Ausschreibung: "+t.message)}}),m=t=>{t.preventDefault(),x.mutate()};return e.jsxs(X,{open:f,onOpenChange:d,children:[e.jsx(fe,{asChild:!0,children:e.jsxs(j,{variant:"outline",size:"sm",children:[e.jsx(js,{className:"h-4 w-4 mr-2"}),"Ausschreiben"]})}),e.jsxs(ee,{className:"max-w-2xl max-h-[80vh] overflow-y-auto",children:[e.jsxs(se,{children:[e.jsx(ae,{children:"Ausschreibung erstellen"}),e.jsx(re,{children:"Erstellen Sie eine Ausschreibung basierend auf Ihrem Hosting-Vertrag für Migration oder Support."})]}),e.jsxs("form",{onSubmit:m,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"title",children:"Titel"}),e.jsx(D,{id:"title",value:r.title,onChange:t=>c(g=>({...g,title:t.target.value})),required:!0})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"category",children:"Kategorie"}),e.jsxs(T,{value:r.category,onValueChange:t=>c(g=>({...g,category:t})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"hosting",children:"Hosting"}),e.jsx(b,{value:"managed",children:"Managed Services"}),e.jsx(b,{value:"cloud",children:"Cloud Services"}),e.jsx(b,{value:"security",children:"Security"}),e.jsx(b,{value:"domain",children:"Domain Services"})]})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"description",children:"Beschreibung"}),e.jsx(te,{id:"description",value:r.description,onChange:t=>c(g=>({...g,description:t.target.value})),rows:8,required:!0})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"budget_min",children:"Budget Min (â¬)"}),e.jsx(D,{id:"budget_min",type:"number",value:r.budget_min,onChange:t=>c(g=>({...g,budget_min:parseInt(t.target.value)||0})),min:"0"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"budget_max",children:"Budget Max (â¬)"}),e.jsx(D,{id:"budget_max",type:"number",value:r.budget_max,onChange:t=>c(g=>({...g,budget_max:parseInt(t.target.value)||0})),min:"0"})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"location",children:"Standort (optional)"}),e.jsx(D,{id:"location",value:r.location,onChange:t=>c(g=>({...g,location:t.target.value}))})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"deadline",children:"Deadline"}),e.jsx(D,{id:"deadline",type:"date",value:r.deadline,onChange:t=>c(g=>({...g,deadline:t.target.value}))})]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(j,{type:"button",variant:"outline",onClick:()=>d(!1),children:"Abbrechen"}),e.jsx(j,{type:"submit",disabled:x.isPending,children:x.isPending?"Erstelle...":"Ausschreibung erstellen"})]})]})]})]})},Ts=({contract:s})=>{const{user:l}=W(),[u,f]=p.useState(!1),[d,r]=p.useState({service_type:"migration",priority:"normal",preferred_contact_method:"email",message:`Ich benötige Hilfe bei der Migration meines Hosting-Vertrags. 22 23Aktueller Vertrag: 24- Anbieter: ${s.provider_name} 25- Vertragsname: ${s.contract_name} 26- Typ: ${s.contract_type} 27- Ablaufdatum: ${new Date(s.end_date).toLocaleDateString("de-DE")} 28${s.domain_names&&s.domain_names.length>0?`- Domains: ${s.domain_names.join(", ")}`:""} 29${s.server_location?`- Standort: ${s.server_location}`:""} 30${s.disk_space_gb?`- Speicher: ${s.disk_space_gb} GB`:""} 31${s.bandwidth_gb?`- Bandbreite: ${s.bandwidth_gb} GB`:""} 32${s.email_accounts?`- E-Mail Accounts: ${s.email_accounts}`:""} 33${s.databases?`- Datenbanken: ${s.databases}`:""} 34${s.customer_id?`- Kunden-ID: ${s.customer_id}`:""} 35 36${s.notes?`Zusätzliche Informationen: ${s.notes}`:""} 37 38Bitte kontaktieren Sie mich für die Planung der Migration.`,phone:"",company:""}),c=V({mutationFn:async()=>
38{if(!(l!=null&&l.id))throw new Error("User not authenticated");const{data:m,error:t}=await I.from("profiles").select("*").eq("user_id",l.id).single();if(t)throw t;const g={to:"[email protected]",subject:`Migration Service Anfrage - ${s.contract_name}`,service_type:d.service_type,priority:d.priority,preferred_contact_method:d.preferred_contact_method,message:d.message,customer_info:{name:m.name,email:m.email,phone:d.phone,company:d.company||m.company},contract_info:{contract_id:s.id,contract_name:s.contract_name,provider_name:s.provider_name,contract_type:s.contract_type,end_date:s.end_date,domain_names:s.domain_names,server_location:s.server_location,customer_id:s.customer_id}},{data:i,error:n}=await I.functions.invoke("send-migration-request",{body:g});if(n)throw n;return i},onSuccess:()=>{w.success("Migration Service Anfrage wurde erfolgreich gesendet!"),f(!1)},onError:m=>{w.error("Fehler beim Senden der Anfrage: "+m.message)}}),x=m=>{m.preventDefault(),c.mutate()};return e.jsxs(X,{open:u,onOpenChange:f,children:[e.jsx(fe,{asChild:!0,children:e.jsxs(j,{variant:"outline",size:"sm",children:[e.jsx(fs,{className:"h-4 w-4 mr-2"}),"Umziehen"]})}),e.jsxs(ee,{className:"max-w-2xl max-h-[80vh] overflow-y-auto",children:[e.jsxs(se,{children:[e.jsx(ae,{children:"Migration Service Anfrage"}),e.jsx(re,{children:"Senden Sie eine Anfrage an das WebHostList Service-Team für Unterstützung bei der Migration."})]}),e.jsxs("form",{onSubmit:x,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"service_type",children:"Service Typ"}),e.jsxs(T,{value:d.service_type,onValueChange:m=>r(t=>({...t,service_type:m})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"migration",children:"Komplette Migration"}),e.jsx(b,{value:"consultation",children:"Migration Beratung"}),e.jsx(b,{value:"partial_migration",children:"Teilmigration"}),e.jsx(b,{value:"emergency_migration",children:"Notfall Migration"})]})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"priority",children:"Priorität"}),e.jsxs(T,{value:d.priority,onValueChange:m=>r(t=>({...t,priority:m})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"low",children:"Niedrig"}),e.jsx(b,{value:"normal",children:"Normal"}),e.jsx(b,{value:"high",children:"Hoch"}),e.jsx(b,{value:"urgent",children:"Dringend"})]})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"preferred_contact_method",children:"Bevorzugte Kontaktmethode"}),e.jsxs(T,{value:d.preferred_contact_method,onValueChange:m=>r(t=>({...t,preferred_contact_method:m})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"email",children:"E-Mail"}),e.jsx(b,{value:"phone",children:"Telefon"}),e.jsx(b,{value:"both",children:"E-Mail und Telefon"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"phone",children:"Telefon (optional)"}),e.jsx(D,{id:"phone",value:d.phone,onChange:m=>r(t=>({...t,phone:m.target.value})),placeholder:"+49 123 456789"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"company",children:"Firma (optional)"}),e.jsx(D,{id:"company",value:d.company,onChange:m=>r(t=>({...t,company:m.target.value})),placeholder:"Firmenname"})]})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"message",children:"Nachricht"}),e.jsx(te,{id:"message",value:d.message,onChange:m=>r(t=>({...t,message:m.target.value})),rows:12,required:!0})]}),e.jsxs("div",{className:"bg-muted p-4 rounded-lg",children:[e.jsx("h4",{className:"font-medium mb-2",children:"Vertragsinformationen werden automatisch übermittelt:"}),e.jsxs("ul",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsxs("li",{children:["⢠Aktueller Anbieter: ",s.provider_name]}),e.jsxs("li",{children:["⢠Vertragsname: ",s.contract_name]}),e.jsxs("li",{children:["⢠Vertragstyp: ",s.contract_type]}),e.jsxs("li",{children:["⢠Ablaufdatum: ",new Date(s.end_date).toLocaleDateString("de-DE")]}),s.domain_names&&s.domain_names.length>0&&e.jsxs("li",{children:["⢠Domains: ",s.domain_names.join(", ")]})]})]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(j,{type:"button",variant:"outline",onClick:()=>f(!1),children:"Abbrechen"}),e.jsx(j,{type:"submit",disabled:c.isPending,children:c.isPending?"Sende...":"Anfrage senden"})]})]})]})]})},J=({rating:s,onRatingChange:l,label:u})=>e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:u}),e.jsx("div",{className:"flex gap-1",children:[1,2,3,4,5].map(f=>e.jsx(j,{type:"button",variant:"ghost",size:"sm",className:"p-1 h-auto",onClick:()=>l(f),children:e.jsx(Be,{className:`h-6 w-6 ${f<=s?"fill-yellow-400 text-yellow-400":"text-gray-300"}`})},f))})]}),zs=({contract:s})=>{const{user:l}=W(),u=pe(),[f,d]=p.useState(!1),[r,c]=p.useState({rating:0,service_rating:0,communication_rating:0,value_rating:0,title:`Bewertung für ${s.provider_name}`,comment:`Ich habe den ${s.contract_type} Tarif "${s.contract_name}" von ${s.provider_name} genutzt.`,would_recommend:!0,public_display:!0,customer_name:"",customer_email:""}),{data:x}=Z({queryKey:["provider-by-name",s.provider_name],queryFn:async()=>{const{data:i,error:n}=await I.from("providers").select("id, company_name").ilike("company_name",s.provider_name).limit(1).single();
38if(n&&n.code!=="PGRST116")throw n;return i},enabled:f}),{data:m}=Z({queryKey:["user-profile",l==null?void 0:l.id],queryFn:async()=>{if(!(l!=null&&l.id))return null;const{data:i,error:n}=await I.from("profiles").select("*").eq("user_id",l.id).single();if(n)throw n;return i},enabled:!!(l!=null&&l.id)&&f});ls.useEffect(()=>{m&&c(i=>({...i,customer_name:m.name||"",customer_email:m.email||""}))},[m]);const t=V({mutationFn:async()=>{if(!(l!=null&&l.id))throw new Error("User not authenticated");if(!(x!=null&&x.id))throw new Error("Provider not found");if(r.rating===0)throw new Error("Bitte geben Sie eine Gesamtbewertung ab");const i={provider_id:x.id,user_id:l.id,rating:r.rating,service_rating:r.service_rating||null,communication_rating:r.communication_rating||null,value_rating:r.value_rating||null,title:r.title,comment:r.comment,would_recommend:r.would_recommend,public_display:r.public_display,customer_name:r.customer_name,customer_email:r.customer_email,project_name:s.contract_name,is_approved:!0,is_verified:!0},{data:n,error:_}=await I.from("reviews").insert(i).select().single();if(_)throw _;return n},onSuccess:()=>{w.success("Bewertung wurde erfolgreich erstellt!"),d(!1),c({rating:0,service_rating:0,communication_rating:0,value_rating:0,title:`Bewertung für ${s.provider_name}`,comment:`Ich habe den ${s.contract_type} Tarif "${s.contract_name}" von ${s.provider_name} genutzt.`,would_recommend:!0,public_display:!0,customer_name:"",customer_email:""}),u.invalidateQueries({queryKey:["reviews"]}
38),u.invalidateQueries({queryKey:["review-statistics"]})},onError:i=>{w.error("Fehler beim Erstellen der Bewertung: "+i.message)}}),g=i=>{i.preventDefault(),t.mutate()};return e.jsxs(X,{open:f,onOpenChange:d,children:[e.jsx(fe,{asChild:!0,children:e.jsxs(j,{variant:"outline",size:"sm",children:[e.jsx(Be,{className:"h-4 w-4 mr-2"}),"Bewerten"]})}),e.jsxs(ee,{className:"max-w-2xl max-h-[80vh] overflow-y-auto",children:[e.jsxs(se,{children:[e.jsx(ae,{children:"Provider bewerten"}),e.jsxs(re,{children:["Bewerten Sie Ihre Erfahrungen mit ",s.provider_name,' für den Vertrag "',s.contract_name,'".']})]}),!x&&e.jsx("div",{className:"bg-yellow-50 border border-yellow-200 p-4 rounded-lg",children:e.jsxs("p",{className:"text-sm text-yellow-800",children:['Der Provider "',s.provider_name,'" wurde nicht in unserem System gefunden. Die Bewertung kann trotzdem erstellt werden.']})}),e.jsxs("form",{onSubmit:g,className:"space-y-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-lg font-medium",children:"Bewertungen"}),e.jsx(J,{rating:r.rating,onRatingChange:i=>c(n=>({...n,rating:i})),label:"Gesamtbewertung *"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsx(J,{rating:r.service_rating,onRatingChange:i=>c(n=>({...n,service_rating:i})),label:"Service"}),e.jsx(J,{rating:r.communication_rating,onRatingChange:i=>c(n=>({...n,communication_rating:i})),label:"Kommunikation"}),e.jsx(J,{rating:r.value_rating,onRatingChange:i=>c(n=>({...n,value_rating:i})),label:"Preis-Leistung"})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"title",children:"Titel"}),e.jsx(D,{id:"title",value:r.title,onChange:i=>c(n=>({...n,title:i.target.value})),placeholder:"Kurzer Titel für Ihre Bewertung"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"comment",children:"Kommentar"}),e.jsx(te,{id:"comment",value:r.comment,onChange:i=>c(n=>({...n,comment:i.target.value})),rows:6,placeholder:"Beschreiben Sie Ihre Erfahrungen mit dem Provider..."})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-lg font-medium",children:"Kundendaten"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(v,{htmlFor:"customer_name",children:"Name"}),e.jsx(D,{id:"customer_name",value:r.customer_name,onChange:i=>c(n=>({...n,customer_name:i.target.value})),placeholder:"Ihr Name"})]}),e.jsxs("div",{children:[e.jsx(v,{htmlFor:"customer_email",children:"E-Mail"}),e.jsx(D,{id:"customer_email",type:"email",value:r.customer_email,onChange:i=>c(n=>({...n,customer_email:i.target.value})),placeholder:"Ihre E-Mail-Adresse"})]})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(ye,{id:"would_recommend",checked:r.would_recommend,onCheckedChange:i=>c(n=>({...n,would_recommend:!!i}))}),e.jsx(v,{htmlFor:"would_recommend",children:"Ich würde diesen Provider weiterempfehlen"})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(ye,{id:"public_display",checked:r.public_display,onCheckedChange:i=>c(n=>({...n,public_display:!!i}))}),e.jsx(v,{htmlFor:"public_display",children:"Diese Bewertung öffentlich anzeigen"})]})]}),e.jsxs("div",{className:"bg-muted p-4 rounded-lg",children:[e.jsx("h4",{className:"font-medium mb-2",children:"Bewerteter Vertrag:"}),e.jsxs("div",{className:"text-sm text-muted-foreground space-y-1",children:[e.jsxs("p",{children:["⢠Vertragsname: ",s.contract_name]}),e.jsxs("p",{children:["⢠Anbieter: ",s.provider_name]}),e.jsxs("p",{children:["⢠Typ: ",s.contract_type]}),e.jsxs("p",{children:["⢠Laufzeit: ",new Date(s.start_date).toLocaleDateString("de-DE")," - ",new Date(s.end_date).toLocaleDateString("de-DE")]}),s.monthly_cost&&e.jsxs("p",{children:["⢠Kosten: ",s.monthly_cost,"â¬/Monat"]})]})]}),e.jsxs("div",{className:"flex gap-2 justify-end",children:[e.jsx(j,{type:"button",variant:"outline",onClick:()=>d(!1),children:"Abbrechen"}),e.jsx(j,{type:"submit",disabled:t.isPending||r.rating===0,children:t.isPending?"Erstelle...":"Bewertung abgeben"})]})]})]})]})},Ks=({userId:s})=>{const[l,u]=p.useState([]),[f,d]=p.useState(!0),[r,c]=p.useState(!1),[x,m]=p.useState({backup_name:"",backup_type:"full",storage_location:"cloud",retention_days:30,auto_backup:!0});p.useEffect(()=>{t()},[s]);const t=async()=>{d(!0),setTimeout(()=>{u([{id:"1",backup_name:"Tägliches Datenbank-Backup",backup_type:"database",file_size_mb:245,backup_status:"active",storage_location:"cloud",retention_days:30,auto_backup:!0,last_backup:new Date(Date.now()-864e5).toISOString(),next_backup:new Date(Date.now()+864e5).toISOString(),created_at:new Date(Date.now()-2592e6).toISOString()}]),d(!1)},500)},g=async()=>
38{if(!x.backup_name.trim()){w.error("Bitte geben Sie einen Backup-Namen ein.");return}const o={id:Date.now().toString(),backup_name:x.backup_name.trim(),backup_type:x.backup_type,storage_location:x.storage_location,retention_days:x.retention_days,auto_backup:x.auto_backup,backup_status:"active",file_size_mb:null,last_backup:null,next_backup:new Date(Date.now()+864e5).toISOString(),created_at:new Date().toISOString()};u(C=>[o,...C]),w.success("Backup-Konfiguration wurde erfolgreich hinzugefügt."),m({backup_name:"",backup_type:"full",storage_location:"cloud",retention_days:30,auto_backup:!0}),c(!1)},i=async o=>{confirm("Möchten Sie diese Backup-Konfiguration wirklich löschen?")&&(u(C=>C.filter(L=>L.id!==o)),w.success("Backup-Konfiguration wurde gelöscht."))},n=async o=>{w.info("Backup wird gestartet..."),setTimeout(()=>{w.success("Backup erfolgreich erstellt!"),t()},2e3)},_=o=>{switch(o){case"active":return"bg-green-500/10 text-green-700 dark:text-green-400";case"running":return"bg-blue-500/10 text-blue-700 dark:text-blue-400";case"failed":return"bg-red-500/10 text-red-700 dark:text-red-400";case"paused":return"bg-yellow-500/10 text-yellow-700 dark:text-yellow-400";default:return"bg-gray-500/10 text-gray-700 dark:text-gray-400"}},y=o=>{switch(o){case"active":return e.jsx(he,{className:"h-4 w-4"});case"running":return e.jsx(we,{className:"h-4 w-4 animate-spin"});case"failed":return e.jsx(me,{className:"h-4 w-4"});default:return e.jsx(le,{className:"h-4 w-4"})}},P=o=>({full:"Vollständig",incremental:"Inkrementell",differential:"Differentiell",database:"Datenbank",files:"Dateien"})[o]||o;return f?e.jsx(N,{children:e.jsx(k,{className:"p-6",children:e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-4 bg-muted rounded w-1/4"}),e.jsx("div",{className:"h-32 bg-muted rounded"})]})})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs(N,{children:[e.jsx(E,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs(F,{className:"flex items-center gap-2",children:[e.jsx(le,{className:"h-5 w-5"}),"Backup-Management"]}),e.jsx(je,{children:"Verwalten Sie automatische Backups Ihrer Hosting-Daten"})]}),e.jsxs(j,{onClick:()=>c(!r),children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Backup hinzufügen"]})]})}),r&&e.jsx(k,{className:"border-t",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("h4",{className:"font-medium",children:"Neue Backup-Konfiguration"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"backup_name",children:"Backup-Name *"}),e.jsx(D,{id:"backup_name",value:x.backup_name,onChange:o=>m(C=>({...C,backup_name:o.target.value})),placeholder:"z.B. Tägliches Datenbank-Backup"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"backup_type",children:"Backup-Typ"}),e.jsxs(T,{value:x.backup_type,onValueChange:o=>m(C=>({...C,backup_type:o})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"full",children:"Vollständiges Backup"}),e.jsx(b,{value:"incremental",children:"Inkrementelles Backup"}),e.jsx(b,{value:"differential",children:"Differentielles Backup"}),e.jsx(b,{value:"database",children:"Nur Datenbank"}),e.jsx(b,{value:"files",children:"Nur Dateien"})]})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"storage_location",children:"Speicherort"}),e.jsxs(T,{value:x.storage_location,onValueChange:o=>m(C=>({...C,storage_location:o})),children:[e.jsx(z,{children:e.jsx(K,{})}),e.jsxs($,{children:[e.jsx(b,{value:"cloud",children:"Cloud Storage"}),e.jsx(b,{value:"local",children:"Lokaler Server"}),e.jsx(b,{value:"ftp",children:"FTP Server"}),e.jsx(b,{value:"s3",children:"Amazon S3"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"retention_days",children:"Aufbewahrungsdauer (Tage)"}),e.jsx(D,{id:"retention_days",type:"number",value:x.retention_days,onChange:o=>m(C=>({...C,retention_days:parseInt(o.target.value)})),min:"1",max:"365"})]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"checkbox",id:"auto_backup",checked:x.auto_backup,onChange:o=>m(C=>({...C,auto_backup:o.target.checked})),className:"rounded"}),e.jsx(v,{htmlFor:"auto_backup",className:"cursor-pointer",children:"Automatische Backups aktivieren"})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(j,{onClick:g,children:"Backup hinzufügen"}),e.jsx(j,{variant:"outline",onClick:()=>c(!1),children:"Abbrechen"})]})]})})]}),l.length===0?e.jsx(N,{children:e.jsxs(k,{className:"p-12 text-center",children:[e.jsx(le,{className:"h-12 w-12 text-muted-foreground mx-auto mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Keine Backups konfiguriert"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Erstellen Sie Ihre erste Backup-Konfiguration, um Ihre Daten zu schützen."}),e.jsxs(j,{onClick:()=>c(!0),children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Erstes Backup erstellen"]})]})}):e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:l.map(o=>e.jsxs(N,{children:[e.jsxs(E,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[y(o.backup_status),e.jsx("h4",{className:"font-medium",children:o.backup_name})]}),e.jsx(B,{className:_(o.backup_status),children:o.backup_status==="active"?"Aktiv":o.backup_status==="running"?"Läuft":o.backup_status==="failed"?"Fehler":o.backup_status==="paused"?"Pausiert":o.backup_status})]}),e.jsxs("div",{className:"text-sm text-muted-foreground",children:[P(o.backup_type)," ⢠",o.storage_location]})]}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"GröÃe"}),e.jsx("div",{className:"text-sm font-medium",children:o.file_size_mb?`${o.file_size_mb} MB`:"N/A"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"Aufbewahrung"}),e.jsxs("div",{className:"text-sm font-medium",children:[o.retention_days," Tage"]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-xs text-muted-foreground mb-1",children:"Automatisch"}),e.jsx("div",{className:"text-sm font-medium",children:o.auto_backup?"Ja":"Nein"})]})]}),e.jsxs("div",{className:"space-y-2 text-sm",children:[o.last_backup&&e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(Ne,{className:"h-4 w-4"}),e.jsxs("span",{children:["Letztes Backup: ",new Date(o.last_backup).toLocaleStr
38ing("de-DE")]})]}),o.next_backup&&e.jsxs("div",{className:"flex items-center gap-2 text-muted-foreground",children:[e.jsx(Ne,{className:"h-4 w-4"}),e.jsxs("span",{children:["Nächstes Backup: ",new Date(o.next_backup).toLocaleString("de-DE")]})]})]}),e.jsxs("div",{className:"flex gap-2 pt-2",children:[e.jsxs(j,{variant:"outline",size:"sm",onClick:()=>n(o.id),children:[e.jsx(we,{className:"h-4 w-4 mr-2"}),"Jetzt starten"]}),e.jsxs(j,{variant:"outline",size:"sm",onClick:()=>i(o.id),className:"text-red-600 hover:text-red-700",children:[e.jsx(Re,{className:"h-4 w-4 mr-2"}),"Löschen"]})]})]})]},o.id))}),e.jsxs(Fe,{children:[e.jsx(Te,{className:"h-4 w-4"}),e.jsxs(Me,{children:[e.jsx("strong",{children:"Backup-Management:"})," Automatische Backups werden täglich erstellt und gemäà der konfigurierten Aufbewahrungsdauer gespeichert. Sie können jederzeit manuelle Backups erstellen oder bestehende Backups wiederherstellen."]})]})]})},$s=({userId:s})=>{const[l,u]=p.useState([]),[f,d]=p.useState(!0),[r,c]=p.useState(!1),[x,m]=p.useState(new Set),[t,g]=p.useState({key_name:"",permissions:[]});p.useEffect(()=>{i()},[s]);const i=async()=>{d(!0),setTimeout(()=>{u([{id:"1",key_name:"Production API Key",api_key:"whm_"+Array.from({length:32},()=>"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(Math.random()*62)]).join(""),is_active:!0,permissions:["contracts.read","contracts.write","monitoring.read"],last_used:new Date(Date.now()-36e5).toISOString(),created_at:new Date(Date.now()-2592e6).toISOString(),expires_at:null}]),d(!1)},500)},n=()=>"whm_"+Array.from({length:32},()=>"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(Math.random()*62)]).join(""),_=async()=>{if(!t.key_name.trim()){w.error("Bitte geben Sie einen Namen für den API-Key ein.");return}const h={id:Date.now().toString(),key_name:t.key_name.trim(),api_key:n(),permissions:t.permissions,is_active:!0,last_used:null,created_at:new Date().toISOString(),expires_at:null};u(S=>[h,...S]),w.success("API-Key wurde erfolgreich erstellt."),g({key_name:"",permissions:[]}),c(!1)},y=async h=>{confirm("Möchten Sie diesen API-Key wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.")&&(u(S=>S.filter(O=>O.id!==h)),w.success("API-Key wurde gelöscht."))},P=h=>{const S=new Set(x);S.has(h)?S.delete(h):S.add(h),m(S)},o=h=>{navigator.clipboard.writeText(h),w.success("API-Key wurde in die Zwischenablage kopiert.")},C=h=>{g(S=>({...S,permissions:S.permissions.includes(h)?S.permissions.filter(O=>O!==h):[...S.permissions,h]}))},L=[{value:"contracts.read",label:"Verträge lesen"},{value:"contracts.write",label:"Verträge schreiben"},{value:"backups.read",label:"Backups lesen"},{value:"backups.write",label:"Backups verwalten"},{value:"monitoring.read",label:"Monitoring lesen"},{value:"reminders.read",label:"Erinnerungen lesen"}];return f?e.jsx(N,{children:e.jsx(k,{className:"p-6",children:e.jsxs("div",{className:"animate-pulse space-y-4",children:[e.jsx("div",{className:"h-4 bg-muted rounded w-1/4"}),e.jsx("div",{className:"h-32 bg-muted rounded"})]})})}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs(N,{children:[e.jsx(E,{children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs(F,{className:"flex items-center gap-2",children:[e.jsx(de,{className:"h-5 w-5"}),"API-Integration"]}),e.jsx(je,{children:"Verwalten Sie API-Keys für externe Integrationen und Automatisierung"})]}),e.jsxs(j,{onClick:()=>c(!r),children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"API-Key erstellen"]})]})}),r&&e.jsx(k,{className:"border-t",children:e.jsxs("div",{className:"space-y-4",children:[e.jsx("h4",{className:"font-medium",children:"Neuer API-Key"}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{htmlFor:"key_name",children:"Key-Name *"}),e.jsx(D,{id:"key_name",value:t.key_name,onChange:h=>g(S=>({...S,key_name:h.target.value})),placeholder:"z.B. Production API Key"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:"Berechtigungen"}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-2",children:L.map(h=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"checkbox",id:h.value,checked:t.permissions.includes(h.value),onChange:()=>
38C(h.value),className:"rounded"}),e.jsx(v,{htmlFor:h.value,className:"cursor-pointer text-sm",children:h.label})]},h.value))})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(j,{onClick:_,children:"API-Key erstellen"}),e.jsx(j,{variant:"outline",onClick:()=>c(!1),children:"Abbrechen"})]})]})})]}),l.length===0?e.jsx(N,{children:e.jsxs(k,{className:"p-12 text-center",children:[e.jsx(de,{className:"h-12 w-12 text-muted-foreground mx-auto mb-4"}),e.jsx("h3",{className:"text-lg font-medium mb-2",children:"Keine API-Keys vorhanden"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:"Erstellen Sie Ihren ersten API-Key, um externe Integrationen zu nutzen."}),e.jsxs(j,{onClick:()=>c(!0),children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Ersten API-Key erstellen"]})]})}):e.jsx("div",{className:"space-y-4",children:l.map(h=>e.jsxs(N,{children:[e.jsx(E,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(de,{className:"h-4 w-4"}),e.jsx("h4",{className:"font-medium",children:h.key_name})]}),e.jsx(B,{className:h.is_active?"bg-green-500/10 text-green-700":"bg-gray-500/10 text-gray-700",children:h.is_active?"Aktiv":"Inaktiv"})]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:"API-Key"}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(D,{value:x.has(h.id)?h.api_key:"â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢â¢",readOnly:!0,className:"font-mono text-sm"}),e.jsx(j,{variant:"outline",size:"icon",onClick:()=>P(h.id),children:x.has(h.id)?e.jsx(bs,{className:"h-4 w-4"}):e.jsx(cs,{className:"h-4 w-4"})}),e.jsx(j,{variant:"outline",size:"icon",onClick:()=>o(h.api_key),children:e.jsx(ws,{className:"h-4 w-4"})})]})]}),h.permissions&&h.permissions.length>0&&e.jsxs("div",{className:"space-y-2",children:[e.jsx(v,{children:"Berechtigungen"}),e.jsx("div",{className:"flex flex-wrap gap-2",children:h.permissions.map(S=>e.jsx(B,{variant:"outline",className:"text-xs",children:S},S))})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground",children:"Erstellt am"}),e.jsx("div",{className:"font-medium",children:new Date(h.created_at).toLocaleDateString("de-DE")})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground",children:"Zuletzt verwendet"}),e.jsx("div",{className:"font-medium",children:h.last_used?new Date(h.last_used).toLocaleDateString("de-DE"):"Nie"})]})]}),e.jsx("div",{className:"flex gap-2 pt-2",children:e.jsxs(j,{variant:"outline",size:"sm",onClick:()=>y(h.id),className:"text-red-600 hover:text-red-700",children:[e.jsx(Re,{className:"h-4 w-4 mr-2"}),"Löschen"]})})]})]},h.id))}),e.jsxs(N,{children:[e.jsx(E,{children:e.jsxs(F,{className:"flex items-center gap-2",children:[e.jsx(ke,{className:"h-5 w-5"}),"API-Dokumentation"]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"font-medium",children:"API-Endpunkt"}),e.jsx("code",{className:"block p-3 bg-muted rounded text-sm",children:"https://api.webhostmanager.de/v1/"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"font-medium",children:"Authentifizierung"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Fügen Sie Ihren API-Key im Authorization-Header hinzu:"}),e.jsx("code",{className:"block p-3 bg-muted rounded text-sm",children:"Authorization: Bearer YOUR_API_KEY"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("h4",{className:"font-medium",children:"Beispiel-Anfrage"}),e.jsx("code",{className:"block p-3 bg-muted rounded text-sm whitespace-pre-wrap",children:`curl -X GET https://api.webhostmanager.de/v1/contracts \\ 39 -H "Authorization: Bearer YOUR_API_KEY" \\ 40 -H "Content-Type: application/json"`})]}),e.jsxs(Fe,{children:[e.jsx(ke,{className:"h-4 w-4"}),e.jsxs(Me,{children:[e.jsx("strong",{children:"Hinweis:"})," Behandeln Sie Ihre API-Keys wie Passwörter. Teilen Sie sie niemals öffentlich und rotieren Sie sie regelmäÃig."]})]})]})]})]})},Vs=s=>{switch(s){case"active":return"bg-green-500/10 text-green-700 dark:text-green-400";case"expiring_soon":return"bg-yellow-500/10 text-yellow-700 dark:text-yellow-400";case"expired":return"bg-red-500/10 text-red-700 dark:text-red-400";case"cancelled":return"bg-gray-500/10 text-gray-700 dark:text-gray-400";
40case"pending_renewal":return"bg-blue-500/10 text-blue-700 dark:text-blue-400";default:return"bg-gray-500/10 text-gray-700 dark:text-gray-400"}},qs=s=>{switch(s){case"shared_hosting":case"managed_wordpress":return Ns;case"vps":case"dedicated_server":case"cloud_hosting":return Te;case"email_hosting":return gs;case"domain":return xs;case"ssl_certificate":return hs;case"cdn":case"backup_service":return us;default:return ue}},Ce=s=>({active:"Aktiv",expiring_soon:"Läuft bald ab",expired:"Abgelaufen",cancelled:"Gekündigt",pending_renewal:"Verlängerung anstehend"})[s]||s,Ae=s=>({shared_hosting:"Shared Hosting",vps:"VPS",dedicated_server:"Dedicated Server",cloud_hosting:"Cloud Hosting",managed_wordpress:"WordPress Hosting",email_hosting:"Email Hosting",domain:"Domain",ssl_certificate:"SSL Zertifikat",cdn:"CDN",backup_service:"Backup Service",other:"Sonstiges"})[s]||s,pa=()=>{const{user:s}=W(),l=pe(),[u,f]=p.useState(""),[d,r]=p.useState("all"),[c,x]=p.useState("all"),[m,t]=p.useState(!1),[g,i]=p.useState(!1);p.useEffect(()=>{(async()=>{if(!(s!=null&&s.id))return;const{data:A,error:R}=await I.from("webhostmanager_pro_requests").select("*").eq("user_id",s.id).eq("status","active").gte("subscription_end_date",new Date().toISOString()).maybeSingle();!R&&A&&i(!0)})()},[s]);const{data:n,isLoading:_}=Z({queryKey:["hosting-contracts",s==null?void 0:s.id,u,d,c],queryFn:async()=>{if(!(s!=null&&s.id))return[];let a=I.from("hosting_contracts").select("*").eq("user_id",s.id).eq("is_archived",!1).order("end_date",{ascending:!0});u&&(a=a.or(`contract_name.ilike.%${u}%,provider_name.ilike.%${u}%`)),d!=="all"&&(a=a.eq("status",d)),c!=="all"&&(a=a.eq("contract_type",c));const{data:A,error:R}=await a;if(R)throw R;return A||[]},enabled:!!(s!=null&&s.id)}),{data:y}=Z({queryKey:["contract-reminders",s==null?void 0:s.id],queryFn:async()=>{if(!(s!=null&&s.id))return[];const{data:a,error:A}=await I.from("contract_reminders").select("*").eq("user_id",s.id).eq("is_dismissed",!1).gte("reminder_date",new Date().toISOString().split("T")[0]).order("reminder_date",{ascending:!0}).limit(5);if(A)throw A;return a||[]},enabled:!!(s!=null&&s.id)}),P=V({mutationFn:async()=>{const{error:a}=await I.rpc("update_contract_status");if(a)throw a},onSuccess:()=>{l.invalidateQueries({queryKey:["hosting-contracts"]}),w.success("Vertragsstatus wurde aktualisiert")},onError:a=>{w.error("Fehler beim Aktualisieren des Status: "+a.message)}}),o=V({mutationFn:async()=>{const{error:a}=await I.rpc("generate_contract_reminders");if(a)throw a},onSuccess:()=>{l.invalidateQueries({queryKey:["contract-reminders"]}),w.success("Erinnerungen wurden generiert")},onError:a=>{w.error("Fehler beim Generieren der Erinnerungen: "+a.message)}}),C=V({mutationFn:async a=>{const{error:A}=await I.from("contract_reminders").update({is_dismissed:!0,dismissed_at:new Date().toISOString()}).eq("id",a);if(A)throw A},onSuccess:()=>{l.invalidateQueries({queryKey:["contract-reminders"]}),w.success("Erinnerung wurde verworfen")}}),L=a=>ys(ce(a),new Date),h=n?{total:n.length,active:n.filter(a=>a.status==="active").length,expiringSoon:n.filter(a=>a.status==="expiring_soon").length,expired:n.filter(a=>a.status==="expired").length,totalMonthlyCost:n.filter(a=>a.status==="active").reduce((a,A)=>a+(A.monthly_cost||0),0)}:{total:0,active:0,expiringSoon:0,expired:0,totalMonthlyCost:0},S=n?[...new Set(n.map(a=>a.contract_type))]:[],O=n?[...new Set(n.map(a=>a.status))]:[];return _?e.jsx("div",{className:"container mx-auto px-4 py-8",children:e.jsx("div",{className:"grid gap-6 md:grid-cols-2 lg:grid-cols-4",children:[...Array(4)].map((a,A)=>e.jsx(N,{className:"animate-pulse",children:e.jsxs(E,{className:"pb-3",children:[e.jsx("div",{className:"h-4 bg-muted rounded w-3/4"}),e.jsx("div",{className:"h-8 bg-muted rounded w-1/2"})]})},A))})}):e.jsxs("div",{className:"container mx-auto px-4 py-8",children:[e.jsxs("div",{className:"flex flex-col lg:flex-row lg:items-center lg:justify-between mb-8",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-3 mb-2",children:[e.jsx("h1",{className:"text-3xl font-bold",children:"WebHostManager"}),g&&e.jsxs(B,{variant:"default",className:"bg-gradient-to-r from-yellow-500 to-orange-500",children:[e.jsx(M,{className:"h-3 w-3 mr-1"}),"PRO"]})]}),e.jsx("p",{className:"text-muted-foreground",children:"Verwalten Sie Ihre Hosting-Verträge, Laufzeiten und Erinnerungen"})]}),e.jsxs("div",{className:"flex gap-2 mt-4 lg:mt-0",children:[!g&&e.jsxs(j,{onClick:()=>t(!0),variant:"default",className:"bg-gradient-to-r from-yellow-500 to-orange-500 hover:from-yellow-600 hover:to-orange-600",children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),"Auf Pro upgraden"]}),e.jsxs(j,{onClick:()=>P.mutate(),variant:"outline",disabled:P.isPending,children:[e.jsx(he,{className:"h-4 w-4 mr-2"}),"Status aktualisieren"]}),e.jsxs(j,{onClick:()=>o.mutate(),variant:"outline",disabled:o.isPending,children:[e.jsx(ie,{className:"h-4 w-4 mr-2"}),"Erinnerungen generieren"]}),e.jsx(j,{asChild:!0,children:e.jsxs(Q,{to:"/webhostmanager/new",children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Neuer Vertrag"]})})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2 lg:grid-cols-5 mb-8",children:[e.jsxs(N,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[e.jsx(F,{className:"text-sm font-medium",children:"Gesamt"}),e.jsx(ue,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(k,{children:[e.jsx("div",{className:"text-2xl font-bold",children:h.total}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Verträge"})]})]}),e.jsxs(N,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[e.jsx(F,{className:"text-sm font-medium",children:"Aktiv"}),e.jsx(he,{className:"h-4 w-4 text-green-600"})]}),e.jsxs(k,{children:[e.jsx("div",{className:"text-2xl font-bold",children:h.active}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Laufende Verträge"})]})]}),e.jsxs(N,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[e.jsx(F,{className:"text-sm font-medium",children:"Laufen bald ab"}),e.jsx(me,{className:"h-4 w-4 text-yellow-600"})]}),e.jsxs(k,{children:[e.jsx("div",{className:"text-2xl font-bold",children:h.expiringSoon}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Nächste 60 Tage"})]})]}),e.jsxs(N,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[e.jsx(F,{className:"text-sm font-medium",children:"Abgelaufen"}),e.jsx(me,{className:"h-4 w-4 text-red-600"})]}),e.jsxs(k,{children:[e.jsx("div",{className:"text-2xl font-bold",children:h.expired}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Erneuerung nötig"})]})]}),e.jsxs(N,{children:[e.jsxs(E,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[e.jsx(F,{className:"text-sm font-medium",children:"Monatliche Kosten"}),e.jsx(_s,{className:"h-4 w-4 text-muted-foreground"})]}),e.jsxs(k,{children:[e.jsxs("div",{className:"text-2xl font-bold",children:[h.totalMonthlyCost.toFixed(2)," â¬"]}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Aktive Verträge"})]})]})]}),e.jsxs(ds,{defaultValue:"contracts",className:"space-y-6",children:[e.jsxs(os,{className:"grid w-full grid-cols-5",children:[e.jsx(H,{value:"contracts",children:"Verträge"}),e.jsxs(H,{value:"reminders",children:["Erinnerungen",y&&y.length>0&&e.jsx(B,{variant:"destructive",className:"ml-2 h-5 min-w-5 text-xs",children:y.length})]}),e.jsxs(H,{value:"monitoring",children:[e.jsx(B,{variant:"secondary",className:"mr-2",children:"PRO"}),"Monitoring"]}),e.jsxs(H,{value:"backups",children:[e.jsx(B,{variant:"secondary",className:"mr-2",children:"PRO"}),"Backups"]}),e.jsxs(H,{value:"api",children:[e.jsx(B,{variant:"secondary",className:"mr-2",children:"PRO"}),"API"]})]}),e.jsxs(U,{value:"contracts",className:"space-y-6",children:[e.jsx(N,{children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"flex flex-col lg:flex-row gap-4",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(ms,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-muted-foreground h-4 w-4"}),e.jsx(D,{placeholder:"Verträge durchsuchen...",value:u,onChange:a=>f(a.target.value),className:"pl-10"})]}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx(j,{variant:d==="all"?"default":"outline",size:"sm",onClick:()=>r("all"),children:"Alle Status"}),O.map(a=>e.jsx(j,{variant:d===a?"default":"outline",size:"sm",onClick:()=>r(a),className:"capitalize",children:Ce(a)},a))]}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx(j,{variant:c==="all"?"default":"outline",size:"sm",onClick:()=>x("all"),children:"Alle Typen"}),S.slice(0,3).map(a=>e.jsx(j,{variant:c===a?"default":"outline",size:"sm",onClick:()=>x(a),children:Ae(a)},a))]})]})})}),e.jsx("div",{className:"grid gap-6 md:grid-cols-2 lg:grid-cols-3",children:n==null?void 0:n.map(a=>{const A=qs(a.contract_type),R=L(a.end_date);return e.jsxs(N,{className:"hover:shadow-lg transition-shadow",children:[e.jsxs(E,{children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(A,{className:"h-5 w-5 text-muted-foreground"}),e.jsx(F,{className:"text-lg",children:a.contract_name})]}),e.jsx(B,{className:Vs(a.status),children:Ce(a.status)})]}),e.jsxs(je,{children:[a.provider_name," ⢠",Ae(a.contract_type)]})]}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground",children:"Läuft ab"}),e.jsx("div",{className:"font-medium",children:Se(ce(a.end_date),"PPP",{locale:_e})}),e.jsx("div",{className:`text-xs ${R<=30?"text-red-600":R<=60?"text-yellow-600":"text-green-600"}`,children:R>0?`in ${R} Tagen`:`vor ${Math.abs(R)} Tagen`})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground",children:"Kosten"}),e.jsx("div",{className:"font-medium",children:a.monthly_cost?`${a.monthly_cost.toFixed(2)} â¬/Monat`:a.annual_cost?`${a.annual_cost.toFixed(2)} â¬/Jahr`:"Nicht angegeben"})]})]}),a.domain_names&&a.domain_names.length>0&&e.jsxs("div",{children:[e.jsx("div",{className:"text-muted-foreground text-sm mb-1",children:"Domains"}),e.jsxs("div",{className:"flex flex-wrap gap-1",children:[a.domain_names.slice(0,2).map(be=>e.jsx(B,{variant:"outline",className:"text-xs",children:be},be)),a.domain_names.length>2&&e.jsxs(B,{variant:"outline",className:"text-xs",children:["+",a.domain_names.length-2]})]})]}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx(j,{size:"sm",asChild:!0,className:"flex-1",children:e.jsx(Q,{to:`/webhostmanager/contract/${a.id}`,children:"Details"})}),e.jsx(j,{size:"sm",variant:"outline",asChild:!0,children:e.jsx(Q,{to:`/webhostmanager/contract/${a.id}/edit`,children:"Bearbeiten"})}),e.jsx(Ms,{contract:a}),e.jsx(Ts,{contract:a}),e.jsx(zs,{contract:a})]})]})]},a.id)})}),(!n||n.length===0)&&e.jsx(N,{children:e.jsxs(k,{className:"text-center py-12",children:[e.jsx(ue,{className:"h-16 w-16 text-muted-foreground mx-auto mb-4"}),e.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Keine Verträge gefunden"}),e.jsx("p",{className:"text-muted-foreground mb-4",children:u||d!=="all"||c!=="all"?"Versuchen Sie andere Filter oder Suchbegriffe.":"Erstellen Sie Ihren ersten Hosting-Vertrag."}),e.jsx(j,{asChild:!0,children:e.jsxs(Q,{to:"/webhostmanager/new",children:[e.jsx(q,{className:"h-4 w-4 mr-2"}),"Ersten Vertrag erstellen"]})})]})})]}),e.jsx(U,{value:"reminders",className:"space-y-6",children:e.jsxs("div",{className:"space-y-4",children:[y==null?void 0:y.map(a=>e.jsx(N,{children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ie,{className:"h-5 w-5 text-yellow-600"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium",children:a.reminder_title}),e.jsx("p",{className:"text-sm text-muted-foreground",children:Se(ce(a.reminder_date),"PPP",{locale:_e})}),a.reminder_message&&e.jsx("p",{className:"text-sm mt-1",children:a.reminder_message})]})]}),e.jsx(j,{size:"sm",variant:"outline",onClick:()=>C.mutate(a.id),disabled:C.isPending,children:"Verwerfen"})]})})},a.id)),(!y||y.length===0)&&e.jsx(N,{children:e.jsxs(k,{className:"text-center py-12",children:[e.jsx(ie,{className:"h-16 w-16 text-muted-foreground mx-auto mb-4"}),e.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Keine anstehenden Erinnerungen"}),e.jsx("p",{className:"text-muted-foreground",children:"Alle Erinnerungen wurden abgearbeitet oder es sind keine geplant."})]})})]})}),e.jsx(U,{value:"monitoring",className:"space-y-6",children:g?e.jsx(vs,{providerId:(s==null?void 0:s.id)||""}):e.jsx(N,{children:e.jsxs(k,{className:"p-8 text-center",children:[e.jsx(M,{className:"h-12 w-12 mx-auto mb-4 text-muted-foreground"}),e.jsx("h3",{className:"text-xl font-semibold mb-2",children:"Pro Feature"}),e.jsx("p",{className:"text-muted-foreground mb-6",children:"24/7 Performance-Monitoring ist nur für Pro-Mitglieder verfügbar."}),e.jsxs(j,{onClick:()=>t(!0),className:"bg-gradient-to-r from-yellow-500 to-orange-500",children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),"Jetzt upgraden"]})]})})}),e.jsx(U,{value:"backups",className:"space-y-6",children:g?e.jsx(Ks,{userId:(s==null?void 0:s.id)||""}):e.jsx(N,{children:e.jsxs(k,{className:"p-8 text-center",children:[e.jsx(M,{className:"h-12 w-12 mx-auto mb-4 text-muted-foreground"}),e.jsx("h3",{className:"text-xl font-semibold mb-2",children:"Pro Feature"}),e.jsx("p",{className:"text-muted-foreground mb-6",children:"Automatische Backup-Verwaltung ist nur für Pro-Mitglieder verfügbar."}),e.jsxs(j,{onClick:()=>t(!0),className:"bg-gradient-to-r from-yellow-500 to-orange-500",children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),"Jetzt upgraden"]})]})})}),e.jsx(U,{value:"api",className:"space-y-6",children:g?e.jsx($s,{userId:(s==null?void 0:s.id)||""}):e.jsx(N,{children:e.jsxs(k,{className:"p-8 text-center",children:[e.jsx(M,{className:"h-12 w-12 mx-auto mb-4 text-muted-foreground"}),e.jsx("h3",{className:"text-xl font-semibold mb-2",children:"Pro Feature"}),e.jsx("p",{className:"text-muted-foreground mb-6",children:"API-Integration ist nur für Pro-Mitglieder verfügbar."}),e.jsxs(j,{onClick:()=>t(!0),className:"bg-gradient-to-r from-yellow-500 to-orange-500",children:[e.jsx(M,{className:"h-4 w-4 mr-2"}),"Jetzt upgraden"]})]})})})]}),e.jsx(Fs,{open:m,onOpenChange:t})]})};export{pa as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.