1import{a as Oe,u as me,b as ne,j as e}from"./query-vendor-DVmmQ-ki.js";import{r as _,R as fe,a as _r}from"./react-vendor-BURXZ51T.js";import{supabase as z}from"./client-BXzYhP5O.js";import{u as B}from"./index-Rp47IaA2.js";import{u as vr}from"./AuthContext-3XEtQ2Z5.js";import{h as yt,v as Xe,k as br,w as wt,x as kt,y as jr,B as W,a as J,b as yr,L as ke,R as at,_ as Ut,C as wr}from"./index-DpP3iEYK.js";import{calculateListPrice as et,formatNumberWithSeparator as te,convertToISODate as Nt,parseFormattedNumberString as ve,formatDateToMMYYYY as kr}from"./formUtils-CA2AULoA.js";import{D as Ct,e as Nr,a as St,b as Ft,c as It,d as Dt,f as Cr}from"./dialog-BPS4FN9z.js";import{I as de}from"./input-Bx2apBJb.js";import{L as Q}from"./label-CiQuxLS0.js";import{T as zt}from"./textarea-DHmKlUYM.js";import{u as cs,c as ds}from"./useLuxuryProvisionTiers-BFLebRce.js";import{u as nt}from"./use-toast-j8LH5fHs.js";import{P as us,a as hs,b as ms}from"./popover-Dj0yeLTT.js";import{C as gs,a as fs,b as ps,c as xs,d as _s,e as vs,f as bs}from"./command-BWdQmI1z.js";import{C as Pt}from"./check-Dwauox-g.js";import{S as Sr}from"./simple-color-badge-0CXRgwTq.js";import{S as Fe,a as Ie,b as De,c as ze,d as Y}from"./select-u_D-otHI.js";import{T as _t,a as le,b as oe,c as ce}from"./tooltip-Bh6NQA4e.js";import{I as vt}from"./info-XAdJRHNr.js";import{u as Mt,P as bt,e as Fr,a as Ir,W as js,X as Dr,Y as zr,Z as Pr}from"./ui-radix-LBOF5AHa.js";import{W as Te}from"./wand-sparkles-k0IJMtFP.js";import{X as Ze}from"./x-CrVVxRiw.js";import{A as Bt}from"./arrow-right-BKQ3ldf3.js";import{S as ys}from"./sparkles-BT5dtObF.js";import{A as Ve,a as Le,b as qe,c as $e,d as Ue,e as Be,f as Ke,g as Ge}from"./alert-dialog-B3w2S2tj.js";import{C as ht,b as mt,c as gt,a as ft}from"./card-DwBoygcx.js";import{B as Mr}from"./badge-BrFuXnAq.js";import{S as pt}from"./skeleton-CbBeDtzP.js";import{C as xt}from"./chart-column-BDYqO4Le.js";import{T as Ar}from"./trending-down-BOtNEIMv.js";import{T as Er}from"./trending-up-B_zRYNKG.js";import{P as Or}from"./plus-B0QqRDRs.js";import{E as tt}from"./external-link-Dq9xh9iT.js";import{S as ws}from"./save-CKIc8EmZ.js";import{G as ks}from"./globe-cUt2UJxp.js";import{S as Rr}from"./search-gwTUQi-V.js";import{M as Tr,a as Vr}from"./minimize-2-D-esqkNU.js";import{T as Lr,a as qr,b as we}from"./tabs-CH4KCsyR.js";import{D as Ns,a as Cs,b as Ss,e as _e,d as st}from"./dropdown-menu-CexBKmu0.js";import{U as $r}from"./upload-B6QS-LUa.js";import{A as Ur}from"./archive-C_HcnhoG.js";import{P as Br}from"./percent-CCQHVyKu.js";import{T as Kr}from"./trash-2-B9W2MJEE.js";import{T as Kt,d as Gt,b as Gr,e as Wr}from"./table-DGTNs8pb.js";import{C as At}from"./checkbox-CRf3IHWH.js";import{V as Qr}from"./VehicleStatusBadge-D4sqv-6U.js";import{C as Wt}from"./ColorBadge-DfSQAAOt.js";import{C as Qt}from"./circle-check-BavTUs4p.js";import{C as Ht}from"./circle-x-D1eE3jQp.js";import{L as Hr}from"./TableRowSkeleton-UCKwTYtD.js";import{A as Jr}from"./arrow-up-down-DazlJtIW.js";import{A as Yr}from"./arrow-up-DKNrr_0d.js";import{A as Zr}from"./arrow-down-C38zFnos.js";import{R as Xr,a as Jt}from"./radio-group-Dnhgh9d-.js";import{S as ei}from"./switch-Cp3FZ6fH.js";import{S as ti}from"./star-Buc_NfdJ.js";import{U as si}from"./UrlListDialog-DSmA2l1S.js";import{C as ri}from"./circle-alert-BGAtDceg.js";import"./supabase-DxfZiqN5.js";import"./radix-slot-BTvEbTmE.js";import"./chevron-right-CEZ7PbYu.js";import"./circle-BqCuy5sH.js";import"./circle-check-big-CqabgHRZ.js";import"./eye-off-DoWdgQvY.js";import"./copy-CJmodTUB.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 ii=yt("Camera",[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]]);/** 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 ai=yt("Minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);/** 12 * @license lucide-react v0.462.0 - ISC 13 * 14 * This source code is licensed under the ISC license. 15 * See the LICENSE file in the root directory of this source tree. 16 */const ni=yt("Trash",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}
16],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}]]);function li(s,u){if(!s||s.length===0)return;const t=s.filter(r=>r.external_id===u),a=r=>r.sort((l,i)=>{if(l.last_checked_at&&!i.last_checked_at)return-1;if(!l.last_checked_at&&i.last_checked_at)return 1;const h=new Date(l.last_checked_at||l.created_at||0).getTime();return new Date(i.last_checked_at||i.created_at||0).getTime()-h});return t.length>0?a(t)[0]:a([...s])[0]}function oi(s){if(s){if(!Array.isArray(s))return s;if(s.length!==0)return[...s].sort((u,t)=>new Date(t.updated_at).getTime()-new Date(u.updated_at).getTime())[0]}}function ci(){const{hasRole:s}=vr(),u=s("admin"),t=Oe(),[a,r]=_.useState(""),[l,i]=_.useState("all"),[h,n]=_.useState("all"),[x,m]=_.useState("all"),[j,p]=_.useState(new Set),[C,b]=_.useState("offer_no"),[S,k]=_.useState("desc"),[O,E]=_.useState(null),[T,A]=_.useState(!1),[L,G]=_.useState(!1),[V,$]=_.useState(null),[X,Z]=_.useState(null),[D,v]=_.useState(!1),[y,d]=_.useState(null),[f,P]=_.useState(!1),[F,M]=_.useState("7.0"),[q,K]=_.useState(!0),[re,ee]=_.useState(!1),[pe,Ce]=_.useState([]),[H,xe]=_.useState(!1),[Re,lt]=_.useState(!1),{data:We}=me({queryKey:["settings"],queryFn:async()=>{const{data:c,error:o}=await z.from("settings").select("*");if(o)throw o;return c}}),{data:Qe,isLoading:Hs}=me({queryKey:["luxusleasing-vehicles"],queryFn:async()=>{const{data:c,error:o}=await z.from("vehicles").select("*, pricing(*), link_monitor(*), spec_options(id, label), media(id, is_cover, optimized_url)").eq("leasing_type","restwert").neq("status","deleted").order("updated_at",{ascending:!1});if(o)throw o;return c},refetchOnWindowFocus:!0}),I=_.useMemo(()=>Qe==null?void 0:Qe.map(c=>{var N;const o=(N=c.media)==null?void 0:N.find(w=>w.is_cover),g=!!(o!=null&&o.optimized_url);return{...c,latestPricing:oi(c.pricing),relevantMonitor:li(c.link_monitor,c.external_id),hasOptimizedCover:g}}),[Qe]),{data:Js}=me({queryKey:["vehicle-details",V==null?void 0:V.id],queryFn:async()=>{if(!(V!=null&&V.id))return null;const{data:c,error:o}=await z.from("vehicles").select("*, pricing(*), link_monitor(*), spec_options(*), media(*)").eq("id",V.id).single();if(o)throw o;return c},enabled:!!(V!=null&&V.id)&&L});_.useEffect(()=>{var c;if(f){const o=((c=We==null?void 0:We.find(g=>g.key==="default_interest_rate"))==null?void 0:c.value)||"7.0";M(o)}},[f,We]);const ot=_.useCallback(c=>{if(c.slug)return`/luxusleasing/${c.slug}`;const o=c.title.toLowerCase().replace(/\s+/g,"-").replace(/[^a-z0-9-äöüÃ]/g,"");return`/luxusleasing/${c.offer_no.toLowerCase()}_${c.external_id}_2003_${o}`},[]),He=ne({mutationFn:async({vehicleId:c,checkAll:o})=>{const{data:g,error:N}=await z.functions.invoke("check-vehicle-availability",{body:{vehicleId:c,checkAll:o}});if(N)throw N;return g},onSuccess:c=>{t.invalidateQueries({queryKey:["vehicles"]}),B.success(c.checked===1?"Verfügbarkeit geprüft":`${c.checked} Fahrzeuge geprüft`),E(null),A(!1)},onError:c=>{B.error("Fehler beim Prüfen der Verfügbarkeit"),console.error(c),E(null),A(!1)}});ne({mutationFn:async({vehicleId:c,status:o})=>{const g={status:o};o==="deleted"?g.deleted_at=new Date().toISOString():o==="sold"&&(g.sold_at=new Date().toISOString());const{error:N}=await z.from("vehicles").update(g).eq("id",c);if(N)throw N},onMutate:async({vehicleId:c,status:o})=>{await t.cancelQueries({queryKey:["luxusleasing-vehicles"]});const g=t.getQueryData(["luxusleasing-vehicles"]);return t.setQueryData(["luxusleasing-vehicles"],N=>N&&N.map(w=>w.id===c?{...w,status:o,updated_at:new Date().toISOString()}:w)),{previousVehicles:g}},onSuccess:()=>{B.success("Status aktualisiert"),setTimeout(()=>t.invalidateQueries({queryKey:["luxusleasing-vehicles"],refetchType:"none"}),5e3)},onError:(c,o,g)=>{g!=null&&g.previousVehicles&&t.setQueryData(["luxusleasing-vehicles"],g.previousVehicles),B.error("Fehler beim Aktualisieren"),console.error(c)}});const Rt=ne({mutationFn:async c=>{const{error:o}=await z.from("vehicles").delete().eq("id",c);if(o)throw o;return c},onSuccess:()=>{t.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),B.success("Fahrzeug permanent gelöscht"),v(!1),d(null)},onError:c=>{B.error("Fehler beim Löschen"),console.error(c)}}),Tt=ne({mutationFn:async({vehicleId:c,newStatus:o})=>{const g={status:o};if(o==="published"){const w=I==null?void 0:I.find(R=>R.id===c);if(w){g.web_url=ot(w),g.published_at=new Date().toISOString();const{data:R}=await z.from("model_index").select("power_kw, power_hp, fuel_type, displacement_cc, drivetrain_awd, co2_emissions, fuel_consumption_combined, vehicle_type, euro_class, efficiency_class").eq("make",w.make).eq("family",w.model_family).maybeSingle();R&&(g.power_kw=w.power_kw||R.power_kw,g.power_hp=w.power_hp||R.power_hp,g.fuel_type=w.fuel_type||R.fuel_type,g.displacement_cc=w.displacement_cc||R.displacement_cc,g.drivetrain_awd=w.drivetrain_awd??R.drivetrain_awd,g.co2_emissions=w.co2_emissions||R.co2_emissions,g.fuel_consumption_combined=w.fuel_consumption_combined||R.fuel_consumption_combined,g.vehicle_type=w.vehicle_type||R.vehicle_type,g.euro_class=w.euro_class||R.euro_class,g.efficie
16ncy_class=w.efficiency_class||R.efficiency_class)}}const{error:N}=await z.from("vehicles").update(g).eq("id",c);if(N)throw N},onMutate:async({vehicleId:c,newStatus:o})=>{await t.cancelQueries({queryKey:["luxusleasing-vehicles"]});const g=t.getQueryData(["luxusleasing-vehicles"]);return t.setQueryData(["luxusleasing-vehicles"],N=>N&&N.map(w=>{if(w.id===c){const R={...w,status:o,updated_at:new Date().toISOString()};return o==="published"&&(R.web_url=ot(w),R.published_at=new Date().toISOString()),R}return w})),{previousVehicles:g}},onSuccess:(c,o)=>{B.success(o.newStatus==="published"?"Fahrzeug veröffentlicht":"Status aktualisiert"),setTimeout(()=>t.invalidateQueries({queryKey:["luxusleasing-vehicles"],refetchType:"none"}),5e3)},onError:(c,o,g)=>{g!=null&&g.previousVehicles&&t.setQueryData(["luxusleasing-vehicles"],g.previousVehicles),B.error("Fehler beim Aktualisieren"),console.error(c)}}),Vt=ne({mutationFn:async c=>{const{error:o}=await z.from("vehicles").update({sold_at:new Date().toISOString()}).eq("id",c);if(o)throw o},onSuccess:()=>{t.invalidateQueries({queryKey:["vehicles"]}),B.success("Als verkauft markiert")},onError:c=>{B.error("Fehler beim Markieren"),console.error(c)}}),Lt=ne({mutationFn:async({vehicleIds:c,newStatus:o})=>{const g={status:o},{error:N}=await z.from("vehicles").update(g).in("id",c);if(N)throw N},onMutate:async({vehicleIds:c,newStatus:o})=>{await t.cancelQueries({queryKey:["luxusleasing-vehicles"]});const g=t.getQueryData(["luxusleasing-vehicles"]);return t.setQueryData(["luxusleasing-vehicles"],N=>N&&N.map(w=>c.includes(w.id)?{...w,status:o,updated_at:new Date().toISOString()}:w)),{previousVehicles:g}},onSuccess:()=>{B.success("Status aktualisiert"),p(new Set),setTimeout(()=>t.invalidateQueries({queryKey:["luxusleasing-vehicles"],refetchType:"none"}),5e3)},onError:(c,o,g)=>{g!=null&&g.previousVehicles&&t.setQueryData(["luxusleasing-vehicles"],g.previousVehicles),B.error("Fehler beim Status-Update"),console.error(c)}}),ct=ne({mutationFn:async c=>{const o=I==null?void 0:I.filter(w=>c.includes(w.id)),g=o==null?void 0:o.map(w=>({vehicle_id:w.id,make:w.make,model_family:w.model_family||null,model_variant:null,first_registration:w.first_registration?new Date(w.first_registration).toISOString().split("T")[0]:null,mileage_km:w.mileage_km||null,our_sales_price:w.ask_price||0,sold:w.sold_at!==null})).filter(w=>w.our_sales_price>0);if(g&&g.length>0){const{error:w}=await z.from("vehicle_price_history").insert(g);w&&console.error("Error saving price history:",w)}const{error:N}=await z.from("vehicles").update({status:"archived",deleted_at:new Date().toISOString()}).in("id",c);if(N)throw N;return c.length},onMutate:async c=>{await t.cancelQueries({queryKey:["luxusleasing-vehicles"]});const o=t.getQueryData(["luxusleasing-vehicles"]);return t.setQueryData(["luxusleasing-vehicles"],g=>g&&g.map(N=>c.includes(N.id)?{...N,status:"archived",deleted_at:new Date().toISOString(),updated_at:new Date().toISOString()}:N)),{previousVehicles:o}},onSuccess:c=>{B.success(`${c} Fahrzeuge archiviert`,{description:"Preisdaten wurden in der Historie gespeichert"}),p(new Set),lt(!1),setTimeout(()=>t.invalidateQueries({queryKey:["luxusleasing-vehicles"],refetchType:"none"}),5e3)},onError:(c,o,g)=>{g!=null&&g.previousVehicles&&t.setQueryData(["luxusleasing-vehicles"],g.previousVehicles),B.error("Fehler beim Archivieren"),console.error(c)}}),dt=ne({mutationFn:async({vehicleIds:c,withArchive:o})=>{if(o){const N=I==null?void 0:I.filter(R=>c.includes(R.id)),w=N==null?void 0:N.map(R=>({vehicle_id:R.id,make:R.make,model_family:R.model_family||null,model_variant:null,first_registration:R.first_registration?new Date(R.first_registration).toISOString().split("T")[0]:null,mileage_km:R.mileage_km||null,our_sales_price:R.ask_price||0,sold:R.sold_at!==null})).filter(R=>R.our_sales_price>0);if(w&&w.length>0){const{error:R}=await z.from("vehicle_price_history").insert(w);R&&console.error("Error saving price history:",R)}}const{error:g}=await z.from("vehicles").delete().in("id",c);if(g)throw g;return c.length},onSuccess:(c,{withArchive:o})=>{t.invalidateQueries({queryKey:["luxusleasing-vehicles"]});const g=o?`${c} Fahrzeuge archiviert und gelöscht`:`${c} Fahrzeuge permanent gelöscht`;B.success(g),p(new Set),xe(!1)},onError:c=>{B.error("Fehler beim Löschen"),console.error(c)}}),qt=ne({mutationFn:async({vehicleId:c,newAskPrice:o})=>{const g=et(o),{error:N}=await z.from("vehicles").update({ask_price:o,our_sales_price:g}).eq("id",c);if(N)throw N;const{data:w,error:R}=await z.from("pricing").select("*").eq("vehicle_id",c).maybeSingle();if(R)throw R;if(w){const ue=I==null?void 0:I.find(Pe=>Pe.id===c),se=w.residual_eur||0,he=(ue==null?void 0:ue.term_months)||48,ge=(w.interest_annual||.07)/12*((g+se)/2)+(g-se)/he,ae=Math.round(ge),ie=g>0?ae/g*100:0,be=Xe(ae*1.19),{error:ye}=await z.from("pricing").update({rate_calc_net:ae,rate_rounded_net:ae,rate_rounded_gross:be,factor:ie}).eq("id",w.id);if(ye)throw ye}return{vehicleId:c,newAskPrice:o,newOurSalesPrice:g}},onMutate:async({vehicleId:c,newAskPrice:o})=>{await t.cancelQueries({queryKey:["luxusleasing-vehicles"]});const g=t.getQueryData(["luxusleasing-vehicles"]);return t.setQueryData(["luxusleasing-vehicles"],N=>{if(!N)return N;const w=et(o);return N.map(R=>R.id===c?{...R,ask_price:o,our_sales_price:w,updated_at:new Date().toISOString()}:R)}),{previousVehicles:g}},onSuccess:()=>{B.success("Preis aktualisiert"),t.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),t.invalidateQueries({queryKey:["vehicle-details"]}
16)},onError:(c,o,g)=>{g!=null&&g.previousVehicles&&t.setQueryData(["luxusleasing-vehicles"],g.previousVehicles),B.error("Fehler beim Aktualisieren des Preises"),console.error(c)}}),Ys=_.useCallback((c,o)=>{qt.mutate({vehicleId:c,newAskPrice:o})},[qt]),ut=ne({mutationFn:async({vehicleIds:c,rate:o})=>{const{data:g,error:N}=await z.from("pricing").select("*").in("vehicle_id",c);if(N)throw N;const w=(g||[]).map(U=>{const ge=I==null?void 0:I.find(Ye=>Ye.id===U.vehicle_id);if(!ge)return{id:U.id,vehicle_id:U.vehicle_id,interest_annual:o/100,residual_pct:U.residual_pct,residual_eur:U.residual_eur,rate_calc_net:U.rate_calc_net,rate_rounded_net:U.rate_rounded_net,factor:U.factor};const ae=ge.ask_price||0,ie=U.residual_eur||0,be=ge.term_months||48,ye=o/100,Pe=ye/12*((ae+ie)/2)+(ae-ie)/be,Me=Math.round(Pe),Je=ae>0?Me/ae*100:0;return{id:U.id,vehicle_id:U.vehicle_id,interest_annual:ye,residual_pct:U.residual_pct,residual_eur:U.residual_eur,down_payment:U.down_payment,delivery_fee:U.delivery_fee,broker_fee:U.broker_fee,rate_calc_net:Me,rate_rounded_net:Me,factor:Je,excess_km_rate_net:U.excess_km_rate_net,total_cost:U.total_cost}}),R=new Set((g==null?void 0:g.map(U=>U.vehicle_id))||[]),ue=c.filter(U=>!R.has(U)).map(U=>({vehicle_id:U,interest_annual:o/100})),se=[...w,...ue];if(se.length===0)throw new Error("Keine Pricing-Daten zum Aktualisieren");const{error:he}=await z.from("pricing").upsert(se,{onConflict:"id"});if(he)throw he;return c.length},onSuccess:async c=>{await t.refetchQueries({queryKey:["vehicles"]});const o=parseFloat(F.replace(",",".")).toFixed(1);B.success(`Zinssatz auf ${o}% aktualisiert`,{description:`${c} Fahrzeuge wurden aktualisiert`}),P(!1),p(new Set)},onError:c=>{B.error("Fehler beim Aktualisieren",{description:c.message})}}),Zs=_.useCallback(c=>{E(c),He.mutate({vehicleId:c})},[He]),Xs=_.useCallback(()=>{A(!0),He.mutate({checkAll:!0})},[He]),er=_.useCallback(c=>{$(c),Z(c.id),G(!0)},[]),tr=_.useCallback((c,o)=>{Tt.mutate({vehicleId:c,newStatus:o})},[Tt]),sr=_.useCallback(c=>{Vt.mutate(c)},[Vt]),rr=_.useCallback(c=>{d(c),v(!0)},[]),ir=_.useCallback(()=>{const c=I==null?void 0:I.filter(g=>g.status==="needs_update"||g.status==="marked_for_deletion"),o=c==null?void 0:c.map(g=>g.web_url).filter(g=>g).join(` 17`);if(o){navigator.clipboard.writeText(o);const g=(I==null?void 0:I.filter(w=>w.status==="needs_update").length)||0,N=(I==null?void 0:I.filter(w=>w.status==="marked_for_deletion").length)||0;B.success(`${c==null?void 0:c.length} URLs kopiert`,{description:`${g} Updates + ${N} Löschungen`})}else B.error("Keine URLs vorhanden")},[I]),ar=_.useCallback(c=>{const o=Array.from(j);c==="ready"?Lt.mutate({vehicleIds:o,newStatus:"ready_for_export"}):c==="archive"?lt(!0):c==="permanent_delete"&&xe(!0)},[j,Lt]),nr=_.useCallback(()=>{const c=q?(I==null?void 0:I.map(g=>g.id))||[]:Array.from(j);if(c.length===0){B.error("Keine Fahrzeuge ausgewählt");return}const o=parseFloat(F.replace(",","."));if(isNaN(o)||o<0||o>100){B.error("Ungültiger Zinssatz");return}ut.mutate({vehicleIds:c,rate:o})},[q,I,j,F,ut]),lr=_.useCallback(()=>{const c=I==null?void 0:I.filter(o=>{var w,R,ue,se,he;const g=o.title.toLowerCase().includes(a.toLowerCase())||o.make.toLowerCase().includes(a.toLowerCase())||o.offer_no.toLowerCase().includes(a.toLowerCase())||((w=o.external_id)==null?void 0:w.toLowerCase().includes(a.toLowerCase()));let N=!1;if(l==="all")N=!["archived","sold","deleted"].includes(o.status);else if(l==="to_delete")N=((ue=(R=o.link_monitor)==null?void 0:R[0])==null?void 0:ue.status)==="offline"||o.status==="marked_for_deletion";else if(l==="checked"){const U=new Date;U.setDate(U.getDate()-4),N=!["archived","sold","deleted"].includes(o.status)&&!!((se=o.relevantMonitor)!=null&&se.last_checked_at)&&new Date(o.relevantMonitor.last_checked_at)>U}else if(l==="pending"){const U=new Date;U.setDate(U.getDate()-4),N=!["archived","sold","deleted"].includes(o.status)&&(!((he=o.relevantMonitor)!=null&&he.last_checked_at)||new Date(o.relevantMonitor.last_checked_at)<=U)}else N=o.status===l;return g&&N});j.size===(c==null?void 0:c.length)?p(new Set):p(new Set((c==null?void 0:c.map(o=>o.id))||[]))},[j,I,a,l]),or=_.useCallback(c=>{const o=new Set(j);o.has(c)?o.delete(c):o.add(c),p(o)},[j]),cr=_.useCallback(c=>{C===c?k(o=>
17o==="asc"?"desc":"asc"):(b(c),k("asc"))},[C]),dr=_.useCallback(()=>p(new Set),[]),ur=_.useCallback(()=>{ct.mutate(Array.from(j))},[ct,j]),hr=_.useCallback(c=>{dt.mutate({vehicleIds:Array.from(j),withArchive:c})},[dt,j]),mr=_.useCallback(()=>{y&&Rt.mutate(y.id)},[Rt,y]),gr=_.useMemo(()=>[...new Set(I==null?void 0:I.map(o=>o.make))].filter(Boolean).sort(),[I]),fr=_.useMemo(()=>{const c=h==="all"?I:I==null?void 0:I.filter(g=>g.make===h);return[...new Set(c==null?void 0:c.map(g=>g.model_family))].filter(Boolean).sort()},[I,h]),pr=_.useMemo(()=>{var c;return(c=I==null?void 0:I.filter(o=>{var he,U,ge,ae;const g=a.toLowerCase(),N=(he=o.spec_options)==null?void 0:he.some(ie=>{var be;return(be=ie.label)==null?void 0:be.toLowerCase().includes(g)}),w=!a||o.title.toLowerCase().includes(g)||o.make.toLowerCase().includes(g)||o.offer_no.toLowerCase().includes(g)||((U=o.external_id)==null?void 0:U.toLowerCase().includes(g))||N,R=h==="all"||o.make===h,ue=x==="all"||o.model_family===x;let se=!1;if(l==="all")se=!["archived","sold","deleted"].includes(o.status);else if(l==="sold")se=o.status==="sold"||o.sold_at!==null;else if(l==="checked"){const ie=new Date;ie.setDate(ie.getDate()-4),se=!["archived","sold","deleted"].includes(o.status)&&!!((ge=o.relevantMonitor)!=null&&ge.last_checked_at)&&new Date(o.relevantMonitor.last_checked_at)>ie}else if(l==="pending"){const ie=new Date;ie.setDate(ie.getDate()-4),se=!["archived","sold","deleted"].includes(o.status)&&(!((ae=o.relevantMonitor)!=null&&ae.last_checked_at)||new Date(o.relevantMonitor.last_checked_at)<=ie)}else se=o.status===l;return w&&R&&ue&&se}))==null?void 0:c.sort((o,g)=>{var ue,se,he,U,ge,ae,ie,be,ye,Pe,Me,Je,Ye,$t;if(!C)return 0;let N,w;switch(C){case"offer_no":N=o.offer_no,w=g.offer_no;break;case"title":N=o.title,w=g.title;break;case"list_price":N=o.list_price,w=g.list_price;break;case"ask_price":N=o.ask_price,w=g.ask_price;break;case"rate":N=Array.isArray(o.pricing)?(ue=o.pricing[0])==null?void 0:ue.rate_rounded_gross:(se=o.pricing)==null?void 0:se.rate_rounded_gross,w=Array.isArray(g.pricing)?(he=g.pricing[0])==null?void 0:he.rate_rounded_gross:(U=g.pricing)==null?void 0:U.rate_rounded_gross;break;case"factor":N=Array.isArray(o.pricing)?(ge=o.pricing[0])==null?void 0:ge.factor:(ae=o.pricing)==null?void 0:ae.factor,w=Array.isArray(g.pricing)?(ie=g.pricing[0])==null?void 0:ie.factor:(be=g.pricing)==null?void 0:be.factor;break;case"interest":N=Array.isArray(o.pricing)?(ye=o.pricing[0])==null?void 0:ye.interest_annual:(Pe=o.pricing)==null?void 0:Pe.interest_annual,w=Array.isArray(g.pricing)?(Me=g.pricing[0])==null?void 0:Me.interest_annual:(Je=g.pricing)==null?void 0:Je.interest_annual;break;case"mileage_km":N=o.mileage_km||0,w=g.mileage_km||0;break;case"first_registration":N=o.first_registration?new Date(o.first_registration).getTime():0,w=g.first_registration?new Date(g.first_registration).getTime():0;break;case"updated_at":N=o.updated_at?new Date(o.updated_at).getTime():0,w=g.updated_at?new Date(g.updated_at).getTime():0;break;case"last_checked_at":N=(Ye=o.relevantMonitor)!=null&&Ye.last_checked_at?new Date(o.relevantMonitor.last_checked_at).getTime():0,w=($t=g.relevantMonitor)!=null&&$t.last_checked_at?new Date(g.relevantMonitor.last_checked_at).getTime():0;break;default:return 0}if(N===w)return 0;if(N==null)return 1;if(w==null)return-1;const R=N<w?-1:1;return S==="asc"?R:-R})},[I,a,h,x,l,C,S]),xr=_.useMemo(()=>{const c=new Date;c.setDate(c.getDate()-4);const o=(I==null?void 0:I.filter(g=>!["archived","sold","deleted"].includes(g.status)))||[];return{all:o.length,draft:(I==null?void 0:I.filter(g=>g.status==="draft").length)||0,ready:(I==null?void 0:I.filter(g=>g.status==="ready").length)||0,published:(I==null?void 0:I.filter(g=>g.status==="published").length)||0,sold:(I==null?void 0:I.filter(g=>g.status==="sold"||g.sold_at!==null).length)||0,archived:(I==null?void 0:I.filter(g=>g.status==="archived").length)||0,checked:o.filter(g=>{var N;return((N=g.relevantMonitor)==null?void 0:N.last_checked_at)&&new Date(g.relevantMonitor.last_checked_at)>c}).length,pending:o.filter(g=>{var N;return!((N=g.relevantMonitor)!=null&&N.last_checked_at)||new Date(g.relevantMonitor.last_checked_at)<=c}).length}},[I]);return{isAdmin:u,vehicles:I,filteredVehicles:pr,vehicleDetails:Js,isLoading:Hs,statusCounts:xr,search:a,setSearch:r,statusFilter:l,setStatusFilter:i,makeFilter:h,setMakeFilter:n,modelFilter:x,setModelFilter:m,availableMakes:gr,availableModels:fr,selectedVehicles:j,toggleSelectVehicle:or,toggleSelectAll:lr,clearSelection:dr,sortColumn:C,sortDirection:S,handleSort:cr,checkingVehicleId:O,checkingAll:T,handleCheckSingle:Zs,handleCheckAll:Xs,handleStatusChange:tr,handleMarkAsSold:sr,handleDeleteClick:rr,handleCopyDeleteUrls:ir,handleBulkAction:ar,handleBulkInterestRateUpdate:nr,handleInlineAskPriceUpdate:Ys,confirmSingleDeletion:mr,bulkUpdateInterestRateMutation:ut,editDialogOpen:L,setEditDialogOpen:G,vehicleToEdit:V,setVehicleToEdit:$,handleRowClick:er,lastViewedVehicleId:X,deleteConfirmOpen:D,setDeleteConfirmOpen:v,vehicleToDelete:y,setVehicleToDelete:d,interestRateDialogOpen:f,setInterestRateDialogOpen:P,newInterestRate:F,setNewInterestRate:
17M,applyToAll:q,setApplyToAll:K,urlListDialogOpen:re,setUrlListDialogOpen:ee,urlsToExport:pe,permanentDeleteDialogOpen:H,setPermanentDeleteDialogOpen:xe,confirmPermanentDelete:hr,permanentDeleteMutation:dt,archiveDialogOpen:Re,setArchiveDialogOpen:lt,confirmArchive:ur,archiveWithHistoryMutation:ct,generateWebUrl:ot,roundToNearest50:Xe}}function di(){const s=Oe(),[u,t]=_.useState(!1),a=_.useRef(!1),r=_.useRef(!1),{data:l,isLoading:i}=me({queryKey:["vehicle-status-stats"],queryFn:async()=>{const m=new Date;m.setDate(m.getDate()-4);const{data:j,error:p}=await z.from("link_monitor").select(` 18 id, 19 last_checked_at, 20 source_url, 21 vehicles!inner(id, status, leasing_type) 22 `).not("source_url","is",null);if(p)throw p;const C=(j||[]).filter(k=>{var O,E;return((O=k.vehicles)==null?void 0:O.leasing_type)==="restwert"&&!["deleted","archived","sold"].includes((E=k.vehicles)==null?void 0:E.status)}),b=C.filter(k=>k.last_checked_at&&new Date(k.last_checked_at)>m),S=C.filter(k=>!k.last_checked_at||new Date(k.last_checked_at)<=m);return{checkedCount:b.length,pendingCount:S.length,totalCount:C.length}},refetchInterval:6e4}),h=ne({mutationFn:async m=>{const{data:j,error:p}=await z.functions.invoke("check-vehicle-availability",{body:{vehicleId:m}});if(p)throw p;return j},onSuccess:m=>{var p;(((p=m.results)==null?void 0:p.filter(C=>C.status==="offline"))||[]).length>0?B.info("Fahrzeug archiviert",{description:"Das Fahrzeug ist auf mobile.de nicht mehr verfügbar und wurde automatisch archiviert."}):B.success("Online-Status geprüft")},onError:m=>{B.error("Fehler beim Prüfen"),console.error(m)},onSettled:()=>{s.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),s.invalidateQueries({queryKey:["vehicle-status-stats"]})}}),n=_.useCallback(async(m=20)=>{var j,p,C;if(!u){t(!0),a.current=!1;try{const b=new Date;b.setDate(b.getDate()-4);const S=b.toISOString(),{data:k,error:O}=await z.from("link_monitor").select(` 23 id, 24 vehicle_id, 25 last_checked_at, 26 source_url, 27 vehicles!inner(id, make, model, status, leasing_type) 28 `).not("source_url","is",null).eq("vehicles.leasing_type","restwert").not("vehicles.status","in",'("deleted","archived","sold")').or(`last_checked_at.is.null,last_checked_at.lt.${S}`).order("last_checked_at",{ascending:!0,nullsFirst:!0}).limit(m);if(O)throw O;const E=new Map;for(const V of k||[])E.has(V.vehicle_id)||E.set(V.vehicle_id,V);const T=Array.from(E.values());if(T.length===0){B.info("Keine Fahrzeuge zu prüfen",{description:"Alle Fahrzeuge wurden kürzlich geprüft."}),t(!1);return}let A=0,L=0,G=0;for(let V=0;V<T.length&&!a.current;V++){const $=T[V],X=`${((j=$.vehicles)==null?void 0:j.make)||""} ${((p=$.vehicles)==null?void 0:p.model)||""}`.trim();try{const{data:Z,error:D}=await z.functions.invoke("check-vehicle-availability",{body:{vehicleId:$.vehicle_id}});if(D)throw D;const v=(C=Z.results)==null?void 0:C[0];(v==null?void 0:v.status)==="offline"?(L++,B.info(`${V+1}/${T.length}: ${X} â Offline`,{description:"Automatisch archiviert"})):(A++,B.success(`${V+1}/${T.length}: ${X} â Online`))}catch(Z){G++,B.error(`${V+1}/${T.length}: ${X} â Fehler`),console.error(`Error checking vehicle ${$.vehicle_id}:`,Z)}s.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),s.invalidateQueries({queryKey:["vehicle-status-stats"]})}a.current||B.success("Prüfung abgeschlossen",{description:`${A} online, ${L} offline${G>0?`, ${G} Fehler`:""}`})}catch(b){B.error("Fehler beim Laden der Fahrzeuge"),console.error(b)}finally{t(!1)}}},[u,s]),x=ne({mutationFn:async({vehicleId:m,status:j})=>{if(r.current)return{status:j};r.current=!0;try{const{error:p}=await z.from("link_monitor").update({status:j,last_checked_at:new Date().toISOString()}).eq("vehicle_id",m);if(p)throw p;if(j==="offline"){const{data:C}=await z.from("vehicles").select("make, model_family, model_variant, first_registration, mileage_km, ask_price, our_sales_price").eq("id",m).single();C&&await z.from("vehicle_price_history").insert({vehicle_id:m,make:C.make,model_family:C.model_family,model_variant:C.model_variant,first_registration:C.first_registration,mileage_km:C.mileage_km,our_sales_price:C.our_sales_price??C.ask_price??0});const{error:b}=await z.from("vehicles").update({status:"archived",archive_reason:"mobile_offline_manual"}).eq("id",m);if(b)throw b}return{status:j}}finally{r.current=!1}},onSuccess:m=>{m.status==="offline"?B.info("Fahrzeug als Offline markiert & archiviert"):m.status==="online"?B.success("Fahrzeug als Online markiert"):B.info("Status auf Unbekannt gesetzt")},onError:m=>{B.error("Fehler beim Setzen des Status"),console.error(m)},onSettled:()=>{s.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),s.invalidateQueries({queryKey:["vehicle-status-stats"]})}});return{statusStats:l||{checkedCount:0,pendingCount:0,totalCount:0},statsLoading:i,checkSingle:h.mutate,checkNextSequential:n,isCheckingSingle:h.isPending,checkingVehicleId:h.isPending?h.variables:void 0,isCheckingNext:u,setManualStatus:x.mutate}}const Yt={externalId:"",offerNo:"",slug:"",webUrl:"",selectedModel:"",modelSearch:"",title:"",vehicleType:"",vehicleCondition:"Junger Gebrauchter",exterior
28Color:"",colorExteriorOem:"",colorExteriorUi:"",interior:"",firstRegistration:"",mileage:"",askPrice:"",ourSalesPrice:"",listPrice:"",residualPercent:"70",residualValue:"",interestRate:"7.0",term:"48",downPayment:"0",mileageYear:"7500",brokerFee:"4000",deliveryFee:"0",leasingAudience:"Privat & Gewerblich",availability:"sofort verfügbar",leasingRate:null,leasingRateNet:null,leasingFactor:null,equipment:"",uploadedImages:[],co2Emissions:"",fuelConsumption:"",isFeatured:!1},Zt={modelOpen:!1,exteriorOpen:!1,interiorOpen:!1},Xt={showColorDialog:!1,pendingOemColor:null,pendingUiColor:null,showInteriorDialog:!1,pendingInteriorDesc:null,pendingInteriorUiColor:null},es={externalId:!1,selectedModel:!1,askPrice:!1,ourSalesPrice:!1,listPrice:!1},ts={isImporting:!1,isOptimizingImages:!1,optimizingImageIndex:null,htmlInput:""},Se=ve;function Fs({initialData:s,isOpen:u,vehicleId:t,leasingType:a="restwert"}){const[r,l]=_.useState({...Yt,...s}),[i,h]=_.useState(Zt),[n,x]=_.useState(Xt),[m,j]=_.useState(es),[p,C]=_.useState(ts),{data:b}=me({queryKey:["model_index"],queryFn:async()=>{const{data:D,error:v}=await z.from("model_index").select("*").order("make",{ascending:!0});if(v)throw v;return D}}),{data:S}=me({queryKey:["color_mappings"],queryFn:async()=>{const{data:D,error:v}=await z.from("color_mappings").select("*").order("oem_color",{ascending:!0});if(v)throw v;return D}}),{data:k}=me({queryKey:["interior_color_mappings"],queryFn:async()=>{const{data:D,error:v}=await z.from("interior_color_mappings").select("*").order("description",{ascending:!0});if(v)throw v;return D}}),{data:O}=me({queryKey:["settings","default_interest_rate"],queryFn:async()=>{const{data:D,error:v}=await z.from("settings").select("*").eq("key","default_interest_rate").maybeSingle();if(v&&v.code!=="PGRST116")throw v;return D}}),E=(O==null?void 0:O.value)||"7.0",T=_.useCallback((D,v)=>{l(y=>({...y,[D]:v}))},[]),A=_.useCallback((D,v)=>{const y=parseFloat(D),d=parseFloat(Se(v));if(!isNaN(y)&&!isNaN(d)){const f=d*y/100,P=te(f.toFixed(0));return l(F=>({...F,residualValue:P})),f.toString()}return""},[]),L=_.useCallback(()=>{const D=parseFloat(Se(r.ourSalesPrice)),v=parseFloat(Se(r.residualValue)),y=parseFloat(r.interestRate.replace(",",".")),d=parseFloat(r.term),f=parseFloat(Se(r.downPayment));if(!D||!v||!y||!d){l(Re=>({...Re,leasingRate:null,leasingRateNet:null,leasingFactor:null}));return}const P=D-(f||0),F=Math.pow(1+y/100,1/12)-1,M=Math.pow(1+F,-d),q=v*M,K=(1+F)*(1-M)/F,re=(P-q)/K,ee=Xe(re),pe=ee/1.19,Ce=Math.round(pe*100)/100,H=parseFloat(Se(r.listPrice));let xe=null;!isNaN(H)&&H>0&&(xe=parseFloat((ee/H*100).toFixed(2))),l(Re=>({...Re,leasingRate:ee,leasingRateNet:Ce,leasingFactor:xe}))},[r.ourSalesPrice,r.residualValue,r.interestRate,r.term,r.listPrice,r.downPayment]);_.useEffect(()=>{r.ourSalesPrice&&!r.residualValue&&A(r.residualPercent,r.ourSalesPrice)},[r.ourSalesPrice]),_.useEffect(()=>{if(r.mileage&&r.ourSalesPrice&&a==="restwert"){const D=parseInt(Se(r.mileage));if(!isNaN(D)){const v=jr(D);l(y=>({...y,residualPercent:v.toString()})),A(v.toString(),r.ourSalesPrice)}}},[r.mileage,r.ourSalesPrice,a]),_.useEffect(()=>{if(r.mileage&&r.firstRegistration){const D=parseInt(Se(r.mileage)),v=Nt(r.firstRegistration);if(!isNaN(D)&&v){const y=br(D,v);l(d=>({...d,vehicleCondition:y}))}}},[r.mileage,r.firstRegistration]),_.useEffect(()=>{if(r.selectedModel&&b){const D=b.find(v=>v.id===r.selectedModel);D!=null&&D.vehicle_type&&l(v=>({...v,vehicleType:D.vehicle_type}))}},[r.selectedModel,b]),_.useEffect(()=>{if(r.offerNo&&r.externalId&&r.title){const D=wt(r.offerNo,r.externalId,r.title);l(v=>({...v,slug:D,webUrl:kt(D)}))}},[r.offerNo,r.externalId,r.title]),_.useEffect(()=>{u&&(O!=null&&O.value)&&!(s!=null&&s.interestRate)&&l(D=>({...D,interestRate:O.value}))},[u,O]),_.useEffect(()=>{L()},[L]);const G=_.useCallback(()=>{l({...Yt,interestRate:E}),h(Zt),x(Xt),j(es),C(ts)},[E]);_.useEffect(()=>{u||G()},[u]);const V=_.useCallback(()=>{const D={externalId:!r.externalId,selectedModel:!r.selectedModel,askPrice:!r.askPrice,ourSalesPrice:!r.ourSalesPrice,listPrice:!r.listPrice};return j(D),!Object.values(D).some(Boolean)},[r]),$=_.useCallback(D=>{l(v=>({...v,uploadedImages:[...v.uploadedImages,D]}))},[]),X=_.useCallback(D=>{l(v=>({...v,uploadedImages:v.uploadedImages.filter((y,d)=>d!==D)}))},[]),Z=_.useCallback((D,v)=>{l(y=>({...y,uploadedImages:y.uploadedImages.map((d,f)=>f===D?{...d,optimizedUrl:v}:d)}))},[]);return{formData:r,setFormData:l,updateField:T,popoverState:i,setPopoverState:h,colorDialogState:n,setColorDialogState:x,fieldErrors:m,setFieldErrors:j,validateRequiredFields:V,processingState:p,setProcessingState:C,models:b,colorMappings:S,interiorMappings:k,defaultInterestRate:E,updateResidualFromPercent:A,calculateLeasingRate:L,resetForm:G,addImage:$,removeImage:X,updateImageOptimized:Z}}function Is({selectedModel:s,onSelect:u,models:t,error:a=!1,open:r,onOpenChange:l,className:i}){const h=t==null?void 0:t.find(x=>x.id===s),n=h?`${h.make} ${h.family} ${h.variant||""}`:"Modell auswählen...";return e.jsxs(us,{open:r,onOpenChange:l,children:[e.jsx(hs,{asChild:!0,children:e.jsxs(W,{variant:"outline",role:"combobox","aria-expanded":r,className:J("w-full justify-between",a&&"border-destructive focus-visible:ring-destructive",i),children:[n,e.jsx(gs,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(ms,{className:"w-[400px] p-0",align:"start",onWheel:x=>x.stopPropagation(),onTouchMove:x=>x.stopPropagation(),children:e.jsxs(fs,{children:[e.jsx(ps,{placeholder:"Fahrzeug suchen..."}),e.jsxs(xs,{children:[e.jsx(_s,{children:"Kein Fahrzeug gefunden."}),e.jsx(vs,{children:t==null?void 0:t.map(x=>e.jsxs(bs,{value:`${x.make} ${x.family} ${x.variant||""}`,onSelect:()=>{u(x.id,x),l(!1)},children:[e.jsx(Pt,{className:J("mr-2 h-4 w-4",s===x.id?"opacity-100":"opacity-0")}),x.make," ",x.family," ",x.variant||""]},x.id))})]})]})})]})}function rt({type:s,value:u,onChange:t,mappings:a,open:r,onOpenChange:l,className:i}){const h=s==="exterior",n=h?"Farbe auswählen...":"Interieur auswählen...",x=h?"Farbe suchen oder eingeben...":"Interieur suchen oder eingeben...",m=h?`"${u}" als neue Farbe verwenden`:`"${u}" als neues Interieur verwenden`,j=(a==null?void 0:a.map(p=>h?p.oem_color:p.description))||[];return e.jsxs(us,{open:r,onOpenChange:l,children:[e.jsx(hs,{asChild:!0,children:e.jsxs(W,{variant:"outline",role:"combobox","aria-expanded":r,className:J("w-full justify-between",i),children:[u||n,e.jsx(gs,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(ms,{className:"w-[280px] p-0",align:"start",onWheel:p=>p.stopPropagation(),onTouchMove:p=>p.stopPropagation(),children:e.jsxs(fs,{children:[e.jsx(ps,{placeholder:x,value:u,onValueChange:t}),e.jsxs(xs,{className:"max-h-[300px] overflow-y-auto",children:[e.jsx(_s,{children:e.jsx(W,{variant:"ghost",className:"w-full justify-start text-sm",onClick:()=>l(!1),children:m})}),e.jsx(vs,{children:j.map(p=>{const C=a==null?void 0:a.find(b=>h?b.oem_color===p:b.description===p);return e.jsxs(bs,{value:p,onSelect:b=>{t(b),l(!1)},children:[e.jsx(Pt,{className:J("mr-2 h-4 w-4",u===p?"opacity-100":"opacity-0")}),C&&e.jsx(Sr,{color:C.ui_color,className:"mr-2"}),p]},p)})})]})]})})]})}function Ds({vehicleCondition:s,availability:u,leasingAudience:t,firstRegistration:a,mileage:r,onFieldChange:l}){const i=n=>{const x=n.target.value.replace(/\D/g,"");if(x.length<=4){let m=x;if(x.length>=2&&(parseInt(x.substring(0,2))>12?m="12"+x.substring(2):m=x),x.length===4){const j=m.substring(0,2),p="20"+m.substring(2);m=`${j}/${p}`}l("firstRegistration",m)}else if(x.length<=6&&n.target.value.includes("/")){const m=n.target.value.replace(/[^\d/]/g,"");m.length<=7&&l("firstRegistration",m)}},h=n=>{const x=te(n.target.value);l("mileage",x)};return e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-lg font-bold tracking-tight",children:"Fahrzeugdetails"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"vehicle_condition",children:"Fahrzeugzustand"}),e.jsxs(Fe,{value:s,onValueChange:n=>l("vehicleCondition",n),children:[e.jsx(Ie,{children:e.jsx(De,{placeholder:"Auswählen..."})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"Junger Gebrauchter",children:"Junger Gebrauchter"}),e.jsx(Y,{value:"Neuwagen",children:"Neuwagen"}),e.jsx(Y,{value:"Jahreswagen",children:"Jahreswagen"}),e.jsx(Y,{value:"Gebrauchtwagen",children:"Gebrauchtwagen"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"availability",children:"Verfügbarkeit"}),e.jsxs(Fe,{value:u,onValueChange:n=>l("availability",n),children:[e.jsx(Ie,{children:e.jsx(De,{placeholder:"Auswählen..."})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"sofort verfügbar",children:"Sofort verfügbar"}),e.jsx(Y,{value:"In 2 Wochen",children:"In 2 Wochen"}),e.jsx(Y,{value:"In 4 Wochen",children:"In 4 Wochen"}),e.jsx(Y,{value:"Auf Anfrage",children:"Auf Anfrage"})]})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"leasing_audience",children:"Leasingrate für"}),e.jsxs(Fe,{value:t,onValueChange:n=>l("leasingAudience",n),children:[e.jsx(Ie,{children:e.jsx(De,{})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"Privat & Gewerblich",children:"Privat & Gewerblich"}),e.jsx(Y,{value:"Nur Gewerblich",children:"Nur Gewerblich"}),e.jsx(Y,{value:"Nur Privat",children:"Nur Privat"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"first_registration",children:"Erstzulassung (MM/JJJJ)"}),e.jsx(de,{id:"first_registration",name:"vehicle_first_reg",value:a,onChange:i,placeholder:"z.B. 0522 oder 05/2022",maxLength:7,autoComplete:"chrome-off",readOnly:!0,onFocus:n=>n.currentTarget.removeAttribute("readonly")})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"mileage",children:"Kilometerstand"}),e.jsx(de,{id:"mileage",type:"text",value:r,onChange:h,placeholder:"z.B. 15.000"})]})]})]})}function zs({mileageYear:s,brokerFee:u,deliveryFee:t,downPayment:a,onFieldChange:r}){return e.jsxs("div",{className:"space-y-4 pt-4 border-t",children:[e.jsx("h3",{className:"text-lg font-bold tracking-tight",children:"Leasing-Parameter"}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"mileageYear",children:"Jährliche Kilometer"}),e.jsxs(Fe,{value:s,onValueChange:l=>r("mileageYear",l),children:[e.jsx(Ie,{children:e.jsx(De,{})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"5000",children:"5.000 km/Jahr"}),e.jsx(Y,{value:"7500",children:"7.500 km/Jahr"}),e.jsx(Y,{value:"10000",children:"10.000 km/Jahr"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"brokerFee",children:"Vermittlungsprovision (â¬)"}),e.jsx(de,{id:"brokerFee",type:"text",value:te(u),onChange:l=>r("brokerFee",ve(l.target.value)),placeholder:"3.000"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"deliveryFee",children:"Ãberführungskosten (â¬)"}),e.jsx(de,{id:"deliveryFee",type:"text",value:te(t),onChange:l=>r("deliveryFee",ve(l.target.value)),placeholder:"0"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"downPayment",children:"Anzahlung (â¬)"}),e.jsx(de,{id:"downPayment",type:"text",value:te(a),onChange:l=>r("downPayment",ve(l.target.value)),placeholder:"0"})]})]})]})}function Ps({askPrice:s,ourSalesPrice:u,listPrice:t,residualPercent:a,residualValue:r,interestRate:l,term:i,leasingRate:h,leasingRateNet:n,leasingFactor:x,onFieldChange:m,onResidualUpdate:j,onAskPriceChanged:p,fieldErrors:C}){const b=T=>{const A=te(T.target.value);if(m("askPrice",A),A){const L=parseFloat(ve(A));if(!isNaN(L)){const G=et(L),V=te(G.toString());m("ourSalesPrice",V),p==null||p(L),a&&j(a,V)}}else m("ourSalesPrice","")},S=T=>{const A=te(T.target.value);m("ourSalesPrice",A),A&&a&&j(a,A)},k=T=>{const A=te(T.target.value);m("listPrice",A)},O=T=>{const A=T.target.value;m("residualPercent",A),u&&A&&j(A,u)},E=T=>{const A=te(T.target.value);m("residualValue",A)};return e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"askPrice",className:J(C.askPrice&&"text-destructive"),children:"Originaler Verkaufspreis (â¬) *"}),e.jsx(de,{id:"askPrice",type:"text",value:s,onChange:b,placeholder:"z.B. 287.000",className:J(C.askPrice&&"border-destructive focus-visible:ring-destructive")}
28)]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Q,{htmlFor:"ourSalesPrice",className:J(C.ourSalesPrice&&"text-destructive"),children:"Unser Verkaufspreis (â¬) *"}),e.jsx(_t,{children:e.jsxs(le,{children:[e.jsx(oe,{children:e.jsx(vt,{className:"h-3.5 w-3.5 text-muted-foreground"})}),e.jsx(ce,{children:e.jsx("p",{children:"Original + 3.000 â¬, aufgerundet auf volle Tausender"})})]})})]}),e.jsx(de,{id:"ourSalesPrice",type:"text",value:u,onChange:S,placeholder:"z.B. 290.000",className:J(C.ourSalesPrice&&"border-destructive focus-visible:ring-destructive")})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Q,{htmlFor:"listPrice",className:J(C.listPrice&&"text-destructive"),children:"Listenpreis / UVP (â¬) *"}),e.jsx(_t,{children:e.jsxs(le,{children:[e.jsx(oe,{children:e.jsx(vt,{className:"h-3.5 w-3.5 text-muted-foreground"})}),e.jsx(ce,{children:e.jsx("p",{children:"Der originale Neupreis des Fahrzeugs, für die Berechnung des Leasingfaktors."})})]})})]}),e.jsx(de,{id:"listPrice",type:"text",value:t,onChange:k,placeholder:"z.B. 350.000",className:J(C.listPrice&&"border-destructive focus-visible:ring-destructive")}
28)]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"residualPercent",children:"Restwert (%)"}),e.jsx(de,{id:"residualPercent",type:"number",value:a,onChange:O,placeholder:"70"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"residualValue",children:"Restwert (â¬)"}),e.jsx(de,{id:"residualValue",type:"text",value:r,onChange:E,placeholder:"Automatisch berechnet",className:"bg-muted/50"})]})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"interestRate",children:"Zinssatz (%)"}),e.jsx(de,{id:"interestRate",type:"number",step:"0.1",value:l,onChange:T=>m("interestRate",T.target.value),placeholder:"7"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"term",children:"Laufzeit (Monate)"}),e.jsxs(Fe,{value:i,onValueChange:T=>m("term",T),children:[e.jsx(Ie,{children:e.jsx(De,{placeholder:"Laufzeit wählen"})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"36",children:"36 Monate"}),e.jsx(Y,{value:"48",children:"48 Monate"}),e.jsx(Y,{value:"60",children:"60 Monate"})]})]})]})]}),h!==null&&e.jsxs("div",{className:"space-y-2 border-t pt-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/50 rounded-lg",children:[e.jsx("span",{className:"text-sm font-medium",children:"Leasingrate (Brutto):"}),e.jsxs("span",{className:"text-lg font-bold",children:[Math.round(h).toLocaleString("de-DE",{minimumFractionDigits:0,maximumFractionDigits:0})," â¬"]})]}),n!==null&&e.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[e.jsx("span",{className:"text-sm font-medium",children:"Leasingrate (Netto):"}),e.jsxs("span",{className:"text-lg font-semibold",children:[n.toFixed(2).replace(".",",")," â¬"]})]}),x!==null&&e.jsxs("div",{className:"flex items-center justify-between p-3 bg-primary/10 rounded-lg",children:[e.jsx("span",{className:"text-sm font-medium",children:"Leasingfaktor:"}),e.jsxs("span",{className:"text-lg font-bold text-primary",children:[x,"%"]})]})]})]})}var Ms="Toggle",Et=_.forwardRef((s,u)=>
28{const{pressed:t,defaultPressed:a,onPressedChange:r,...l}=s,[i,h]=Mt({prop:t,onChange:r,defaultProp:a??!1,caller:Ms});return e.jsx(bt.button,{type:"button","aria-pressed":i,"data-state":i?"on":"off","data-disabled":s.disabled?"":void 0,...l,ref:u,onClick:Fr(s.onClick,()=>{s.disabled||h(!i)})})});Et.displayName=Ms;var As=Et,Ne="ToggleGroup",[Es,sn]=Ir(Ne,[js]),Os=js(),Ot=fe.forwardRef((s,u)=>{const{type:t,...a}=s;if(t==="single"){const r=a;return e.jsx(ui,{...r,ref:u})}if(t==="multiple"){const r=a;return e.jsx(hi,{...r,ref:u})}throw new Error(`Missing prop \`type\` expected on \`${Ne}\``)});Ot.displayName=Ne;var[Rs,Ts]=Es(Ne),ui=fe.forwardRef((s,u)=>{const{value:t,defaultValue:a,onValueChange:r=()=>{},...l}=s,[i,h]=Mt({prop:t,defaultProp:a??"",onChange:r,caller:Ne});return e.jsx(Rs,{scope:s.__scopeToggleGroup,type:"single",value:fe.useMemo(()=>i?[i]:[],[i]),onItemActivate:h,onItemDeactivate:fe.useCallback(()=>h(""),[h]),children:e.jsx(Vs,{...l,ref:u})})}),hi=fe.forwardRef((s,u)=>{const{value:t,defaultValue:a,onValueChange:r=()=>{},...l}=s,[i,h]=Mt({prop:t,defaultProp:a??[],onChange:r,caller:Ne}),n=fe.useCallback(m=>h((j=[])=>[...j,m]),[h]),x=fe.useCallback(m=>h((j=[])=>j.filter(p=>p!==m)),[h]);return e.jsx(Rs,{scope:s.__scopeToggleGroup,type:"multiple",value:i,onItemActivate:n,onItemDeactivate:x,children:e.jsx(Vs,{...l,ref:u})})});Ot.displayName=Ne;var[mi,gi]=Es(Ne),Vs=fe.forwardRef((s,u)=>{const{__scopeToggleGroup:t,disabled:a=!1,rovingFocus:r=!0,orientation:l,dir:i,loop:h=!0,...n}=s,x=Os(t),m=Dr(i),j={role:"group",dir:m,...n};return e.jsx(mi,{scope:t,rovingFocus:r,disabled:a,children:r?e.jsx(zr,{asChild:!0,...x,orientation:l,dir:m,loop:h,children:e.jsx(bt.div,{...j,ref:u})}):e.jsx(bt.div,{...j,ref:u})})}),it="ToggleGroupItem",Ls=fe.forwardRef((s,u)=>{const t=Ts(it,s.__scopeToggleGroup),a=gi(it,s.__scopeToggleGroup),r=Os(s.__scopeToggleGroup),l=t.value.includes(s.value),i=a.disabled||s.disabled,h={...s,pressed:l,disabled:i},n=fe.useRef(null);return a.rovingFocus?e.jsx(Pr,{asChild:!0,...r,focusable:!i,active:l,ref:n,children:e.jsx(ss,{...h,ref:u})}):e.jsx(ss,{...h,ref:u})});Ls.displayName=it;var ss=fe.forwardRef((s,u)=>{const{__scopeToggleGroup:t,value:a,...r}=s,l=Ts(it,t),i={role:"radio","aria-checked":s.pressed,"aria-pressed":void 0},h=l.type==="single"?i:void 0;return e.jsx(Et,{...h,...r,ref:u,onPressedChange:n=>{n?l.onItemActivate(a):l.onItemDeactivate(a)}})}),qs=Ot,$s=Ls;const Us=yr("inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",{variants:{variant:{default:"bg-transparent",outline:"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"},size:{default:"h-10 px-3",sm:"h-9 px-2.5",lg:"h-11 px-5"}},defaultVariants:{variant:"default",size:"default"}}),fi=_.forwardRef(({className:s,variant:u,size:t,...a},r)=>e.jsx(As,{ref:r,className:J(Us({variant:u,size:t,className:s})),...a}));fi.displayName=As.displayName;const Bs=_.createContext({size:"default",variant:"default"}),Ks=_.forwardRef(({className:s,variant:u,size:t,children:a,...r},l)=>e.jsx(qs,{ref:l,className:J("flex items-center justify-center gap-1",s),...r,children:e.jsx(Bs.Provider,{value:{variant:u,size:t},children:a})}));Ks.displayName=qs.displayName;const jt=_.forwardRef(({className:s,children:u,variant:t,size:a,...r},l)=>{const i=_.useContext(Bs);return e.jsx($s,{ref:l,className:J(Us({variant:i.variant||t,size:i.size||a}),s),...r,children:u})});jt.displayName=$s.displayName;function Gs({images:s,onAddImage:u,onRemoveImage:t,onRemoveOptimized:a,onOptimizeImage:r,onOptimizeAll:l,isOptimizing:i,optimizingIndex:h,isDialogOpen:n=!1,showOptimizedPreview:x=!1,engine:m="photoroom",onEngineChange:j}){const{toast:p}=nt();_.useEffect(()=>{if(!n)return;const S=async k=>{var E;const O=(E=k.clipboardData)==null?void 0:E.items;if(O){for(let T=0;T<O.length;T++)if(O[T].type.indexOf("image")!==-1){const A=O[T].getAsFile();A&&await C(A)}}};return window.addEventListener("paste",S),()=>window.removeEventListener("paste",S)},[n]);const C=async S=>{try{const k=S.name.split(".").pop()||"jpg",E=`vehicle-images/${`${Date.now()}-${Math.random().toString(36).substring(7)}.${k}`}`,{error:T}=await z.storage.from("vehicle-media").upload(E,S);if(T){p({title:"Fehler beim Hochladen",description:T.message,variant:"destructive"});return}const{data:{publicUrl:A}}=z.storage.from("vehicle-media").getPublicUrl(E);
28u({url:A,filename:S.name}),p({title:"Bild hochgeladen",description:"Das Bild wurde erfolgreich hinzugefügt."})}catch(k){console.error("Error uploading image:",k),p({title:"Fehler",description:"Beim Hochladen ist ein Fehler aufgetreten.",variant:"destructive"})}},b=j?e.jsxs(Ks,{type:"single",value:m,onValueChange:S=>S&&j(S),size:"sm",className:"border rounded-md p-0.5",children:[e.jsxs(jt,{value:"photoroom",className:"gap-1 text-xs px-2 py-1 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground",children:[e.jsx(ii,{className:"h-3 w-3"}),"Photoroom"]}),e.jsxs(jt,{value:"ai",className:"gap-1 text-xs px-2 py-1 data-[state=on]:bg-primary data-[state=on]:text-primary-foreground",children:[e.jsx(ys,{className:"h-3 w-3"}),"AI Studio"]})]}):null;return x?e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Q,{children:"Bilder (Strg+V / Cmd+V zum Einfügen)"}),b]}),s.length>0&&e.jsxs(W,{variant:"outline",size:"sm",onClick:l,disabled:i,className:"gap-2",children:[i?e.jsx(ke,{className:"h-3 w-3 animate-spin"}):e.jsx(Te,{className:"h-3 w-3"}),i?"Wird optimiert...":"Alle optimieren"]})]}),e.jsx("div",{className:"border-2 border-dashed rounded-lg p-4 min-h-[100px]",children:s.length===0?e.jsx("p",{className:"text-sm text-muted-foreground text-center",children:"Füge Bilder mit Strg+V (Windows) oder Cmd+V (Mac) ein"}):e.jsx("div",{className:"space-y-3",children:s.map((S,k)=>e.jsx("div",{className:"relative group p-3 bg-muted/20 rounded-lg border",children:S.optimizedUrl?e.jsxs("div",{className:"flex gap-4 items-center",children:[e.jsxs("div",{className:"flex-1 relative group/original",children:[e.jsx("a",{href:S.url,target:"_blank",rel:"noopener noreferrer",className:"block",children:e.jsx("img",{src:S.url,alt:`${S.filename} (Original)`,className:"w-full h-40 object-contain bg-white/10 rounded-lg border hover:border-primary transition-colors cursor-pointer"})}),e.jsx("span",{className:"absolute bottom-2 left-2 bg-muted-foreground/90 text-white text-xs px-2 py-1 rounded font-medium",children:"Original"}),e.jsx("button",{type:"button",onClick:()=>t(k),className:"absolute top-2 right-2 p-1.5 rounded-full bg-destructive/90 hover:bg-destructive text-destructive-foreground transition-opacity opacity-0 group-hover/original:opacity-100",title:"Original löschen",children:e.jsx(Ze,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"flex-shrink-0 text-muted-foreground",children:e.jsx(Bt,{className:"h-5 w-5"})}),e.jsxs("div",{className:"flex-1 relative group/online",children:[e.jsx("a",{href:S.optimizedUrl,target:"_blank",rel:"noopener noreferrer",className:"block",children:e.jsx("img",{src:S.optimizedUrl,alt:S.filename,className:J("w-full h-40 object-contain bg-white/10 rounded-lg border hover:border-primary transition-colors cursor-pointer",h===k&&"opacity-50")})}),e.jsx("span",{className:"absolute bottom-2 left-2 bg-green-600 text-white text-xs px-2 py-1 rounded font-medium",children:"â Online"}),a&&e.jsx("button",{type:"button",onClick:()=>a(k),className:"absolute top-2 right-2 p-1.5 rounded-full bg-destructive/90 hover:bg-destructive text-destructive-foreground transition-opacity opacity-0 group-hover/online:opacity-100",title:"Optimiertes Bild löschen",children:e.jsx(Ze,{className:"h-4 w-4"})}),h===k&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx(ke,{className:"h-6 w-6 animate-spin text-primary"})})]}),e.jsx("div",{className:"flex-shrink-0",children:e.jsxs(W,{variant:"outline",size:"sm",className:"gap-1",onClick:()=>r(k),disabled:h!==null,children:[e.jsx(Te,{className:"h-3 w-3"}),"Neu"]})})]}):e.jsxs("div",{className:"flex gap-4 items-center",children:[e.jsxs("div",{className:"flex-1 relative group/original",children:[e.jsx("a",{href:S.url,target:"_blank",rel:"noopener noreferrer",className:"block",children:e.jsx("img",{src:S.url,alt:S.filename,className:J("w-full h-40 object-contain bg-white/10 rounded-lg border hover:border-primary transition-colors cursor-pointer",h===k&&"opacity-50")})}),e.jsx("span",{className:"absolute bottom-2 left-2 bg-muted-foreground
28/90 text-white text-xs px-2 py-1 rounded font-medium",children:"Original"}),h===k&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx(ke,{className:"h-6 w-6 animate-spin text-primary"})}),e.jsx("button",{type:"button",onClick:()=>t(k),className:"absolute top-2 right-2 p-1.5 rounded-full bg-destructive/90 hover:bg-destructive text-destructive-foreground transition-opacity opacity-0 group-hover/original:opacity-100",title:"Bild löschen",children:e.jsx(Ze,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"flex-shrink-0 text-muted-foreground",children:e.jsx(Bt,{className:"h-5 w-5"})}),e.jsx("div",{className:"flex-1 flex items-center justify-center h-40 bg-muted/30 rounded-lg border border-dashed",children:e.jsx("span",{className:"text-sm text-muted-foreground",children:"Noch nicht optimiert"})}),e.jsx("div",{className:"flex-shrink-0",children:e.jsxs(W,{variant:"default",size:"sm",className:"gap-1",onClick:()=>r(k),disabled:h!==null,children:[e.jsx(Te,{className:"h-3 w-3"}),"Optimieren"]})})]})},k))})})]}):e.jsxs("div",{className:"space-y-2 pt-2 border-t",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Q,{children:"Fahrzeugbilder"}),b]}),s.length>0&&e.jsxs(W,{variant:"outline",size:"sm",onClick:l,disabled:i,className:"gap-2",children:[i?e.jsx(ke,{className:"h-3 w-3 animate-spin"}):e.jsx(Te,{className:"h-3 w-3"}),i?"Wird optimiert...":"Alle optimieren"]})]}),e.jsxs("div",{className:"p-4 border-2 border-dashed rounded-lg",children:[e.jsxs("p",{className:"text-sm text-muted-foreground mb-3 text-center",children:["Bilder mit ",e.jsx("kbd",{className:"px-2 py-1 bg-muted rounded text-xs",children:"Strg+V"})," einfügen"]}),s.length>0&&e.jsx("div",{className:"grid grid-cols-3 gap-2",children:s.map((S,k)=>e.jsxs("div",{className:"relative group",children:[e.jsx("img",{src:S.url,alt:S.filename,className:J("w-full h-24 object-cover rounded transition-opacity",h===k&&"opacity-50")}),h===k&&e.jsx("div",{className:"absolute inset-0 flex items-center justify-center",children:e.jsx(ke,{className:"h-6 w-6 animate-spin text-primary"})}),e.jsxs("div",{className:"absolute top-1 right-1 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity",children:[e.jsx("button",{type:"button",onClick:()=>r(k),disabled:h!==null,className:"bg-primary text-primary-foreground rounded-full p-1 hover:bg-primary/90 disabled:opacity-50",title:"Bild optimieren",children:e.jsx(Te,{className:"h-3 w-3"})}),e.jsx("button",{type:"button",onClick:()=>t(k),className:"bg-destructive text-destructive-foreground rounded-full p-1",children:e.jsx(Ze,{className:"h-3 w-3"})})]}),k===0&&e.jsx("div",{className:"absolute bottom-1 left-1 bg-primary text-primary-foreground text-xs px-2 py-0.5 rounded",children:"Cover"})]},k))})]})]})}function pi({htmlInput:s,onHtmlChange:u,onImport:t,isImporting:a}){return e.jsxs("div",{className:"space-y-4 p-4 bg-muted/50 rounded-lg border border-border",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"html_input",className:"text-base font-semibold",children:"ð¥ Fahrzeugdaten von mobile.de importieren"}),e.jsx(zt,{id:"html_input",value:s,onChange:r=>u(r.target.value),placeholder:"HTML-Code hier einfügen...",rows:8,disabled:a,className:"font-mono text-xs"})]}),e.jsx(W,{onClick:t,disabled:a||!s,className:"w-full gap-2",size:"lg",children:a?e.jsxs(e.Fragment,{children:[e.jsx(ke,{className:"h-4 w-4 animate-spin"}),"KI analysiert Fahrzeugdaten..."]}):e.jsxs(e.Fragment,{children:[e.jsx(ys,{className:"h-4 w-4"}),"HTML analysieren"]})})]}),e.jsxs("div",{className:"flex items-start gap-3 p-3 bg-blue-50 dark:bg-blue-950/30 rounded-lg border border-blue-200 dark:border-blue-900",children:[e.jsx(vt,{className:"h-5 w-5 text-blue-500 mt-0.5 shrink-0"}),e.jsxs("div",{className:"text-sm text-blue-700 dark:text-blue-300",children:[e.jsx("p",{className:"font-medium mb-1",children:"So funktioniert der Import:"}),e.jsxs("ol",{className:"list-decimal pl-4 space-y-1 text-blue-600 dar
28k:text-blue-400",children:[e.jsx("li",{children:"Ãffnen Sie das Fahrzeug auf mobile.de"}),e.jsxs("li",{children:["Drücken Sie ",e.jsx("kbd",{className:"px-1.5 py-0.5 bg-white dark:bg-gray-800 rounded border text-xs",children:"Strg+U"})," für den Quellcode"]}),e.jsxs("li",{children:["Markieren Sie alles mit ",e.jsx("kbd",{className:"px-1.5 py-0.5 bg-white dark:bg-gray-800 rounded border text-xs",children:"Strg+A"})]}),e.jsxs("li",{children:["Kopieren Sie mit ",e.jsx("kbd",{className:"px-1.5 py-0.5 bg-white dark:bg-gray-800 rounded border text-xs",children:"Strg+C"})]}),e.jsx("li",{children:"Fügen Sie den HTML-Code oben ein"})]}),e.jsxs("div",{className:"mt-2 pt-2 border-t border-blue-200 dark:border-blue-800",children:[e.jsx("p",{className:"font-medium text-foreground",children:"Die KI extrahiert automatisch:"}),e.jsx("p",{children:"Mobile.de ID, Modell, Farbe, Interieur, Preis, Kilometerstand, Erstzulassung, Ausstattung"})]})]})]})]})}function xi({colorDialogState:s,onColorDialogChange:u}){const{toast:t}=nt(),a=Oe(),r=async()=>{const{pendingOemColor:n,pendingUiColor:x}=s;if(n&&x){const{error:m}=await z.from("color_mappings").insert({oem_color:n,ui_color:x});m?t({title:"Fehler",description:"Die Farbe konnte nicht gespeichert werden.",variant:"destructive"}):(t({title:"â
Farbe hinzugefügt",description:`"${n}" wurde als "${x}" gespeichert.`}),a.invalidateQueries({queryKey:["color_mappings"]}))}u(m=>({...m,showColorDialog:!1}))},l=()=>{t({title:"Farbe nicht gespeichert",description:`"${s.pendingOemColor}" wurde nicht in die Mappings aufgenommen. Sie können die Farbe später unter "Mappings â Farben" hinzufügen.`}),u(n=>({...n,showColorDialog:!1}))},i=async()=>{const{pendingInteriorDesc:n,pendingInteriorUiColor:x}=s;if(!n||!x)return;const{error:m}=await z.from("interior_color_mappings").insert({description:n,ui_color:x});m?t({title:"Fehler beim Hinzufügen",description:m.message,variant:"destructive"}):(t({title:"â
Innenausstattung hinzugefügt",description:`"${n}" â "${x}" wurde zu den Mappings hinzugefügt.`}),a.invalidateQueries({queryKey:["interior_color_mappings"]})),u(j=>({...j,showInteriorDialog:!1}))},h=()=>{t({title:"Nicht gespeichert",description:`Die Innenausstattung "${s.pendingInteriorDesc}" wurde nicht zu den Mappings hinzugefügt.`}),u(n=>({...n,showInteriorDialog:!1}))};return e.jsxs(e.Fragment,{children:[e.jsx(Ve,{open:s.showColorDialog,onOpenChange:n=>u(x=>({...x,showColorDialog:n})),children:e.jsxs(Le,{children:[e.jsxs(qe,{children:[e.jsx($e,{children:"â ï¸ Neue Farbe gefunden"}),e.jsxs(Ue,{children:["Die Farbe ",e.jsxs("strong",{children:['"',s.pendingOemColor,'"']})," ist noch nicht in der Datenbank hinterlegt.",e.jsx("br",{}),e.jsx("br",{}),"Soll sie als ",e.jsxs("strong",{children:['"',s.pendingUiColor,'"']})," gespeichert werden?"]})]}),e.jsxs(Be,{children:[e.jsx(Ke,{onClick:l,children:"Nein, später"}),e.jsx(Ge,{onClick:r,children:"Ja, hinzufügen"})]})]})}),e.jsx(Ve,{open:s.showInteriorDialog,onOpenChange:n=>u(x=>({...x,showInteriorDialog:n})),children:e.jsxs(Le,{children:[e.jsxs(qe,{children:[e.jsx($e,{children:"Neue Innenausstattung gefunden"}),e.jsxs(Ue,{children:["Die Innenausstattung ",e.jsxs("strong",{children:['"',s.pendingInteriorDesc,'"']})," ist noch nicht in der Datenbank hinterlegt.",e.jsx("br",{}),e.jsx("br",{}),"Soll sie als ",e.jsxs("strong",{children:['"',s.pendingInteriorUiColor,'"']})," hinzugefügt werden?"]})]}),e.jsxs(Be,{children:[e.jsx(Ke,{onClick:h,children:"Nein, später"}),e.jsx(Ge,{onClick:i,children:"Ja, hinzufügen"})]})]})})]})}function _i(){const s=Oe(),[u,t]=_.useState(!1),a=me({queryKey:["price-history"],queryFn:async()=>{const{data:m,error:j}=await z.from("vehicle_price_history").select("*").order("archived_at",{ascending:!1});if(j)throw j;return m}}),r=(m,j)=>me({queryKey:["price-history",m,j],queryFn:async()=>{const{data:p,error:C}=await z.from("vehicle_price_history").select("*").eq("make",m).eq("model_family",j).order("archived_at",{ascending:!1});if(C)throw C;return p},enabled:!!m&&!!j}),l=ne({mutationFn:async m=>{const{data:j,error:p}=await z.from("vehicle_price_history").insert({vehicle_id:m.vehicle_id,make:m.make,model_family:m.model_family,model_variant:m.model_variant,first_registration:m.first_registration,mileage_km:m.mileage_km,our_sales_price:m.our_sales_price,sold:m.sold,notes:m.notes}).select().single();if(p)throw p;return j},onSuccess:()=>{s.invalidateQueries({queryKey:["price-history"]})}}),i=_.useCallback(async m=>{t(!0);try{const{data:j,error:p}=await z.functions.invoke("analyze-price-history",{body:m});return p?(console.error("Price analysis error:",p),null):j!=null&&j.success?j.analysis:(console.warn("Price analysis returned no data"),null)}catch(j){return console.error("Failed to analyze prices:",j),null}finally{t(!1)}},[]),h=_.useCallback(m=>{switch(m){case"excellent":return"Sehr gut";case"good":return"Gut";case"fair":return"Marktpreis";case"high":return"Ãber Markt";case"insufficient_data":return"Keine Daten";default:return"Unbekannt"}},[]),n=_.useCallback(m=>{switch(m){case"excellent":return"text-green-600 bg-green-100 dark:text-green-400 dark:bg-green-900/30";
28case"good":return"text-blue-600 bg-blue-100 dark:text-blue-400 dark:bg-blue-900/30";case"fair":return"text-amber-600 bg-amber-100 dark:text-amber-400 dark:bg-amber-900/30";case"high":return"text-red-600 bg-red-100 dark:text-red-400 dark:bg-red-900/30";case"insufficient_data":return"text-muted-foreground bg-muted";default:return"text-muted-foreground bg-muted"}},[]),x=_.useCallback(m=>{switch(m){case"rising":return"Steigend";case"falling":return"Fallend";case"stable":return"Stabil";case"unknown":return"Unbekannt";default:return"Unbekannt"}},[]);return{priceHistory:a.data,isLoadingHistory:a.isLoading,historyError:a.error,useModelHistory:r,addHistoryEntry:l,analyzePrices:i,isAnalyzing:u,getRatingLabel:h,getRatingColor:n,getTrendLabel:x,refetchHistory:a.refetch}}function Ws({make:s,modelFamily:u,modelVariant:t,firstRegistration:a,mileageKm:r,inputPrice:l,listPrice:i,onApplyResidual:h,className:n}){const{analyzePrices:x,isAnalyzing:m,getRatingLabel:j,getRatingColor:p,getTrendLabel:C}=_i(),[b,S]=_.useState(null),[k,O]=_.useState(!1),E=!!s&&!!u;_.useEffect(()=>{if(!E){S(null),O(!1);return}const G={make:s,model_family:u,model_variant:t,first_registration:a,mileage_km:r,input_price:l,list_price:i},V=setTimeout(async()=>{const $=await x(G);S($),O(!0)},500);return()=>clearTimeout(V)},[s,u,t,a,r,l,i,E,x]);const T=async()=>{if(!E)return;const G=await x({make:s,model_family:u,model_variant:t,first_registration:a,mileage_km:r,input_price:l,list_price:i});S(G)},A=G=>new Intl.NumberFormat("de-DE",{style:"currency",currency:"EUR",maximumFractionDigits:0}).format(G),L=G=>{switch(G){case"rising":return e.jsx(Er,{className:"w-4 h-4"});case"falling":return e.jsx(Ar,{className:"w-4 h-4"});case"stable":return e.jsx(ai,{className:"w-4 h-4"});default:return null}};return E?m&&!k?e.jsxs(ht,{className:J("border-dashed",n),children:[e.jsx(mt,{className:"pb-3",children:e.jsxs(gt,{className:"text-base flex items-center gap-2",children:[e.jsx(xt,{className:"w-4 h-4"}),"Marktanalyse"]})}),e.jsxs(ft,{className:"space-y-3",children:[e.jsx(pt,{className:"h-4 w-full"}),e.jsx(pt,{className:"h-4 w-3/4"}),e.jsx(pt,{className:"h-8 w-1/2"})]})]}):!b||b.price_rating==="insufficient_data"?e.jsxs(ht,{className:J("border-dashed",n),children:[e.jsx(mt,{className:"pb-3",children:e.jsxs(gt,{className:"text-base flex items-center gap-2 text-muted-foreground",children:[e.jsx(xt,{className:"w-4 h-4"}),"Marktanalyse"]})}),e.jsx(ft,{children:e.jsxs("p",{className:"text-sm text-muted-foreground",children:["Nicht genügend Vergleichsdaten für ",s," ",u,".",(b==null?void 0:b.comparable_vehicles)===1&&" (Nur 1 Fahrzeug gefunden)"]})})]}):e.jsxs(ht,{className:J("",n),children:[e.jsx(mt,{className:"pb-3",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(gt,{className:"text-base flex items-center gap-2",children:[e.jsx(xt,{className:"w-4 h-4"}),"Marktanalyse"]}),e.jsx(W,{variant:"ghost",size:"icon",className:"h-6 w-6",onClick:T,disabled:m,children:e.jsx(at,{className:J("w-3 h-3",m&&"animate-spin")})})]})}),e.jsxs(ft,{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Vergleichbare Fahrzeuge"}),e.jsxs("span",{className:"font-medium",children:[b.comparable_vehicles,e.jsxs("span",{className:"text-muted-foreground text-xs ml-1",children:["(",b.data_sources.active," aktiv, ",b.data_sources.historical," archiviert)"]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Preisbereich"}),e.jsxs("span",{className:"font-medium",children:[A(b.suggested_price_range.min)," â ",A(b.suggested_price_range.max)]})]}),e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Median"}),e.jsx("span",{className:"font-semibold text-foreground",children:A(b.suggested_price_range.median)})]})]}),l&&e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"text-sm text-muted-foreground",children:["I
28hr Preis (",A(l),")"]}),e.jsx(Mr,{className:J("font-medium",p(b.price_rating)),children:j(b.price_rating)})]}),e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Preistrend"}),e.jsxs("span",{className:"flex items-center gap-1 font-medium",children:[L(b.price_trend),C(b.price_trend)]})]}),e.jsxs("div",{className:"flex items-center justify-between text-sm",children:[e.jsx("span",{className:"text-muted-foreground",children:"Konfidenz"}),e.jsxs("span",{className:"font-medium",children:[Math.round(b.confidence*100),"%"]})]}),b.suggested_residual_percent&&b.suggested_residual_eur&&h&&e.jsx("div",{className:"pt-3 border-t",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm font-medium",children:"Vorgeschlagener Restwert"}),e.jsxs("p",{className:"text-lg font-bold",children:[b.suggested_residual_percent,"%",e.jsxs("span",{className:"text-muted-foreground font-normal text-sm ml-2",children:["(â ",A(b.suggested_residual_eur),")"]})]})]}),e.jsxs(W,{size:"sm",variant:"outline",onClick:()=>h(b.suggested_residual_percent,b.suggested_residual_eur),className:"gap-1",children:[e.jsx(Pt,{className:"w-3 h-3"}),"Ãbernehmen"]})]})})]})]}):null}const Ae=ve;function vi(){const[s,u]=_.useState(!1),[t,a]=_.useState("photoroom"),{toast:r}=nt(),l=Oe(),{formData:i,setFormData:h,updateField:n,popoverState:x,setPopoverState:m,colorDialogState:j,setColorDialogState:p,fieldErrors:C,setFieldErrors:b,validateRequiredFields:S,processingState:k,setProcessingState:O,models:E,colorMappings:T,interiorMappings:A,updateResidualFromPercent:L,addImage:G,removeImage:V,updateImageOptimized:$}=Fs({isOpen:s,leasingType:"restwert"}),{data:X}=cs(),Z=v=>{if(X&&X.length>0){const y=ds(v,X);n("brokerFee",y.toString())}},D=ne({mutationFn:async(v="draft")=>{var Ce;if(!S())throw r({title:"Fehler",description:"Bitte füllen Sie alle Pflichtfelder aus: Mobile.de ID, Modell, Verkaufspreis, Unser Preis und Listenpreis/UVP",variant:"destructive"}),new Error("Bitte fülle alle Pflichtfelder aus");if(i.uploadedImages.length===0)throw r({title:"Fehler",description:"Bitte fügen Sie mindestens ein Fahrzeugbild hinzu",variant:"destructive"}),new Error("No images uploaded");const y=E==null?void 0:E.find(H=>H.id===i.selectedModel);if(!y)throw new Error("Modell nicht gefunden");const{data:d}=await z.from("vehicles").select("offer_no").like("offer_no","LX%").order("offer_no",{ascending:!1}).limit(1).maybeSingle();let f=10001;if(d!=null&&d.offer_no){const H=d.offer_no.match(/LX(\d+)/);H&&(f=parseInt(H[1])+1)}const P=`LX${f}`,F=`${y.make} ${y.family} ${y.variant||""}`.trim(),M=wt(P,i.externalId,F),q=kt(M),K=i.exteriorColor?await z.from("color_mappings").select("ui_color").ilike("oem_color",i.exteriorColor).limit(1).maybeSingle():null,re=((Ce=K==null?void 0:K.data)==null?void 0:Ce.ui_color)||null,{data:ee,error:pe}=await z.from("vehicles").insert({external_id:i.externalId,offer_no:P,make:y.make,model_family:y.family,model_variant:y.variant,title:F,color_exterior_oem:i.exteriorColor,color_exterior_ui:re,slug:M,web_url:q,interior_desc:i.interior,first_registration:Nt(i.firstRegistration),mileage_km:i.mileage?parseInt(Ae(i.mileage)):null,ask_price:parseFloat(Ae(i.askPrice)),our_sales_price:parseFloat(Ae(i.ourSalesPrice)),list_price:parseFloat(Ae(i.listPrice)),term_months:i.term?parseInt(i.term):null,power_kw:y.power_kw,power_hp:y.power_hp,displacement_cc:y.displacement_cc,fuel_type:y.fuel_type,euro_class:y.euro_class,efficiency_class:y.efficiency_class,leasing_type:"restwert",source:"mobile.de",drivetrain_awd:y.drivetrain_awd,status:v,published_at:v==="published"?new Date().toISOString():null,vehicle_condition:i.vehicleCondition,leasing_audience:i.leasingAudience,availability:i.availability,vehicle_type:i.vehicleType||y.vehicle_type||"Coupé",mileage_year:parseInt(i.mileageYear)||7500}).select().single();if(pe)throw pe.code==="23505"&&pe.message.includes("external_id")?(b(H=>({...H,externalId:!0})),new Error(`Die Mobile.de ID "${i.externalId}" existiert bereits.`)):pe;if(i.leasingRate&&i.leasingRateNet&&i.residualValue){const{error:H}=await z.from("pricing").insert({vehicle_id:ee.id,residual_eur:parseFloat(Ae(i.residualValue)),residual_pct:parseFloat(i.residualPercent)/100,interest_annual:parseFloat(i.interestRate)/100,rate_calc_net:i.leasingRateNet,rate_rounded_net:i.leasingRateNet,rate_rounded_gross:i.leasingRate,total_cost:parseFloat(Ae(i.ourSalesPrice)),factor:i.leasingFactor,broker_fee:parseFloat(i.brokerFee)||4e3,delivery_fee:parseFloat(i.deliveryFee)||0,down_payment:parseFloat(i.downPayment)||0});if(H)throw H}if(i.externalId){const H=`https://suchen.mobile.de/fahrzeuge/details.html?id=${i.externalId}&lang=de`;await z.from("link_monitor").insert({vehicle_id:ee.id,external_id:i.externalId,source_url:H,source:"mobile.de",status:"online"})}if(i.equipment.trim()){const H=i.equipment.split(` 29`).filter(xe=>xe.trim());for(const xe of H)await z.from("spec_options").insert({vehicle_id:ee.id,group_name:"Ausstattung",label:xe.trim()})}for(let H=0;H<i.uploadedImages.length;H++)await z.from("media").insert({vehicle_id:ee.id,url:i.uploadedImages[H].url,filename:i.uploadedImages[H].filename,optimized_url:i.uploadedImages[H].optimizedUrl||null,position:H,is_cover:H===0});return ee},onSuccess:async(v,y)=>{const d=y==="published";r({title:d?"Fahrzeug veröffentlicht":"Fahrzeug als Entwurf gespeichert",description:d?"Das Fahrzeug ist jetzt online sichtbar.":"Das Fahrzeug wurde als Entwurf gespeichert."}
29),l.invalidateQueries({queryKey:["vehicles"]}),l.invalidateQueries({queryKey:["luxusleasing-vehicles"]}),l.invalidateQueries({queryKey:["kilometerleasing-vehicles"]}),u(!1)},onError:v=>{r({title:"Fehler",description:v.message,variant:"destructive"})}});return e.jsxs(Ct,{open:s,onOpenChange:u,children:[e.jsx(Nr,{asChild:!0,children:e.jsxs(W,{className:"gap-2",children:[e.jsx(Or,{className:"h-4 w-4"}),"Fahrzeug hinzufügen"]})}),e.jsxs(St,{className:"max-w-[1400px] max-h-[95vh] overflow-y-auto",children:[e.jsxs(Ft,{children:[e.jsxs(It,{className:"text-2xl font-bold flex items-center gap-3",children:["Neues Fahrzeug hinzufügen",i.externalId&&e.jsxs("span",{className:"text-base font-mono bg-muted px-2 py-1 rounded border text-muted-foreground",children:["ID: ",i.externalId]})]}),e.jsx(Dt,{children:"Fügen Sie ein neues Fahrzeug mit allen Details und Leasing-Berechnungen hinzu."})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsx(pi,{htmlInput:k.htmlInput,onHtmlChange:v=>O(y=>({...y,htmlInput:v})),isImporting:k.isImporting,onImport:async()=>{var v,y,d;O(f=>({...f,isImporting:!0}));try{const{data:f,error:P}=await z.functions.invoke("analyze-vehicle-data",{body:{html:k.htmlInput,mobileDeId:null}});if(P)throw P;if(!(f!=null&&f.success))throw new Error((f==null?void 0:f.error)||"Fehler bei der KI-Analyse");const F=f.analysis;if((v=F.model_match)!=null&&v.id&&F.model_match.confidence!=="low"&&n("selectedModel",F.model_match.id),(y=F.color_match)!=null&&y.oem_color?n("exteriorColor",F.color_match.oem_color):F.data.color_exterior_oem&&n("exteriorColor",F.data.color_exterior_oem),F.data.interior_desc&&n("interior",F.data.interior_desc),F.data.first_registration&&n("firstRegistration",F.data.first_registration),F.data.mileage_km){const{formatNumberWithSeparator:q}=await Ut(async()=>{const{formatNumberWithSeparator:K}=await import("./formUtils-CA2AULoA.js");return{formatNumberWithSeparator:K}},[]);n("mileage",q(F.data.mileage_km.toString()))}if(F.data.price){const{formatNumberWithSeparator:q,calculateListPrice:K}=await Ut(async()=>{const{formatNumberWithSeparator:pe,calculateListPrice:Ce}=await import("./formUtils-CA2AULoA.js");return{formatNumberWithSeparator:pe,calculateListPrice:Ce}},[]),re=F.data.price;n("askPrice",q(re.toString()));const ee=K(re);n("ourSalesPrice",q(ee.toString()))}((d=F.data.spec_options)==null?void 0:d.length)>0&&n("equipment",F.data.spec_options.join(` 30`));const M=[/[?&]id=(\d{8,9})(?:&|"|'|\s|$)/i,/\/(\d{9})\.html/,/"id"\s*:\s*"?(\d{8,9})"?/];for(const q of M){const K=k.htmlInput.match(q);if(K!=null&&K[1]){n("externalId",K[1]),console.log("Extracted mobile.de ID:",K[1]);break}}r({title:"Analyse erfolgreich",description:"Fahrzeugdaten wurden extrahiert."})}catch(f){r({title:"Analyse fehlgeschlagen",description:f instanceof Error?f.message:"Unbekannter Fehler",variant:"destructive"})}finally{O(f=>({...f,isImporting:!1}))}}}),e.jsxs("div",{className:"relative",children:[e.jsx("div",{className:"absolute inset-0 flex items-center",children:e.jsx("span",{className:"w-full border-t"})}),e.jsx("div",{className:"relative flex justify-center text-xs uppercase",children:e.jsx("span",{className:"bg-background px-2 text-muted-foreground",children:"Oder manuell eingeben"})})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"external_id",className:J(C.externalId&&"text-destructive"),children:"Mobile.de ID *"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(de,{id:"external_id",value:i.externalId,onChange:v=>{n("externalId",v.target.value),C.externalId&&b(y=>({...y,externalId:!1}))},placeholder:"z.B. 12345678",className:J("flex-1",C.externalId&&"border-destructive focus-visible:ring-destructive")}
30),e.jsx(W,{variant:"outline",size:"icon",className:"shrink-0",disabled:!i.externalId,onClick:()=>window.open(`https://suchen.mobile.de/fahrzeuge/details.html?id=${i.externalId}&lang=de`,"_blank"),children:e.jsx(tt,{className:"h-4 w-4"})})]})]}),e.jsx(Is,{selectedModel:i.selectedModel,onSelect:v=>{n("selectedModel",v),C.selectedModel&&b(y=>({...y,selectedModel:!1}))},models:E,error:C.selectedModel,open:x.modelOpen,onOpenChange:v=>m(y=>({...y,modelOpen:v}))})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsx(rt,{type:"exterior",value:i.exteriorColor,onChange:v=>n("exteriorColor",v),mappings:T,open:x.exteriorOpen,onOpenChange:v=>m(y=>({...y,exteriorOpen:v}))}),e.jsx(rt,{type:"interior",value:i.interior,onChange:v=>n("interior",v),mappings:A,open:x.interiorOpen,onOpenChange:v=>m(y=>({...y,interiorOpen:v}))})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"equipment",children:"Fahrzeugausstattung"}),e.jsx(zt,{id:"equipment",value:i.equipment,onChange:v=>n("equipment",v.target.value),placeholder:"Ausstattungsdetails von Mobile.de einfügen...",rows:4})]}),e.jsx(Ds,{vehicleCondition:i.vehicleCondition,availability:i.availability,leasingAudience:i.leasingAudience,firstRegistration:i.firstRegistration,mileage:i.mileage,onFieldChange:(v,y)=>n(v,y)}),e.jsx(Ps,{askPrice:i.askPrice,ourSalesPrice:i.ourSalesPrice,listPrice:i.listPrice,residualPercent:i.residualPercent,residualValue:i.residualValue,interestRate:i.interestRate,term:i.term,leasingRate:i.leasingRate,leasingRateNet:i.leasingRateNet,leasingFactor:i.leasingFactor,onFieldChange:(v,y)=>n(v,y),onResidualUpdate:L,onAskPriceChanged:Z,fieldErrors:C}),i.selectedModel&&E&&(()=>{const v=E.find(P=>P.id===i.selectedModel);if(!v)return null;const y=i.ourSalesPrice?parseFloat(ve(i.ourSalesPrice)):void 0,d=i.listPrice?parseFloat(ve(i.listPrice)):void 0,f=i.mileage?parseInt(ve(i.mileage)):void 0;return e.jsx(Ws,{make:v.make,modelFamily:v.family,modelVariant:v.variant,firstRegistration:i.firstRegistration,mileageKm:f,inputPrice:y,listPrice:d,onApplyResidual:(P,F)=>{n("residualPercent",P.toString());const{formatNumberWithSeparator:M}=require("@/lib/formUtils");n("residualValue",M(F.toString()))},className:"border-primary/20"})})(),e.jsx(zs,{mileageYear:i.mileageYear,brokerFee:i.brokerFee,deliveryFee:i.deliveryFee,downPayment:i.downPayment,onFieldChange:(v,y)=>n(v,y)}),e.jsx(Gs,{images:i.uploadedImages,onAddImage:G,onRemoveImage:V,onRemoveOptimized:async v=>{var d;const y=i.uploadedImages[v];if(y!=null&&y.optimizedUrl){const f=(d=y.optimizedUrl.split("/vehicle-media/")[1])==null?void 0:d.split("?")[0];f&&await z.storage.from("vehicle-media").remove([f])}$(v,void 0)},onOptimizeImage:async v=>{const y=i.uploadedImages[v];if(y!=null&&y.url){O(d=>({...d,isOptimizingImages:!0,optimizingImageIndex:v}));try{const d=t==="ai"?"process-vehicle-image-ai":"process-vehicle-image",f=t==="ai"?{imageUrl:y.url}:{imageUrl:y.url,options:{backgroundImageUrl:"https://vbbjtsrypdfstwygrcud.supabase.co/storage/v1/object/public/vehicle-media/backgrounds/luxury-studio.png"}},{data:P,error:F}=await z.functions.invoke(d,{body:JSON.stringify(f)});if(F)throw F;if(!(P!=null&&P.optimizedUrl))throw new Error("Keine optimierte URL erhalten");$(v,P.optimizedUrl),r({title:"Bild optimiert",description:`Verarbeitet mit ${t==="ai"?"AI Studio":"Photoroom"}.`})}catch(d){r({title:"Fehler bei der Optimierung",description:d instanceof Error?d.message:"Unbekannter Fehler",variant:"destructive"})}finally{O(d=>({...d,isOptimizingImages:!1,optimizingImageIndex:null}))}}},onOptimizeAll:async()=>{for(let v=0;v<i.uploadedImages.length;v++){const y=i.uploadedImages[v];if(!(!(y!=null&&y.url)||y.optimizedUrl)){O(d=>({...d,isOptimizingImages:!0,optimizingImageIndex:v}));try{const d=t==="ai"?"process-vehicle-image-ai":"process-vehicle-image",f=t==="ai"?{imageUrl:y.url}:{imageUrl:y.url,options:{backgroundImageUrl:"https://vbbjtsrypdfstwygrcud.supabase.co/storage/v1/object/public/vehicle-media/backgrounds/luxury-studio.png"}},{data:P,error:F}=await z.functions.invoke(d,{body:JSON.stringify(f)});if(F)throw F;P!=null&&P.optimizedUrl&&$(v,P.optimizedUrl)}catch(d){console.error("Fehler bei Bild",v,d)}}}O(v=>({...v,isOptimizingImages:!1,optimizingImageIndex:null})),r({title:"Alle Bilder optimiert",description:"Die Bildverarbeitung wurde abgeschlossen."})},isOptimizing:k.isOptimizingImages,optimizingIndex:k.optimizingImageIndex,isDialogOpen:s,showOptimizedPreview:!0,engine:t,onEngineChange:a})]}),e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx(W,{variant:"outline",onClick:()=>u(!1),size:"lg",children:"Abbrechen"}),e.jsxs(W,{variant:"secondary",onClick:()=>D.mutate("draft"),disabled:D.isPending,size:"lg",className:"gap-2",children:[e.jsx(ws,{className:"h-4 w-4"}),D.isPending?"Wird gespeichert...":"Als Entwurf"]}),e.jsxs(W,{onClick:()=>D.mutate("published"),disabled:D.isPending,size:"lg",className:"gap-2 bg-green-600 hover:bg-green-700 text-white",children:[e.jsx(ks,{className:"h-4 w-4"}),D.isPending?"Wird gespeichert...":"Speichern & Online"]})]})]}),e.jsx(xi,{colorDialogState:j,onColorDialogChange:p})]})}function bi({search:s,onSearchChange:u,makeFilter:t,onMakeFilterChange:a,modelFilter:r,onModelFilterChange:l,availableMakes:i,availableModels:h,onCheckAll:n,checkingAll:x,hasVehicles:m,isFullscreen:j,onToggleFullscreen:p}){const C=b=>{a(b),l("all")};
30return e.jsx("div",{className:"glass-panel rounded-xl p-3",children:e.jsxs("div",{className:"flex items-center gap-3 flex-wrap",children:[e.jsx("h1",{className:"text-2xl font-bold tracking-tight shrink-0",children:"Fahrzeuge"}),e.jsxs("div",{className:"relative flex-1 min-w-[180px]",children:[e.jsx(Rr,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(de,{placeholder:"Suche nach Titel, Ausstattung, Angebotsnummer...",value:s,onChange:b=>u(b.target.value),className:"pl-9 h-9"})]}),e.jsxs(Fe,{value:t,onValueChange:C,children:[e.jsx(Ie,{className:"w-[130px] h-9",children:e.jsx(De,{placeholder:"Marke"})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"all",children:"Alle Marken"}),i.map(b=>e.jsx(Y,{value:b,children:b},b))]})]}),e.jsxs(Fe,{value:r,onValueChange:l,children:[e.jsx(Ie,{className:"w-[130px] h-9",children:e.jsx(De,{placeholder:"Modell"})}),e.jsxs(ze,{children:[e.jsx(Y,{value:"all",children:"Alle Modelle"}),h.map(b=>e.jsx(Y,{value:b,children:b},b))]})]}),e.jsxs(W,{variant:"outline",size:"sm",className:"gap-1.5 h-9",onClick:n,disabled:x||!m,children:[e.jsx(at,{className:`h-3.5 w-3.5 ${x?"animate-spin":""}`}),x?"Prüfe...":"Alle prüfen"]}),e.jsx(vi,{}),e.jsx(W,{variant:"outline",size:"sm",className:"h-9 w-9 p-0",onClick:p,title:j?"Vollbild beenden (ESC)":"Vollbild",children:j?e.jsx(Tr,{className:"h-4 w-4"}):e.jsx(Vr,{className:"h-4 w-4"})})]})})}function ji({statusFilter:s,onStatusFilterChange:u,statusCounts:t}){return e.jsx(Lr,{value:s,onValueChange:u,children:e.jsxs(qr,{className:"w-full justify-start",children:[e.jsxs(we,{value:"all",children:["Alle (",t.all,")"]}),e.jsxs(we,{value:"draft",children:["Entwurf (",t.draft,")"]}),e.jsxs(we,{value:"ready",children:["Bereit (",t.ready,")"]}),e.jsxs(we,{value:"published",children:["Online (",t.published,")"]}),e.jsxs(we,{value:"sold",children:["Verkauft (",t.sold,")"]}),e.jsxs(we,{value:"archived",children:["Archiv (",t.archived,")"]}),e.jsxs(we,{value:"pending",children:["Offen (",t.pending,")"]}),e.jsxs(we,{value:"checked",children:["Geprüft (",t.checked,")"]})]})})}function yi({selectedCount:s,onClearSelection:u,onBulkAction:t,onOpenInterestRateDialog:a}){return e.jsx("div",{className:"glass-intense rounded-xl p-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("span",{className:"font-semibold text-lg",children:[s," Fahrzeug(e) ausgewählt"]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(W,{variant:"glass",size:"sm",onClick:u,children:"Auswahl aufheben"}),e.jsxs(Ns,{children:[e.jsx(Cs,{asChild:!0,children:e.jsx(W,{variant:"premium",size:"sm",children:"Aktionen"})}),e.jsxs(Ss,{align:"end",children:[e.jsxs(_e,{onClick:()=>t("ready"),children:[e.jsx($r,{className:"h-4 w-4 mr-2"}),"Bereit für Export"]}),e.jsx(st,{}),e.jsxs(_e,{onClick:()=>t("archive"),children:[e.jsx(Ur,{className:"h-4 w-4 mr-2"}),"Archivieren"]}),e.jsxs(_e,{onClick:a,children:[e.jsx(Br,{className:"h-4 w-4 mr-2"}),"Zinssatz anpassen"]}),e.jsx(st,{}),e.jsxs(_e,{onClick:()=>t("permanent_delete"),className:"text-destructive focus:text-destructive",children:[e.jsx(Kr,{className:"h-4 w-4 mr-2"}),"Permanent löschen"]})]})]})]})]})})}function Ee(s,u,t){let a=t.initialDeps??[],r,l=!0;function i(){var h,n,x;let m;t.key&&((h=t.debug)!=null&&h.call(t))&&(m=Date.now());const j=s();if(!(j.length!==a.length||j.some((b,S)=>a[S]!==b)))return r;a=j;let C;if(t.key&&((n=t.debug)!=null&&n.call(t))&&(C=Date.now()),r=u(...j),t.key&&((x=t.debug)!=null&&x.call(t))){const b=Math.round((Date.now()-m)*100)/100,S=Math.round((Date.now()-C)*100)/100,k=S/16,O=(E,T)=>{for(E=String(E);E.length<T;)E=" "+E;return E};console.info(`%cⱠ${O(S,5)} /${O(b,5)} ms`,` 31 font-size: .6rem; 32 font-weight: bold; 33 color: hsl(${Math.max(0,Math.min(120-120*k,120))}deg 100% 31%);`,t==null?void 0:t.key)}return t!=null&&t.onChange&&!(l&&t.skipInitialOnChange)&&t.onChange(r),l=!1,r}return i.updateDeps=h=>{a=h},i}function rs(s,u){if(s===void 0)throw new Error("Unexpected undefined");return s}const wi=(s,u)=>Math.abs(s-u)<1.01,ki=(s,u,t)=>{let a;return function(...r){s.clearTimeout(a),a=s.setTimeout(()=>u.apply(this,r),t)}},is=s=>{const{offsetWidth:u,offsetHeight:t}=s;return{width:u,height:t}},Ni=s=>s,Ci=s=>
vendor: 1,502 bytes, line 33
33{const u=Math.max(s.startIndex-s.overscan,0),t=Math.min(s.endIndex+s.overscan,s.count-1),a=[];for(let r=u;r<=t;r++)a.push(r);return a},Si=(s,u)=>{const t=s.scrollElement;if(!t)return;const a=s.targetWindow;if(!a)return;const r=i=>{const{width:h,height:n}=i;u({width:Math.round(h),height:Math.round(n)})};if(r(is(t)),!a.ResizeObserver)return()=>{};const l=new a.ResizeObserver(i=>{const h=()=>{const n=i[0];if(n!=null&&n.borderBoxSize){const x=n.borderBoxSize[0];if(x){r({width:x.inlineSize,height:x.blockSize});return}}r(is(t))};s.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(h):h()});return l.observe(t,{box:"border-box"}),()=>{l.unobserve(t)}},as={passive:!0},ns=typeof window>"u"?!0:"onscrollend"in window,Fi=(s,u)=>{const t=s.scrollElement;if(!t)return;const a=s.targetWindow;if(!a)return;let r=0;const l=s.options.useScrollendEvent&&ns?()=>{}:ki(a,()=>{u(r,!1)},s.options.isScrollingResetDelay),i=m=>()=>{const{horizontal:j,isRtl:p}=s.options;r=j?t.scrollLeft*(p&&-1||1):t.scrollTop,l(),u(r,m)},h=i(!0),n=i(!1);t.addEventListener("scroll",h,as);const x=s.options.useScrollendEvent&&ns;return x&&t.addEventListener("scrollend",n,as),()=>{t.removeEventListener("scroll",h),x&&t.removeEventListener("scrollend",n)}},Ii=(s,u,t)=>{if(u!=null&&u.borderBoxSize){const a=u.borderBoxSize[0];if(a)return Math.round(a[t.options.horizontal?"inlineSize":"blockSize"])}return s[t.options.horizontal?"offsetWidth":"offsetHeight"]},Di=(s,{adjustments:u=0,behavior:t},a)=>{var r,l;const i=s+u;
vendor: 3,016 bytes, line 33
33(l=(r=a.scrollElement)==null?void 0:r.scrollTo)==null||l.call(r,{[a.options.horizontal?"left":"top"]:i,behavior:t})};class zi{constructor(u){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.currentScrollToIndex=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.observer=(()=>{let t=null;const a=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(r=>{r.forEach(l=>{const i=()=>{this._measureElement(l.target,l)};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(i):i()})}));return{disconnect:()=>{var r;(r=a())==null||r.disconnect(),t=null},observe:r=>{var l;return(l=a())==null?void 0:l.observe(r,{box:"border-box"})},unobserve:r=>{var l;return(l=a())==null?void 0:l.unobserve(r)}}})(),this.range=null,this.setOptions=t=>{Object.entries(t).forEach(([a,r])=>{typeof r>"u"&&delete t[a]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:Ni,rangeExtractor:Ci,onChange:()=>{},measureElement:Ii,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,...t}},this.notify=t=>{var a,r;(r=(a=this.options).onChange)==null||r.call(a,this,t)},this.maybeNotify=Ee(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:!1,debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const a=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==a){if(this.cleanup(),!a){this.maybeNotify();return}this.scrollElement=a,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(r=>{this.observer.observe(r)}),this.unsubs.push(this.options.observeElementRect(this,r=>{this.scrollRect=r,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(r,l)=>{this.scrollAdjustments=0,this.scrollDirection=l?this.getScrollOffset()<r?"forward":"backward":null,this.scrollOffset=r,this.isScrolling=l,this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}}
33,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(t,a)=>{const r=new Map,l=new Map;for(let i=a-1;i>=0;i--){const h=t[i];if(r.has(h.lane))continue;const n=l.get(h.lane);if(n==null||h.end>n.end?l.set(h.lane,h):h.end<n.end&&r.set(h.lane,!0),r.size===this.options.lanes)break}return l.size===this.options.lanes?Array.from(l.values()).sort((i,h)=>i.end===h.end?i.index-h.index:i.end-h.end)[0]:void 0},this.getMeasurementOptions=Ee(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes],(t,a,r,l,i,h)=>(this.prevLanes!==void 0&&this.prevLanes!==h&&(this.lanesChangedFlag=!0),this.prevLanes=h,this.pendingMeasuredCacheIndexes=[],{count:t,paddingStart:a,scrollMargin:r,getItemKey:l,enabled:i,lanes:h}),{key:!1}),this.getMeasurements=Ee(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:t,paddingStart:a,scrollMargin:r,getItemKey:l,enabled:i,lanes:h},n)=>{if(!i)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const p of this.laneAssignments.keys())p>=t&&this.laneAssignments.delete(p);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(p=>{this.itemSizeCache.set(p.key,p.size)}));const x=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1);const m=this.measurementsCache.slice(0,x),j=new Array(h).fill(void 0);for(let p=0;p<x;p++){const C=m[p];C&&(j[C.lane]=p)}for(let p=x;p<t;p++){const C=l(p),b=this.laneAssignments.get(p);let S,k;if(b!==void 0&&this.options.lanes>1){S=b;const A=j[S],L=A!==void 0?m[A]:void 0;k=L?L.end+this.options.gap:a+r}else{const A=this.options.lanes===1?m[p-1]:this.getFurthestMeasurement(m,p);k=A?A.end+this.options.gap:a+r,S=A?A.lane:p%this.options.lanes,this.options.lanes>1&&this.laneAssignments.set(p,S)}const O=n.get(C),E=typeof O=="number"?O:this.options.estimateSize(p),T=k+E;m[p]={index:p,start:k,size:E,end:T,key:C,lane:S},j[S]=p}return this.measurementsCache=m,m},{key:!1,debug:()=>this.options.debug}),this.calculateRange=Ee(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,a,r,l)=>this.range=t.length>0&&a>0?Pi({measurements:t,outerSize:a,scrollOffset:r,lanes:l}):null,{key:!1,debug:()=>this.options.debug}
vendor: 1,605 bytes, line 33
33),this.getVirtualIndexes=Ee(()=>{let t=null,a=null;const r=this.calculateRange();return r&&(t=r.startIndex,a=r.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,a]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,a]},(t,a,r,l,i)=>l===null||i===null?[]:t({startIndex:l,endIndex:i,overscan:a,count:r}),{key:!1,debug:()=>this.options.debug}),this.indexFromElement=t=>{const a=this.options.indexAttribute,r=t.getAttribute(a);return r?parseInt(r,10):(console.warn(`Missing attribute name '${a}={index}' on measured element.`),-1)},this._measureElement=(t,a)=>{const r=this.indexFromElement(t),l=this.measurementsCache[r];if(!l)return;const i=l.key,h=this.elementsCache.get(i);h!==t&&(h&&this.observer.unobserve(h),this.observer.observe(t),this.elementsCache.set(i,t)),t.isConnected&&this.resizeItem(r,this.options.measureElement(t,a,this))},this.resizeItem=(t,a)=>{const r=this.measurementsCache[t];if(!r)return;const l=this.itemSizeCache.get(r.key)??r.size,i=a-l;i!==0&&((this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(r,i,this):r.start<this.getScrollOffset()+this.scrollAdjustments)&&this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=i,behavior:void 0}),this.pendingMeasuredCacheIndexes.push(r.index),this.itemSizeCache=new Map(this.itemSizeCache.set(r.key,a)),this.notify(!1))},this.measureElement=t=>{if(!t){this.elementsCache.forEach((a,r)=>{a.isConnected||(this.observer.unobserve(a),this.elementsCache.delete(r))});return}this._measureElement(t,void 0)},this.getVirtualItems=Ee(()=>
33[this.getVirtualIndexes(),this.getMeasurements()],(t,a)=>{const r=[];for(let l=0,i=t.length;l<i;l++){const h=t[l],n=a[h];r.push(n)}return r},{key:!1,debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const a=this.getMeasurements();if(a.length!==0)return rs(a[Qs(0,a.length-1,r=>rs(a[r]).start,t)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(t,a,r=0)=>{if(!this.scrollElement)return 0;const l=this.getSize(),i=this.getScrollOffset();a==="auto"&&(a=t>=i+l?"end":"start"),a==="center"?t+=(r-l)/2:a==="end"&&(t-=l);const h=this.getMaxScrollOffset();return Math.max(Math.min(h,t),0)},this.getOffsetForIndex=(t,a="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const r=this.measurementsCache[t];if(!r)return;const l=this.getSize(),i=this.getScrollOffset();if(a==="auto")if(r.end>=i+l-this.options.scrollPaddingEnd)a="end";else if(r.start<=i+this.options.scrollPaddingStart)a="start";else return[i,a];if(a==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),a];const h=a==="end"?r.end+this.options.scrollPaddingEnd:r.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(h,a,r.size),a]},this.isDynamicMode=()=>this.elementsCache.size>0,this.scrollToOffset=(t,{align:a="start",behavior:r}={})=>{r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getOffsetForAlignment(t,a),{adjustments:void 0,behavior:r})},this.scrollToIndex=(t,{align:a="auto",behavior:r}={})=>{r==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),t=Math.max(0,Math.min(t,this.options.count-1)),this.currentScrollToIndex=t;let l=0;const i=10,h=x=>{if(!this.targetWindow)return;const m=this.getOffsetForIndex(t,x);if(!m){console.warn("Failed to get offset for index:",t);return}const[j,p]=m;this._scrollToOffset(j,{adjustments:void 0,behavior:r}),this.targetWindow.requestAnimationFrame(()=>{const C=()=>{if(this.currentScrollToIndex!==t)return;const b=this.getScrollOffset(),S=this.getOffsetForIndex(t,p);if(!S){console.warn("Failed to get offset for index:",t);return}wi(S[0],b)||n(p)};this.isDynamicMode()?this.targetWindow.requestAnimationFrame(C):C()})},n=x=>{this.targetWindow&&this.currentScrollToIndex===t&&(l++,l<i?this.targetWindow.requestAnimationFrame(()=>h(x)):console.warn(`Failed to scroll to index ${t} after ${i} attempts.`))};h(a)},this.scrollBy=(t,{behavior:a}={})=>{a==="smooth"&&this.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),this._scrollToOffset(this.getScrollOffset()+t,{adjustments:void 0,behavior:a})},this.getTotalSize=()=>{var t;const a=this.getMeasurements();let r;if(a.length===0)r=this.options.paddingStart;else if(this.options.lanes===1)r=((t=a[a.length-1])==null?void 0:t.end)??0;else{const l=Array(this.options.lanes).fill(null);let i=a.length-1;for(;i>=0&&l.some(h=>h===null);){const h=a[i];l[h.lane]===null&&(l[h.lane]=h.end),i--}r=Math.max(...l.filter(h=>h!==null))}return Math.max(r-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(t,{adjustments:a,behavior:r})=>{this.options.scrollToFn(t,{behavior:r,adjustments:a},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(u)}}const Qs=(s,u,t,a)=>{for(;s<=u;){const r=(s+u)/2|0,l=t(r);if(l<a)s=r+1;else if(l>a)u=r-1;else return r}return s>0?s-1:0};function Pi({measurements:s,outerSize:u,scrollOffset:t,lanes:a}){const r=s.length-1,l=n=>s[n].start;if(s.length<=a)return{startIndex:0,endIndex:r};let i=Qs(0,r,l,t),h=i;if(a===1)for(;h<r&&s[h].end<t+u;)h++;else if(a>1){const n=Array(a).fill(0);for(;h<r&&n.some(m=>m<t+u);){const m=s[h];n[m.lane]=m.end,h++}const x=Array(a).fill(t+u);for(;i>=0&&x.some(m=>m>=t);){const m=s[i];x[m.lane]=m.start,i--}i=Math.max(0,i-i%a),h=Math.min(r,h+(a-1-h%a))}return{startIndex:i,endIndex:h}}const ls=typeof document<"u"?_.useLayoutEffect:_.useEffect;function Mi({useFlushSync:s=!0,...u}){const t=_.useReducer(()=>({}),{})[1],a={...u,onChange:(l,i)=>{var h;
33s&&i?_r.flushSync(t):t(),(h=u.onChange)==null||h.call(u,l,i)}},[r]=_.useState(()=>new zi(a));return r.setOptions(a),ls(()=>r._didMount(),[]),ls(()=>r._willUpdate()),r}function Ai(s){return Mi({observeElementRect:Si,observeElementOffset:Fi,scrollToFn:Di,...s})}function Ei({vehicleId:s,askPrice:u,onAskPriceUpdate:t}){const[a,r]=_.useState(!1),[l,i]=_.useState(""),[h,n]=_.useState(!1),x=_.useRef(null);_.useEffect(()=>{a&&x.current&&(x.current.focus(),x.current.select())},[a]);const m=_.useCallback(b=>{b.stopPropagation(),t&&(i(u?te(String(u)):""),r(!0))},[u,t]),j=_.useCallback(b=>{const S=b.target.value.replace(/\D/g,"");i(S?te(S):"")},[]),p=_.useCallback(()=>{const b=parseInt(l.replace(/\D/g,""),10);r(!1),!(!b||b===u||!t)&&(n(!0),t(s,b),setTimeout(()=>n(!1),1500))},[l,u,s,t]),C=_.useCallback(b=>{b.key==="Enter"?(b.preventDefault(),p()):b.key==="Escape"&&(b.preventDefault(),r(!1))},[p]);return a?e.jsx("div",{className:"p-1 flex items-center justify-end",onClick:b=>b.stopPropagation(),children:e.jsx("input",{ref:x,type:"text",inputMode:"numeric",value:l,onChange:j,onBlur:p,onKeyDown:C,className:"w-full h-7 px-1.5 text-xs text-right tabular-nums rounded border border-primary/40 bg-background focus:outline-none focus:ring-1 focus:ring-primary/50"})}):e.jsx("div",{className:"p-2 text-right flex items-center justify-end text-xs tabular-nums cursor-pointer hover:text-primary transition-colors",onClick:m,title:"Klicken zum Bearbeiten",children:h?e.jsx(ke,{className:"h-3 w-3 animate-spin text-muted-foreground"}):e.jsxs(e.Fragment,{children:["â¬",u?Math.round(u/1e3)+"k":"-"]})})}const Oi=_.memo(Ei);function Ri({vehicle:s,isSelected:u,onToggleSelect:t,onRowClick:a,onStatusChange:r,onMarkAsSold:l,onDeleteClick:i,isAdmin:h,onCheckStatus:n,onSetManualStatus:x,isCheckingStatus:m,isLastViewed:j,gridCols:p,style:C,onAskPriceUpdate:b}){var T,A;const S=((A=(T=s.link_monitor)==null?void 0:T[0])==null?void 0:A.status)==="offline"||s.status==="marked_for_deletion",k=s.relevantMonitor,O=s.latestPricing,E=k==null?void 0:k.status;return e.jsxs("div",{className:`grid ${p} cursor-pointer hover:bg-muted/30 border-b border-border/50 text-xs ${S?"bg-destructive/5":""} ${j?"bg-primary/5 border-l-2 border-l-primary/40":""}`,onClick:()=>a(s),style:C,children:[e.jsx("div",{className:"p-2 flex items-center",onClick:L=>L.stopPropagation(),children:e.jsx(At,{checked:u,onCheckedChange:()=>t(s.id)})}),e.jsx("div",{className:"p-2 font-medium flex items-center truncate text-xs",children:s.offer_no}),e.jsx("div",{className:"p-2 font-mono text-xs text-muted-foreground hidden xl:flex items-center truncate",children:s.external_id}),e.jsx("div",{className:"p-2 xl:hidden"})," ",e.jsx("div",{className:"p-2 flex items-center truncate",children:s.title}),e.jsx("div",{className:"p-2 text-right flex items-center justify-end text-xs tabular-nums",children:s.mileage_km?`${s.mileage_km.toLocaleString("de-DE")} km`:"-"}),e.jsx("div",{className:"p-2 hidden lg:flex items-center text-xs",children:s.first_registration?new Date(s.first_registration).toLocaleDateString("de-DE",{month:"2-digit",year:"numeric"}):"-"}),e.jsx("div",{className:"p-2 lg:hidden"})," ",e.jsx("div",{className:"p-2 hidden md:flex items-center",onClick:()=>a(s),children:e.jsxs("div",{className:"flex gap-1 items-center",children:[e.jsx(Wt,{color:s.color_exterior_ui,showTooltip:!1}),e.jsx(Wt,{color:s.interior_color_ui,showTooltip:!1})]})}),e.jsx("div",{className:"p-2 md:hidden"})," ",e.jsx("div",{className:"p-2 text-center flex items-center justify-center",children:e.jsxs(le,{children:[e.jsx(oe,{children:s.spec_options&&s.spec_options.length>0?e.jsx(Qt,{className:"h-3.5 w-3.5 text-success"}):e.jsx(Ht,{className:"h-3.5 w-3.5 text-destructive"})}),e.jsx(ce,{children:s.spec_options&&s.spec_options.length>0?`${s.spec_options.length} Ausstattungsmerkmale`:"Keine Ausstattung hinterlegt"})]})}),e.jsx("div",{className:"p-2 text-center flex items-center justify-center",children:e.jsxs(le,{children:[e.jsx(oe,{children:s.hasOptimizedCover?e.jsx(Qt,{className:"h-3.5 w-3.5 text-success"}):e.jsx(Ht,{className:"h-3.5 w-3.5 text-destructive"})}),e.jsx(ce,{children:s.hasOptimizedCover?"Bild optimiert":"Bild nicht optimiert"})]})}),e.jsx("div",{className:"p-2 flex items-center",children:e.jsxs(le,{children:[e.jsx(oe,{asChild:!0,children:e.jsx(W,{variant:"ghost",size:"sm",className:"h-6 w-6 p-0",disabled:!s.slug&&!s.web_url,onClick:L=>{L.stopPropagation();const V=(s.slug?`/luxusleasing/${s.slug}`:null)||s.web_url;V&&window.open(V,"_blank")},children:e.jsx(tt,{className:"h-3.5 w-3.5"})})}),e.jsx(ce,{side:"left",children:e.jsx("p",{className:"text-xs",children:s.slug?`/luxusleasing/${s.slug}`:s.web_url||"Noch nicht online"})})]})}),e.jsx(Oi,{vehicleId:s.id,askPrice:s.ask_price,onAskPriceUpdate:b}),e.jsxs("div",{className:"p-2 text-right flex items-center justify-end text-xs tabular-nums",children:["â¬",Xe((O==null?void 0:O.rate_rounded_gross)||0).toLocaleStr
33ing("de-DE")]}),e.jsx("div",{className:"p-2 flex items-center",onClick:L=>L.stopPropagation(),children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsx(Qr,{status:s.status}),e.jsxs(Ns,{children:[e.jsx(Cs,{asChild:!0,children:e.jsx(W,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0",children:e.jsx(wr,{className:"h-3 w-3"})})}),e.jsxs(Ss,{align:"end",children:[e.jsx(_e,{onClick:()=>r(s.id,"draft"),children:"Entwurf"}),e.jsx(_e,{onClick:()=>r(s.id,"ready"),children:"Bereit"}),e.jsx(_e,{onClick:()=>r(s.id,"published"),children:"Online setzen"}),e.jsx(st,{}),e.jsx(_e,{onClick:()=>l(s.id),children:"Als verkauft markieren"}),e.jsx(_e,{onClick:()=>r(s.id,"archived"),children:"Archivieren"}),h&&e.jsxs(e.Fragment,{children:[e.jsx(st,{}),e.jsxs(_e,{onClick:()=>i({id:s.id,title:s.title}),className:"text-destructive",children:[e.jsx(ni,{className:"h-4 w-4 mr-2"}),"Permanent löschen"]})]})]})]})]})}),e.jsx("div",{className:"p-2 flex items-center text-xs text-muted-foreground tabular-nums truncate",children:s.updated_at?new Date(s.updated_at).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"}):"-"}),e.jsx("div",{className:"p-2 flex items-center",onClick:L=>L.stopPropagation(),children:e.jsxs("div",{className:"flex items-center gap-1",children:[e.jsxs(le,{children:[e.jsx(oe,{asChild:!0,children:e.jsx("div",{className:`h-3.5 w-3.5 rounded-full border-2 cursor-pointer transition-colors ${E==="online"?"bg-success border-success":"border-muted-foreground/40 hover:border-success/60"}`,onClick:()=>x(s.id,"online")})}),e.jsx(ce,{children:"Online markieren"})]}),e.jsxs(le,{children:[e.jsx(oe,{asChild:!0,children:e.jsx("div",{className:`h-3.5 w-3.5 rounded-full border-2 cursor-pointer transition-colors ${E==="offline"?"bg-destructive border-destructive":"border-muted-foreground/40 hover:border-destructive/60"}`,onClick:()=>x(s.id,"offline")})}),e.jsx(ce,{children:"Offline markieren"})]}),e.jsxs(le,{children:[e.jsx(oe,{asChild:!0,children:e.jsx(W,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0",onClick:L=>{L.stopPropagation(),n(s.id)},disabled:m,children:e.jsx(at,{className:`h-3 w-3 ${m?"animate-spin":""}`})})}),e.jsx(ce,{children:"Online-Status prüfen"})]}),(k==null?void 0:k.source_url)&&e.jsxs(le,{children:[e.jsx(oe,{asChild:!0,children:e.jsx(W,{variant:"ghost",size:"sm",className:"h-5 w-5 p-0",onClick:L=>{L.stopPropagation(),window.open(k.source_url,"_blank","noreferrer")},children:e.jsx(tt,{className:"h-3 w-3"})})}),e.jsx(ce,{side:"left",className:"max-w-md",children:e.jsx("p",{className:"text-xs break-all",children:k.source_url})})]})]})}),e.jsx("div",{className:"p-2 flex items-center text-xs text-muted-foreground tabular-nums truncate",children:e.jsxs(le,{children:[e.jsx(oe,{className:"truncate",children:k!=null&&k.last_checked_at?new Date(k.last_checked_at).toLocaleDateString("de-DE",{day:"2-digit",month:"2-digit"}):"-"}),e.jsx(ce,{children:k!=null&&k.last_checked_at?new Date(k.last_checked_at).toLocaleString("de-DE",{day:"2-digit",month:"2-digit",year:"numeric",hour:"2-digit",minute:"2-digit"}):"Noch nicht geprüft"})]})})]})}const Ti=_.memo(Ri),Vi=45,os="grid-cols-[40px_minmax(55px,0.7fr)_minmax(70px,0.9fr)_minmax(90px,2fr)_minmax(80px,1fr)_minmax(70px,0.8fr)_50px_36px_36px_36px_minmax(60px,0.7fr)_minmax(60px,0.7fr)_minmax(60px,0.7fr)_minmax(70px,0.9fr)_minmax(80px,1fr)_minmax(60px,0.7fr)]";function Li({vehicles:s,isLoading:u,selectedVehicles:t,onToggleSelectAll:a,onToggleSelectVehicle:r,onRowClick:l,onStatusChange:i,onMarkAsSold:h,onDeleteClick:n,isAdmin:x,sortColumn:m,sortDirection:j,onSort:p,search:C,statusFilter:b,onCheckStatus:S,onSetManualStatus:k,checkingVehicleId:O,lastViewedVehicleId:E,onAskPriceUpdate:T,isFullscreen:A}){const L=_.useRef(null),G=Ai({count:(s==null?void 0:s.length)||0,getScrollElement:()=>L.current,estimateSize:()=>Vi,overscan:5}),V=Z=>m!==Z?e.jsx(Jr,{className:"h-4 w-4 ml-1 inline"}):j==="asc"?e.jsx(Yr,{className:"h-4 w-4 ml-1 inline"}):e.jsx(Zr,{className:"h-4 w-4 ml-1 inline"}),$=G.getVirtualItems(),X=s&&s.length>0;return e.jsx(_t,{delayDuration:200,children:e.jsxs("div",{className:"glass-card rounded-xl overflow-hidden",children:[e.jsxs("div",{className:`grid ${os} border-b bg-muted/50 text-xs font-medium text-muted-foreground`,children:[e.jsx("div",{className:"p-2 flex items-center",children:e.jsx(At,{checked:t.size===(s==null?void 0:s.length)&&(s==null?void 0:s.length)>0,onCheckedChange:a})}),e.jsxs("div",{className:"p-2 cursor-pointer hover:bg-muted/50 flex items-center truncate",onClick:()=>p("offer_no"),children:[e.jsx("span",{className:"truncate",children:"Ang.-Nr."})," ",V("offer_no")]}),e.jsx("div",{className:"p-2 hidden xl:flex items-center",children:e.jsxs(le,{children:[e.jsx(oe,{className:"truncate",children:"Ext. ID"}
33),e.jsx(ce,{children:"Externe ID von Mobile.de"})]})}),e.jsx("div",{className:"p-2 xl:hidden"})," ",e.jsxs("div",{className:"p-2 cursor-pointer hover:bg-muted/50 flex items-center truncate",onClick:()=>p("title"),children:[e.jsx("span",{className:"truncate",children:"Titel"})," ",V("title")]}),e.jsxs("div",{className:"p-2 text-right cursor-pointer hover:bg-muted/50 flex items-center justify-end",onClick:()=>p("mileage_km"),children:[e.jsx("span",{className:"truncate",children:"Kilometer"})," ",V("mileage_km")]}),e.jsxs("div",{className:"p-2 cursor-pointer hover:bg-muted/50 hidden lg:flex items-center",onClick:()=>p("first_registration"),children:[e.jsx("span",{className:"truncate",children:"Erstzulassung"})," ",V("first_registration")]}),e.jsx("div",{className:"p-2 lg:hidden"})," ",e.jsx("div",{className:"p-2 hidden md:flex items-center",children:"Farben"}),e.jsx("div",{className:"p-2 md:hidden"})," ",e.jsx("div",{className:"p-2 text-center flex items-center justify-center",children:e.jsxs(le,{children:[e.jsx(oe,{children:"Aus."}),e.jsx(ce,{children:"Ausstattung"})]})}),e.jsx("div",{className:"p-2 flex items-center",children:e.jsxs(le,{children:[e.jsx(oe,{children:"Bild"}),e.jsx(ce,{children:"Cover-Bild optimiert"})]})}),e.jsx("div",{className:"p-2 flex items-center",children:"Web"}),e.jsxs("div",{className:"p-2 text-right cursor-pointer hover:bg-muted/50 flex items-center justify-end",onClick:()=>p("ask_price"),children:[e.jsx("span",{className:"truncate",children:"VK"})," ",V("ask_price")]}),e.jsxs("div",{className:"p-2 text-right cursor-pointer hover:bg-muted/50 flex items-center justify-end",onClick:()=>p("rate"),children:[e.jsx("span",{className:"truncate",children:"Rate"})," ",V("rate")]}),e.jsxs("div",{className:"p-2 cursor-pointer hover:bg-muted/50 flex items-center truncate",onClick:()=>p("updated_at"),children:[e.jsxs(le,{children:[e.jsx(oe,{className:"truncate",onClick:()=>p("updated_at"),children:"Bearb."}),e.jsx(ce,{children:"Zuletzt bearbeitet"})]}),V("updated_at")]}),e.jsx("div",{className:"p-2 flex items-center truncate",children:"Status"}),e.jsx("div",{className:"p-2 flex items-center truncate",children:"Mobile"}),e.jsxs("div",{className:"p-2 cursor-pointer hover:bg-muted/50 flex items-center truncate",onClick:()=>p("last_checked_at"),children:[e.jsxs(le,{children:[e.jsx(oe,{className:"truncate",onClick:()=>p("last_checked_at"),children:"Geprüft"}),e.jsx(ce,{children:"Zuletzt geprüft"})]}),V("last_checked_at")]})]}),u?e.jsx(Kt,{children:e.jsx(Gt,{children:e.jsx(Hr,{rows:8})})}):X?e.jsx("div",{ref:L,className:A?"max-h-[calc(100vh-200px)] overflow-auto":"max-h-[calc(100vh-320p
33x)] overflow-auto",children:e.jsx("div",{style:{height:`${G.getTotalSize()}px`,width:"100%",position:"relative"},children:$.map(Z=>{const D=s[Z.index];return e.jsx(Ti,{vehicle:D,isSelected:t.has(D.id),onToggleSelect:r,onRowClick:l,onStatusChange:i,onMarkAsSold:h,onDeleteClick:n,isAdmin:x,onCheckStatus:S,onSetManualStatus:k,isCheckingStatus:O===D.id,isLastViewed:E===D.id,gridCols:os,onAskPriceUpdate:T,style:{position:"absolute",top:0,left:0,width:"100%",height:`${Z.size}px`,transform:`translateY(${Z.start}px)`}},D.id)})})}):e.jsx(Kt,{children:e.jsx(Gt,{children:e.jsx(Gr,{children:e.jsx(Wr,{colSpan:14,className:"text-center py-8",children:C||b!=="all"?"Keine Fahrzeuge gefunden":"Noch keine Fahrzeuge vorhanden. Füge dein erstes Fahrzeug hinzu."})})})})]})})}const je=ve;function qi({open:s,onOpenChange:u,vehicle:t}){var y;const{toast:a}=nt(),r=Oe(),l=_.useRef(!1),[i,h]=_.useState("photoroom"),{formData:n,setFormData:x,updateField:m,popoverState:j,setPopoverState:p,processingState:C,setProcessingState:b,models:S,colorMappings:k,interiorMappings:O,updateResidualFromPercent:E,addImage:T,removeImage:A,updateImageOptimized:L}=Fs({isOpen:s,leasingType:(t==null?void 0:t.leasing_type)||"restwert"}),{data:G}=cs(),V=d=>{if(G&&G.length>0){const f=ds(d,G);m("brokerFee",f.toString())}},{data:$}=me({queryKey:["vehicle",t==null?void 0:t.id],queryFn:async()=>{if(!(t!=null&&t.id))return null;const{data:d,error:f}=await z.from("vehicles").select("*, pricing(*), spec_options(*), media(*)").eq("id",t.id).single();if(f)throw f;return d},enabled:s&&!!(t!=null&&t.id),refetchOnWindowFocus:!1,refetchOnReconnect:!1,staleTime:1/0}),{data:X}=me({queryKey:["settings"],queryFn:async()=>{const{data:d,error:f}=await z.from("settings").select("*");if(f)throw f;return d}}),Z=((y=X==null?void 0:X.find(d=>d.key==="default_interest_rate"))==null?void 0:y.value)||"6.5";_.useEffect(()=>{const d=$||t;if(d&&s&&!l.current){l.current=!0;const f=Array.isArray(d.pricing)?d.pricing.length>0?d.pricing.sort((M,q)=>new Date(q.updated_at).getTime()-new Date(M.updated_at).getTime())[0]:null:d.pricing;let P="";if(S&&d.make&&d.model_family){const M=S.find(q=>q.make===d.make&&q.family===d.model_family&&(q.variant===d.model_variant||!q.variant&&!d.model_variant));M&&(P=M.id)}const F=d.our_sales_price?te(d.our_sales_price.toString()):te(et(d.ask_price).toString());x(M=>{var q;return{...M,externalId:d.external_id||"",offerNo:d.offer_no||"",title:d.title||"",slug:d.slug||"",webUrl:d.web_url||"",selectedModel:P,exteriorColor:d.color_exterior_oem||"",interior:d.interior_desc||"",firstRegistration:kr(d.first_registration),mileage:d.mileage_km?te(d.mileage_km.toString()):"",askPrice:te(d.ask_price.toString()),ourSalesPrice:F,listPrice:te(d.list_price.toString()),term:((q=d.term_months)==null?void 0:q.toString())||"48",vehicleCondition:d.vehicle_condition||"Junger Gebrauchter",leasingAudience:d.leasing_audience||"Privat & Gewerblich",availability:d.availability||"sofort verfügbar",mileageYear:(d.mileage_year||7500).toString(),isFeatured:d.is_featured||!1,residualPercent:f?((f.residual_pct||0)*100).toFixed(0):"70",residualValue:f?te(Math.round(f.residual_eur||0).toString()):"",interestRate:f?((f.interest_annual||0)*100).toFixed(1):Z,leasingRate:(f==null?void 0:f.rate_rounded_gross)||null,leasingRateNet:(f==null?void 0:f.rate_rounded_net)||null,brokerFee:((f==null?void 0:f.broker_fee)||4e3).toString(),deliveryFee:((f==null?void 0:f.delivery_fee)||0).toString(),downPayment:((f==null?void 0:f.down_payment)||0).toString()}})}s||(l.current=!1)},[t,$,s,S,Z,x]);const D=_.useRef(!1);_.useEffect(()=>{if(!s){D.current=!1;return}if(!D.current&&$!=null&&$.media){const d=new Map;for(const P of $.media){const F=P.position??0,M=d.get(F);(!M||P.optimized_url&&!M.optimized_url)&&d.set(F,P)}const f=Array.from(d.values()).sort((P,F)=>(P.position??0)-(F.position??0)).map(P=>({url:P.url,filename:P.filename||"image.jpg",optimizedUrl:P.optimized_url||void 0}));x(P=>({...P,uploadedImages:f})),D.current=!0}},[$==null?void 0:$.media,s,x]),_.useEffect(()=>{if(s&&$!=null&&$.spec_options){const d=$.spec_options.filter(f=>f.group_name==="Ausstattung").map(f=>f.label).join(` 34`);x(f=>({...f,equipment:d}))}},[$==null?void 0:$.id,s,x]),_.useEffect(()=>{if(n.offerNo&&n.externalId&&n.title){const d=wt(n.offerNo,n.externalId,n.title);x(f=>({...f,slug:d,webUrl:kt(d)}
34))}},[n.offerNo,n.externalId,n.title,x]);const v=ne({mutationFn:async d=>{if(!n.externalId||!n.selectedModel||!n.askPrice||!n.ourSalesPrice||!n.listPrice)throw a({title:"Fehler",description:"Bitte füllen Sie alle Pflichtfelder aus.",variant:"destructive"}),new Error("Pflichtfelder fehlen");const f=S==null?void 0:S.find(M=>M.id===n.selectedModel);if(!f)throw new Error("Modell nicht gefunden");const{error:P}=await z.from("vehicles").update({external_id:n.externalId,make:f.make,model_family:f.family,model_variant:f.variant,title:`${f.make} ${f.family} ${f.variant||""}`.trim(),color_exterior_oem:n.exteriorColor,interior_desc:n.interior,first_registration:Nt(n.firstRegistration),mileage_km:n.mileage?parseInt(je(n.mileage)):null,ask_price:parseFloat(je(n.askPrice)),our_sales_price:parseFloat(je(n.ourSalesPrice)),list_price:parseFloat(je(n.listPrice)),term_months:n.term?parseInt(n.term):null,power_kw:f.power_kw,power_hp:f.power_hp,displacement_cc:f.displacement_cc,fuel_type:f.fuel_type,euro_class:f.euro_class,efficiency_class:f.efficiency_class,drivetrain_awd:f.drivetrain_awd,mileage_year:parseInt(n.mileageYear)||7500,is_featured:n.isFeatured,vehicle_condition:n.vehicleCondition,leasing_audience:n.leasingAudience,availability:n.availability,...d&&{status:d,published_at:d==="published"?new Date().toISOString():t.published_at}}).eq("id",t.id);if(P)throw P;if(n.interestRate||n.residualValue||n.leasingRate){const M={vehicle_id:t.id,residual_pct:n.residualPercent?parseFloat(n.residualPercent)/100:null,interest_annual:parseFloat(n.interestRate.replace(",","."))/100,total_cost:parseFloat(je(n.ourSalesPrice)),broker_fee:parseFloat(n.brokerFee)||4e3,delivery_fee:parseFloat(n.deliveryFee)||0,down_payment:parseFloat(n.downPayment)||0};n.residualValue&&(M.residual_eur=parseFloat(je(n.residualValue))),n.leasingRate&&n.leasingRateNet&&(M.rate_calc_net=n.leasingRateNet,M.rate_rounded_net=n.leasingRateNet,M.rate_rounded_gross=n.leasingRate,M.factor=n.leasingFactor),await z.from("pricing").upsert(M,{onConflict:"vehicle_id"})}if(n.externalId){const M=`https://suchen.mobile.de/fahrzeuge/details.html?id=${n.externalId}&lang=de`;await z.from("link_monitor").upsert({vehicle_id:t.id,external_id:n.externalId,source_url:M,source:"mobile.de",status:"online"})}if(await z.from("spec_options").delete().eq("vehicle_id",t.id),n.equipment.trim()){const q=n.equipment.split(` 35`).filter(K=>K.trim()).map(K=>({vehicle_id:t.id,group_name:"Ausstattung",label:K.trim()}));q.length>0&&await z.from("spec_options").insert(q)}const{error:F}=await z.from("media").delete().eq("vehicle_id",t.id);if(F)throw new Error(`Media-Löschung fehlgeschlagen: ${F.message}`);if(n.uploadedImages.length>0){const M=n.uploadedImages.map((K,re)=>({vehicle_id:t.id,url:K.url,filename:K.filename,optimized_url:K.optimizedUrl||null,position:re,is_cover:re===0})),{error:q}=await z.from("media").insert(M);if(q)throw new Error(`Media-Speicherung fehlgeschlagen: ${q.message}`)}return t.id},onSuccess:async(d,f)=>{await r.refetchQueries({queryKey:["vehicles"]}),await r.refetchQueries({queryKey:["luxusleasing-vehicles"]}),await r.refetchQueries({queryKey:["kilometerleasing-vehicles"]}),await r.invalidateQueries({queryKey:["vehicle",t==null?void 0:t.id]});const P=f==="published";a({title:P?"Fahrzeug veröffentlicht":f==="draft"?"Als Entwurf gespeichert":"Fahrzeug aktualisiert",description:P?"Das Fahrzeug ist jetzt online sichtbar.":"Die Ãnderungen wurden erfolgreich gespeichert."}),u(!1)},onError:d=>{a({title:"Fehler",description:d.message,variant:"destructive"})}});return e.jsx(Ct,{open:s,onOpenChange:u,children:e.jsxs(St,{className:"max-w-[1400px] max-h-[95vh] overflow-y-auto",children:[e.jsxs(Ft,{children:[e.jsxs(It,{className:"text-2xl font-bold flex items-center gap-3",children:["Fahrzeug bearbeiten",n.offerNo&&e.jsx("span",{className:"text-base font-mono bg-muted px-2 py-1 rounded border",children:n.offerNo})]}),e.jsx(Dt,{children:"Bearbeite die Fahrzeugdetails und Leasing-Berechnungen."})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs("div",{className:"flex items-center justify-between p-4 rounded-lg border border-border bg-muted/30",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ti,{className:J("w-5 h-5",n.isFeatured?"text-foreground fill-foreground":"text-muted-foreground")}),e.jsxs("div",{children:[e.jsx(Q,{htmlFor:"featured-toggle",className:"text-base font-medium cursor-pointer",children:"Top-Angebot"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Wird auf der Startseite als Featured Deal angezeigt"})]})]}),e.jsx(ei,{id:"featured-toggle",checked:n.isFeatured,onCheckedChange:d=>m("isFeatured",d)})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"external_id",children:"Mobile.de ID *"}),e.jsxs("div",{className:"flex gap-1",children:[e.jsx(de,{id:"external_id",value:n.externalId,onChange:d=>m("externalId",d.target.value),placeholder:"z.B. 12345678",className:"flex-1"}),e.jsx(W,{variant:"outline",size:"icon",className:"shrink-0",disabled:!n.externalId,onClick:()=>window.open(`https://suchen.mobile.de/fahrzeuge/details.html?id=${n.externalId}&lang=de`,"_blank"),children:e.jsx(tt,{className:"h-4 w-4"})})]})]}),e.jsx(Is,{selectedModel:n.selectedModel,onSelect:d=>m("selectedModel",d),models:S,open:j.modelOpen,onOpenChange:d=>p(f=>({...f,modelOpen:d}))})]}),e.jsxs("div",{className:"grid grid-cols-2 gap-4",children:[e.jsx(rt,{type:"exterior",value:n.exterior
35Color,onChange:d=>m("exteriorColor",d),mappings:k,open:j.exteriorOpen,onOpenChange:d=>p(f=>({...f,exteriorOpen:d}))}),e.jsx(rt,{type:"interior",value:n.interior,onChange:d=>m("interior",d),mappings:O,open:j.interiorOpen,onOpenChange:d=>p(f=>({...f,interiorOpen:d}))})]}),e.jsx(Ds,{vehicleCondition:n.vehicleCondition,availability:n.availability,leasingAudience:n.leasingAudience,firstRegistration:n.firstRegistration,mileage:n.mileage,onFieldChange:(d,f)=>m(d,f)}),e.jsx(Ps,{askPrice:n.askPrice,ourSalesPrice:n.ourSalesPrice,listPrice:n.listPrice,residualPercent:n.residualPercent,residualValue:n.residualValue,interestRate:n.interestRate,term:n.term,leasingRate:n.leasingRate,leasingRateNet:n.leasingRateNet,leasingFactor:n.leasingFactor,onFieldChange:(d,f)=>m(d,f),onResidualUpdate:E,onAskPriceChanged:V,fieldErrors:{externalId:!1,selectedModel:!1,askPrice:!1,ourSalesPrice:!1,listPrice:!1}}),n.selectedModel&&S&&(()=>{const d=S.find(M=>M.id===n.selectedModel);if(!d)return null;const f=n.ourSalesPrice?parseFloat(je(n.ourSalesPrice)):void 0,P=n.listPrice?parseFloat(je(n.listPrice)):void 0,F=n.mileage?parseInt(je(n.mileage)):void 0;return e.jsx(Ws,{make:d.make,modelFamily:d.family,modelVariant:d.variant,firstRegistration:n.firstRegistration,mileageKm:F,inputPrice:f,listPrice:P,onApplyResidual:(M,q)=>{m("residualPercent",M.toString()),m("residualValue",te(q.toString()))},className:"border-primary/20"})})(),e.jsx(zs,{mileageYear:n.mileageYear,brokerFee:n.brokerFee,deliveryFee:n.deliveryFee,downPayment:n.downPayment,onFieldChange:(d,f)=>m(d,f)}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"equipment",children:"Ausstattung (eine pro Zeile)"}),e.jsx(zt,{id:"equipment",value:n.equipment,onChange:d=>m("equipment",d.target.value),placeholder:`Klimaanlage 36Navigationssystem 37Ledersitze`,rows:4})]}),e.jsx(Gs,{images:n.uploadedImages,onAddImage:T,onRemoveImage:A,onRemoveOptimized:async d=>{var P;const f=n.uploadedImages[d];if(f!=null&&f.optimizedUrl){const F=(P=f.optimizedUrl.split("/vehicle-media/")[1])==null?void 0:P.split("?")[0];F&&await z.storage.from("vehicle-media").remove([F])}L(d,void 0)},onOptimizeImage:async d=>{var P;const f=n.uploadedImages[d];if(f){b(F=>({...F,optimizingImageIndex:d}));try{const{data:F}=await z.auth.getSession(),M=(P=F==null?void 0:F.session)==null?void 0:P.access_token;if(!M){a({title:"Nicht angemeldet",variant:"destructive"});return}const q=i==="ai"?"process-vehicle-image-ai":"process-vehicle-image",K=i==="ai"?{imageUrl:f.url,vehicleId:t==null?void 0:t.id,slug:n.slug,position:d}:{imageUrl:f.url,vehicleId:t==null?void 0:t.id,slug:n.slug,position:d,options:{backgroundImageUrl:"https://vbbjtsrypdfstwygrcud.supabase.co/storage/v1/object/public/vehicle-media/backgrounds/luxury-studio.png"}},re=await fetch(`https://vbbjtsrypdfstwygrcud.supabase.co/functions/v1/${q}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${M}`},body:JSON.stringify(K)}),ee=await re.json();if(!re.ok)throw new Error(ee.error||"Fehler bei der Bildoptimierung");L(d,ee.optimizedUrl),a({title:`â Bild optimiert (${i==="ai"?"AI Studio":"Photoroom"})`})}catch(F){a({title:"Fehler bei der Optimierung",description:F instanceof Error?F.message:"Unbekannter Fehler",variant:"destructive"})}finally{b(F=>({...F,optimizingImageIndex:null}))}}},onOptimizeAll:async()=>{var F;b(M=>({...M,isOptimizingImages:!0}));const{data:d}=await z.auth.getSession(),f=(F=d==null?void 0:d.session)==null?void 0:F.access_token;if(!f){a({title:"Nicht angemeldet",variant:"destructive"}),b(M=>({...M,isOptimizingImages:!1}));return}const P=i==="ai"?"process-vehicle-image-ai":"process-vehicle-image";for(let M=0;M<n.uploadedImages.length;M++){const q=n.uploadedImages[M];if(!(!(q!=null&&q.url)||q.optimizedUrl)){b(K=>({...K,optimizingImageIndex:M}));try{const K=i==="ai"?{imageUrl:q.url,vehicleId:t==null?void 0:t.id,slug:n.slug,position:M}:{imageUrl:q.url,vehicleId:t==null?void 0:t.id,slug:n.slug,position:M,options:{backgroundImageUrl:"https://vbbjtsrypdfstwygrcud.supabase.co/storage/v1/object/public/vehicle-media/backgrounds/luxury-studio.png"}},re=await fetch(`https://vbbjtsrypdfstwygrcud.supabase.co/functions/v1/${P}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${f}`},body:JSON.stringify(K)}),ee=await re.json();
37re.ok&&ee.optimizedUrl&&L(M,ee.optimizedUrl)}catch(K){console.error("Fehler bei Bild",M,K)}}}b(M=>({...M,isOptimizingImages:!1,optimizingImageIndex:null})),a({title:"Alle Bilder optimiert"})},isOptimizing:C.isOptimizingImages,optimizingIndex:C.optimizingImageIndex,isDialogOpen:s,showOptimizedPreview:!0,engine:i,onEngineChange:h})]}),e.jsxs("div",{className:"flex justify-end gap-3 pt-4",children:[e.jsx(W,{variant:"outline",onClick:()=>u(!1),size:"lg",children:"Abbrechen"}),e.jsxs(W,{variant:"secondary",onClick:()=>v.mutate("draft"),disabled:v.isPending,size:"lg",className:"gap-2",children:[e.jsx(ws,{className:"h-4 w-4"}),v.isPending?"Wird gespeichert...":"Als Entwurf"]}),e.jsxs(W,{onClick:()=>v.mutate("published"),disabled:v.isPending,size:"lg",className:"gap-2 bg-green-600 hover:bg-green-700 text-white",children:[e.jsx(ks,{className:"h-4 w-4"}),v.isPending?"Wird gespeichert...":"Speichern & Online"]})]})]})})}function $i({editDialogOpen:s,onEditDialogOpenChange:u,vehicleDetails:t,vehicleToEdit:a,deleteConfirmOpen:r,onDeleteConfirmOpenChange:l,vehicleToDelete:i,onConfirmSingleDeletion:h,interestRateDialogOpen:n,onInterestRateDialogOpenChange:x,newInterestRate:m,onNewInterestRateChange:j,applyToAll:p,onApplyToAllChange:C,onBulkInterestRateUpdate:b,isUpdating:S,vehiclesCount:k,selectedCount:O,urlListDialogOpen:E,onUrlListDialogOpenChange:T,urlsToExport:A,permanentDeleteDialogOpen:L,onPermanentDeleteDialogOpenChange:G,onConfirmPermanentDelete:V,isPermanentDeleting:$,permanentDeleteCount:X,archiveDialogOpen:Z,onArchiveDialogOpenChange:D,onConfirmArchive:v,isArchiving:y,archiveCount:d}){const[f,P]=_.useState(!1);return e.jsxs(e.Fragment,{children:[e.jsx(Ve,{open:r,onOpenChange:l,children:e.jsxs(Le,{children:[e.jsxs(qe,{children:[e.jsx($e,{children:"Fahrzeug permanent löschen?"}),e.jsxs(Ue,{children:['"',i==null?void 0:i.title,'" wird permanent aus der Datenbank gelöscht. Diese Aktion kann nicht rückgängig gemacht werden und das Fahrzeug erscheint auch nicht im Archiv.']})]}),e.jsxs(Be,{children:[e.jsx(Ke,{children:"Abbrechen"}),e.jsx(Ge,{onClick:h,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:"Löschen"})]})]})}),e.jsx(qi,{open:s,onOpenChange:u,vehicle:t||a}),e.jsx(Ct,{open:n,onOpenChange:x,children:e.jsxs(St,{children:[e.jsxs(Ft,{children:[e.jsx(It,{children:"Zinssatz anpassen"}),e.jsx(Dt,{children:"Passe den Zinssatz für mehrere Fahrzeuge gleichzeitig an"})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(Q,{htmlFor:"new_interest_rate",children:"Neuer Zinssatz (%)"}),e.jsx(de,{id:"new_interest_rate",type:"number",step:"0.1",min:"0",max:"20",value:m,onChange:F=>j(F.target.value),onKeyDown:F=>{F.key==="Enter"&&b()},placeholder:"7.5"})]}),e.jsxs(Xr,{value:p?"all":"selected",onValueChange:F=>C(F==="all"),children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Jt,{value:"all",id:"all"}),e.jsxs(Q,{htmlFor:"all",className:"font-normal cursor-pointer",children:["Auf alle Fahrzeuge anwenden (",k," Fahrzeuge)"]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(Jt,{value:"selected",id:"selected"}),e.jsxs(Q,{htmlFor:"selected",className:"font-normal cursor-pointer",children:["Nur auf ausgewählte Fahrzeuge (",O," ausgewählt)"]})]})]})]}),e.jsxs(Cr,{children:[e.jsx(W,{variant:"outline",onClick:()=>x(!1),children:"Abbrechen"}),e.jsx(W,{onClick:b,disabled:S,children:S?"Wird angewendet...":"Zinssatz anwenden"})]})]})}),e.jsx(si,{open:E,onOpenChange:T,urls:A}),e.jsx(Ve,{open:Z,onOpenChange:D,children:e.jsxs(Le,{children:[e.jsxs(qe,{children:[e.jsx($e,{children:"Fahrzeuge archivieren?"}),e.jsxs(Ue,{className:"space-y-2",children:[e.jsxs("span",{className:"block",children:["Die ",d," ausgewählten Fahrzeuge werden archiviert und in der Preishistorie gespeichert."]}),e.jsx("span",{className:"block text-muted-foreground text-sm",children:"Die Preisdaten stehen dann für zukünftige Marktanalysen zur Verfügung."})]})]}),e.jsxs(Be,{children:[e.jsx(Ke,{disabled:y,children:"Abbrechen"}),e.jsx(Ge,{onClick:v,disabled:y,children:y?"Wird archiviert...":"Archivieren"})]})]})}),e.jsx(Ve,{open:L,onOpenChange:G,children:e.jsxs(Le,{children:[e.jsxs(qe,{children:[e.jsx($e,{children:"Fahrzeuge permanent löschen?"}),e.jsxs(Ue,{className:"space-y-3",children:[e.jsxs("span",{className:"block",children:["Die ",X," ausgewählten Fahrzeuge werden ",e.jsx("strong",{children:"permanent"})," aus der Datenbank gelöscht. Diese Aktion kann nicht rückgängig gemacht werden."]}),e.jsxs("div",{className:"flex items-start space-x-2 pt-2",children:[e.jsx(At,{id:"archive-before-delete",checked:f,onCheckedChange:F=>P(F===!0),disabled:$}),e.jsxs("div",{className:"grid gap-1.5 leading-none",children:[e.jsx(Q,{htmlFor:"archive-before-delete",className:"text-sm font-medium leading-none cursor-pointer",children:"Vor dem Löschen archivieren"}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Speichert die Preisdaten in der Historie für zukünftige Analysen"})]})]})]})]}),e.jsxs(Be,{children:[e.jsx(Ke,{disabled:$,children:"Abbrechen"}),e.jsx(Ge,{onClick:()=>V(f),disabled:$,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:$?"Wird gelöscht...":"Permanent löschen"})]})]})})]})}function Ui({pendingCount:s,totalCount:u,onCheckNext:t,isChecking:a}){return u===0||s===0?null:e.jsxs("div",{className:"flex items-center gap-3 px-1 py-1 text-sm text-muted-foreground",children:[e.jsx(ri,{className:"h-3.5 w-3.5 text-warning shrink-0"}),e.jsxs("span",{children:[e.jsx("span",{className:"font-medium text-foreground",children:s})," Fahrzeuge fällig"]}),e.jsx(W,{variant:"ghost",size:"sm",onClick:t,disabled:a,className:"gap-1.5 h-7 px-2 text-xs",children:a?e.jsxs(e.Fragment,{children:[e.jsx(ke,{className:"h-3 w-3 animate-spin"}),"Prüfe..."]}):e.jsxs(e.Fragment,{children:[e.jsx(at,{className:"h-3 w-3"}),"Nächste ",Math.min(s,20)," prüfen"]})})]})}function rn(){var r;const s=ci(),u=di(),[t,a]=_.useState(!1);return _.useEffect(()=>{const l=i=>{i.key==="Escape"&&t&&a(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[t]),e.jsxs("div",{className:t?"fixed inset-0 z-50 bg-background p-4 overflow-auto space-y-2":"luxury-bg-enhanced
37space-y-2",children:[e.jsx(bi,{search:s.search,onSearchChange:s.setSearch,makeFilter:s.makeFilter,onMakeFilterChange:s.setMakeFilter,modelFilter:s.modelFilter,onModelFilterChange:s.setModelFilter,availableMakes:s.availableMakes,availableModels:s.availableModels,onCheckAll:s.handleCheckAll,checkingAll:s.checkingAll,hasVehicles:!!s.vehicles&&s.vehicles.length>0,isFullscreen:t,onToggleFullscreen:()=>a(!t)}),e.jsx(ji,{statusFilter:s.statusFilter,onStatusFilterChange:s.setStatusFilter,statusCounts:s.statusCounts}),e.jsx(Ui,{checkedCount:u.statusStats.checkedCount,pendingCount:u.statusStats.pendingCount,totalCount:u.statusStats.totalCount,onCheckNext:()=>u.checkNextSequential(20),isChecking:u.isCheckingNext}),s.selectedVehicles.size>0&&e.jsx(yi,{selectedCount:s.selectedVehicles.size,onClearSelection:s.clearSelection,onBulkAction:s.handleBulkAction,onOpenInterestRateDialog:()=>s.setInterestRateDialogOpen(!0)}),e.jsx(Li,{vehicles:s.filteredVehicles,isLoading:s.isLoading,selectedVehicles:s.selectedVehicles,onToggleSelectAll:s.toggleSelectAll,onToggleSelectVehicle:s.toggleSelectVehicle,onRowClick:s.handleRowClick,onStatusChange:s.handleStatusChange,onMarkAsSold:s.handleMarkAsSold,onDeleteClick:s.handleDeleteClick,isAdmin:s.isAdmin,sortColumn:s.sortColumn,sortDirection:s.sortDirection,onSort:s.handleSort,search:s.search,statusFilter:s.statusFilter,onCheckStatus:u.checkSingle,onSetManualStatus:(l,i)=>u.setManualStatus({vehicleId:l,status:i}),checkingVehicleId:u.checkingVehicleId,lastViewedVehicleId:s.lastViewedVehicleId,onAskPriceUpdate:s.handleInlineAskPriceUpdate,isFullscreen:t}),e.jsx($i,{editDialogOpen:s.editDialogOpen,onEditDialogOpenChange:s.setEditDialogOpen,vehicleDetails:s.vehicleDetails,vehicleToEdit:s.vehicleToEdit,deleteConfirmOpen:s.deleteConfirmOpen,onDeleteConfirmOpenChange:s.setDeleteConfirmOpen,vehicleToDelete:s.vehicleToDelete,onConfirmSingleDeletion:s.confirmSingleDeletion,interestRateDialogOpen:s.interestRateDialogOpen,onInterestRateDialogOpenChange:s.setInterestRateDialogOpen,newInterestRate:s.newInterestRate,onNewInterestRateChange:s.setNewInterestRate,applyToAll:s.applyToAll,onApplyToAllChange:s.setApplyToAll,onBulkInterestRateUpdate:s.handleBulkInterestRateUpdate,isUpdating:s.bulkUpdateInterestRateMutation.isPending,vehiclesCount:((r=s.vehicles)==null?void 0:r.length)||0,selectedCount:s.selectedVehicles.size,urlListDialogOpen:s.urlListDialogOpen,onUrlListDialogOpenChange:s.setUrlListDialogOpen,urlsToExport:s.urlsToExport,permanentDeleteDialogOpen:s.permanentDeleteDialogOpen,onPermanentDeleteDialogOpenChange:s.setPermanentDeleteDialogOpen,onConfirmPermanentDelete:s.confirmPermanentDelete,isPermanentDeleting:s.permanentDeleteMutation.isPending,permanentDeleteCount:s.selectedVehicles.size,archiveDialogOpen:s.archiveDialogOpen,onArchiveDialogOpenChange:s.setArchiveDialogOpen,onConfirmArchive:s.confirmArchive,isArchiving:s.archiveWithHistoryMutation.isPending,archiveCount:s.selectedVehicles.size})]})}export{rn 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.