(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,39964,e=>{"use strict";var t=e.i(43476),i=e.i(75157);e.s(["Card",0,function({className:e,...s}){return(0,t.jsx)("div",{className:(0,i.cn)("rounded-2xl border border-border bg-surface/90 shadow-lg shadow-black/10",e),...s})}])},50939,e=>{"use strict";var t=e.i(61238);async function i(){let{data:e}=await t.api.get("/api/vehicles");return e}async function s(e){let{data:i}=await t.api.get(`/api/vehicles/${e}`);return i}async function a(e){let{data:i}=await t.api.post("/api/vehicles",e);return i}async function r(e,i){let{data:s}=await t.api.patch(`/api/vehicles/${e}`,i);return s}async function n(e,i){let s=new FormData;s.append("image",i);let{data:a}=await t.api.post(`/api/vehicles/${e}/image`,s);return a}async function l(e){await t.api.delete(`/api/vehicles/${e}/image`)}async function c(e){await t.api.delete(`/api/vehicles/${e}`)}async function d(e){let{data:i}=await t.api.get(`/api/vehicles/${e}/reminders`);return i}e.s(["createVehicle",0,a,"deleteVehicle",0,c,"deleteVehicleImage",0,l,"getReminders",0,d,"getVehicle",0,s,"getVehicles",0,i,"updateVehicle",0,r,"uploadVehicleImage",0,n,"vehicleCsvExportUrl",0,function(e){return`/api/vehicles/${e}/export/csv`},"vehicleJsonExportUrl",0,function(e){return`/api/vehicles/${e}/export/json`}])},54616,e=>{"use strict";var t=e.i(71645),i=e.i(14272),s=e.i(40143),a=e.i(15823),r=e.i(19273),n=class extends a.Subscribable{#e;#t=void 0;#i;#s;constructor(e,t){super(),this.#e=e,this.setOptions(t),this.bindMethods(),this.#a()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(e){let t=this.options;this.options=this.#e.defaultMutationOptions(e),(0,r.shallowEqualObjects)(this.options,t)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#i,observer:this}),t?.mutationKey&&this.options.mutationKey&&(0,r.hashKey)(t.mutationKey)!==(0,r.hashKey)(this.options.mutationKey)?this.reset():this.#i?.state.status==="pending"&&this.#i.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#i?.removeObserver(this)}onMutationUpdate(e){this.#a(),this.#r(e)}getCurrentResult(){return this.#t}reset(){this.#i?.removeObserver(this),this.#i=void 0,this.#a(),this.#r()}mutate(e,t){return this.#s=t,this.#i?.removeObserver(this),this.#i=this.#e.getMutationCache().build(this.#e,this.options),this.#i.addObserver(this),this.#i.execute(e)}#a(){let e=this.#i?.state??(0,i.getDefaultState)();this.#t={...e,isPending:"pending"===e.status,isSuccess:"success"===e.status,isError:"error"===e.status,isIdle:"idle"===e.status,mutate:this.mutate,reset:this.reset}}#r(e){s.notifyManager.batch(()=>{if(this.#s&&this.hasListeners()){let t=this.#t.variables,i=this.#t.context,s={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(e?.type==="success"){try{this.#s.onSuccess?.(e.data,t,i,s)}catch(e){Promise.reject(e)}try{this.#s.onSettled?.(e.data,null,t,i,s)}catch(e){Promise.reject(e)}}else if(e?.type==="error"){try{this.#s.onError?.(e.error,t,i,s)}catch(e){Promise.reject(e)}try{this.#s.onSettled?.(void 0,e.error,t,i,s)}catch(e){Promise.reject(e)}}}this.listeners.forEach(e=>{e(this.#t)})})}},l=e.i(12598);e.s(["useMutation",0,function(e,i){let a=(0,l.useQueryClient)(i),[c]=t.useState(()=>new n(a,e));t.useEffect(()=>{c.setOptions(e)},[c,e]);let d=t.useSyncExternalStore(t.useCallback(e=>c.subscribe(s.notifyManager.batchCalls(e)),[c]),()=>c.getCurrentResult(),()=>c.getCurrentResult()),o=t.useCallback((e,t)=>{c.mutate(e,t).catch(r.noop)},[c]);if(d.error&&(0,r.shouldThrowError)(c.options.throwOnError,[d.error]))throw d.error;return{...d,mutate:o,mutateAsync:d.mutate}}],54616)},75967,e=>{"use strict";var t=e.i(61238);async function i(){let{data:e}=await t.api.get("/api/fleet/statistics");return e}async function s(e){let{data:i}=await t.api.get(`/api/vehicles/${e}/statistics/overview`);return i}async function a(e){let{data:i}=await t.api.get(`/api/vehicles/${e}/statistics/fuel-economy`);return i}async function r(e){let{data:i}=await t.api.get(`/api/vehicles/${e}/statistics/costs-over-time`);return i}e.s(["getCosts",0,r,"getFleetStatistics",0,i,"getFuelEconomy",0,a,"getOverview",0,s])},59208,e=>{"use strict";let t=(0,e.i(75254).default)("CalendarClock",[["path",{d:"M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5",key:"1osxxc"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M3 10h5",key:"r794hk"}],["path",{d:"M17.5 17.5 16 16.3V14",key:"akvzfd"}],["circle",{cx:"16",cy:"16",r:"6",key:"qoo3c4"}]]);e.s(["CalendarClock",0,t],59208)},95468,e=>{"use strict";let t=(0,e.i(75254).default)("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);e.s(["CheckCircle2",0,t],95468)},18133,e=>{"use strict";var t=e.i(47167);e.s(["vehicleImageUrl",0,function(e,i){if(!i)return null;let s=(t.default.env.NEXT_PUBLIC_API_URL??"").replace(/\/$/,""),a=i.split("/").pop()??"";return`${s}/api/vehicles/${e}/image?v=${encodeURIComponent(a)}`}])},7233,e=>{"use strict";let t=(0,e.i(75254).default)("Plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);e.s(["Plus",0,t],7233)},94827,e=>{"use strict";let t=(0,e.i(75254).default)("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);e.s(["Gauge",0,t],94827)},13246,e=>{"use strict";var t=e.i(43476);e.i(71645);var i=e.i(39964);e.s(["StatCard",0,function({label:e,value:s,icon:a,accent:r="text-primary"}){return(0,t.jsxs)(i.Card,{className:"p-3 sm:p-4",children:[(0,t.jsx)("div",{className:"flex items-center justify-between",children:(0,t.jsx)("div",{className:`rounded-lg bg-elevated p-2 sm:rounded-xl ${r}`,children:(0,t.jsx)(a,{size:18})})}),(0,t.jsx)("p",{className:"mt-3 break-words text-xl font-bold tracking-normal text-slate-50 sm:mt-4 sm:text-2xl",children:s}),(0,t.jsx)("p",{className:"mt-1 text-sm text-slate-400",children:e})]})}])},35743,61342,e=>{"use strict";var t=e.i(43476),i=e.i(39964);e.s(["EmptyState",0,function({title:e,icon:s}){return(0,t.jsxs)(i.Card,{className:"flex min-h-48 flex-col items-center justify-center gap-3 p-8 text-center",children:[(0,t.jsx)("div",{className:"rounded-2xl bg-elevated p-4 text-primary",children:(0,t.jsx)(s,{size:28})}),(0,t.jsx)("p",{className:"font-semibold text-slate-100",children:e})]})}],35743);var s=e.i(46932),a=e.i(22858),r=e.i(94827);let n=(0,e.i(75254).default)("Ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);var l=e.i(22016),c=e.i(18133),d=e.i(75157);e.s(["VehicleCard",0,function({vehicle:e,index:o=0}){var u;let h=(0,c.vehicleImageUrl)(e.id,e.image_path);return(0,t.jsx)(s.motion.div,{initial:{opacity:0,y:12},animate:{opacity:1,y:0},transition:{delay:.05*o},children:(0,t.jsx)(l.default,{href:`/vehicles/${e.id}`,children:(0,t.jsxs)(i.Card,{className:"overflow-hidden transition hover:-translate-y-0.5 hover:border-primary/50 hover:bg-elevated",children:[(0,t.jsx)("div",{className:"h-28 bg-[linear-gradient(135deg,#1f2937,#0f766e)] p-4",children:(0,t.jsxs)("div",{className:"flex justify-between text-white",children:[(0,t.jsxs)("div",{children:[(0,t.jsxs)("p",{className:"text-lg font-bold",children:[e.make," ",e.model]}),(0,t.jsx)("p",{className:"text-sm text-slate-200",children:e.license_plate})]}),(0,t.jsxs)("div",{className:"flex items-start gap-3",children:[h?(0,t.jsx)("div",{className:"h-14 w-20 overflow-hidden rounded-lg border border-white/20 bg-black/20",children:(0,t.jsx)("img",{alt:`${e.make} ${e.model}`,className:"h-full w-full object-cover",src:h})}):null,(0,t.jsx)(n,{size:20})]})]})}),(0,t.jsxs)("div",{className:"flex items-center justify-between gap-3 p-4",children:[(0,t.jsxs)("div",{className:"space-y-1",children:[(0,t.jsxs)("span",{className:"flex items-center gap-2 text-sm text-slate-300",children:[(0,t.jsx)(r.Gauge,{size:16}),(0,d.km)(e.current_odometer)]}),(0,t.jsxs)("span",{className:"flex items-center gap-2 text-xs text-slate-500",children:[(0,t.jsx)(a.Fuel,{size:14}),{PETROL:"Benzin",DIESEL:"Diesel",ELECTRIC:"Elektro",HYBRID:"Hybrid",LPG:"LPG",CNG:"CNG",OTHER:"Sonstiges"}[u=e.fuel_type]??u]}),e.tenant_name?(0,t.jsx)("span",{className:"block text-xs text-slate-500",children:e.tenant_name}):null]}),(0,t.jsx)("span",{className:"rounded-full bg-secondary/15 px-3 py-1 text-xs font-semibold text-secondary",children:e.status})]})]})})})}],61342)},52683,e=>{"use strict";var t=e.i(43476),i=e.i(54616),s=e.i(66027),a=e.i(12598),r=e.i(75254);let n=(0,r.default)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]),l=(0,r.default)("CalendarPlus",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["path",{d:"M21 13V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h8",key:"3spt84"}],["path",{d:"M3 10h18",key:"8toen8"}],["path",{d:"M16 19h6",key:"xwg31i"}],["path",{d:"M19 16v6",key:"tddt3s"}]]);var c=e.i(5125),d=e.i(22858),o=e.i(7233);let u=(0,r.default)("RotateCcw",[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]]),h=(0,r.default)("Wallet",[["path",{d:"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1",key:"18etb6"}],["path",{d:"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4",key:"xoc0q4"}]]);var m=e.i(22016),p=e.i(18635),x=e.i(59544),g=e.i(35743),y=e.i(59208),v=e.i(95468),f=e.i(39964);function b({reminder:e}){let i="danger"===e.severity,s="success"===e.severity;return(0,t.jsxs)(f.Card,{className:"flex items-center gap-3 p-4",children:[(0,t.jsx)("div",{className:`rounded-xl p-2 ${i?"bg-red-500/15 text-danger":s?"bg-emerald-500/15 text-emerald-300":"bg-amber-500/15 text-warning"}`,children:i?(0,t.jsx)(n,{size:18}):s?(0,t.jsx)(v.CheckCircle2,{size:18}):(0,t.jsx)(y.CalendarClock,{size:18})}),(0,t.jsxs)("div",{children:[(0,t.jsx)("p",{className:"font-medium text-slate-100",children:e.title}),(0,t.jsx)("p",{className:"text-sm text-slate-400",children:null!==e.days_remaining&&void 0!==e.days_remaining?`${e.days_remaining} Tage`:`${e.km_remaining} km`})]})]})}function j(){return(0,t.jsx)("div",{className:"h-28 animate-pulse rounded-2xl border border-border bg-elevated"})}var k=e.i(13246),w=e.i(61342),N=e.i(61238);async function C(){let{data:e}=await N.api.get("/api/calendar/subscription");return e}async function M(){let{data:e}=await N.api.post("/api/calendar/subscription/reset");return e}var z=e.i(75967),$=e.i(50939),_=e.i(75157);function E(e,t){let i={danger:0,warning:1,success:2},s=(i[e.severity]??3)-(i[t.severity]??3);if(0!==s)return s;let a=e.days_remaining??1/0,r=t.days_remaining??1/0;return a!==r?a-r:(e.km_remaining??1/0)-(t.km_remaining??1/0)}e.s(["default",0,function(){let e=(0,s.useQuery)({queryKey:["vehicles"],queryFn:$.getVehicles}),r=(0,s.useQuery)({queryKey:["fleet"],queryFn:z.getFleetStatistics}),y=(0,s.useQuery)({queryKey:["dashboard-reminders",e.data?.map(e=>e.id).join(",")],queryFn:async()=>(await Promise.all((e.data??[]).map(e=>(0,$.getReminders)(e.id)))).flat(),enabled:!!e.data?.length}),v=(0,a.useQueryClient)(),f=(0,s.useQuery)({queryKey:["calendar-subscription"],queryFn:C}),N=(0,i.useMutation)({mutationFn:M,onSuccess:e=>v.setQueryData(["calendar-subscription"],e)}),O=[...y.data??[]].sort(E);return(0,t.jsxs)(p.PageTransition,{children:[(0,t.jsxs)("div",{className:"mb-5 flex flex-wrap items-center justify-between gap-3",children:[(0,t.jsxs)("div",{children:[(0,t.jsx)("h1",{className:"text-2xl font-bold text-white sm:text-3xl",children:"Dashboard"}),(0,t.jsx)("p",{className:"mt-1 text-slate-400",children:"Dein Fuhrpark ist bereit."})]}),(0,t.jsxs)("div",{className:"flex flex-wrap gap-2",children:[(0,t.jsx)(m.default,{href:"/fuel/new",children:(0,t.jsxs)(x.Button,{children:[(0,t.jsx)(d.Fuel,{size:18})," Tanken"]})}),(0,t.jsx)(m.default,{href:"/vehicles/new",children:(0,t.jsxs)(x.Button,{variant:"ghost",children:[(0,t.jsx)(o.Plus,{size:18})," Fahrzeug"]})})]})]}),(0,t.jsxs)("section",{children:[(0,t.jsxs)("div",{className:"mb-4 flex items-center justify-between",children:[(0,t.jsx)("h2",{className:"text-xl font-bold text-white",children:"Fahrzeuge"}),(0,t.jsx)(m.default,{className:"text-sm font-semibold text-primary",href:"/vehicles",children:"Verwalten"})]}),e.isLoading?(0,t.jsxs)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-3",children:[(0,t.jsx)(j,{}),(0,t.jsx)(j,{})]}):e.data?.length?(0,t.jsx)("div",{className:"grid gap-4 md:grid-cols-2 xl:grid-cols-3",children:e.data.map((e,i)=>(0,t.jsx)(w.VehicleCard,{vehicle:e,index:i},e.id))}):(0,t.jsx)(g.EmptyState,{title:"Noch keine Fahrzeuge",icon:c.Car})]}),(0,t.jsxs)("div",{className:"mt-6 grid gap-3 sm:grid-cols-3 sm:gap-4",children:[(0,t.jsx)(k.StatCard,{icon:h,label:"Gesamt",value:(0,_.eur)(r.data?.total_spent??0)}),(0,t.jsx)(k.StatCard,{icon:c.Car,label:"Fahrzeuge",value:String(r.data?.vehicles??e.data?.length??0),accent:"text-secondary"}),(0,t.jsx)(k.StatCard,{icon:d.Fuel,label:"Ø Verbrauch",value:`${(0,_.formatNumber)(r.data?.avg_fuel_economy??0,{minimumFractionDigits:2,maximumFractionDigits:2})} L/100 km`,accent:"text-warning"})]}),(0,t.jsxs)("section",{className:"mt-8",children:[(0,t.jsxs)("div",{className:"mb-4 flex flex-wrap items-center justify-between gap-3",children:[(0,t.jsx)("h2",{className:"text-xl font-bold text-white",children:"Erinnerungen"}),f.data?.webcal_url&&(0,t.jsxs)("div",{className:"flex flex-wrap items-center gap-2",children:[(0,t.jsxs)("a",{href:f.data.webcal_url,className:"inline-flex h-10 items-center gap-2 rounded-lg border border-primary/50 bg-primary/15 px-3 text-sm font-semibold text-primary transition hover:bg-primary/25",children:[(0,t.jsx)(l,{size:16})," Kalender abonnieren"]}),f.data.http_url&&(0,t.jsx)("button",{type:"button",className:"inline-flex h-10 items-center gap-2 rounded-lg border border-border bg-elevated px-3 text-sm font-semibold text-slate-200 transition hover:bg-hover",onClick:async()=>{navigator.clipboard&&await navigator.clipboard.writeText(f.data.http_url)},children:"Link kopieren"}),(0,t.jsxs)("button",{type:"button",title:"Neuen Kalender-Link erzeugen; der bisherige Link wird ungültig.",className:"inline-flex h-10 items-center gap-2 rounded-lg border border-border bg-elevated px-3 text-sm font-semibold text-slate-200 transition hover:bg-hover",disabled:N.isPending,onClick:()=>{confirm("Kalender-Link zurücksetzen? Bestehende Abonnements mit dem alten Link funktionieren danach nicht mehr.")&&N.mutate()},children:[(0,t.jsx)(u,{size:16})," Link zurücksetzen"]})]})]}),O.length?(0,t.jsx)("div",{className:"grid gap-3 md:grid-cols-2",children:O.map(e=>(0,t.jsx)(b,{reminder:e},`${e.type}-${e.title}-${e.vehicle_id}-${e.due_date??e.due_km??"na"}`))}):(0,t.jsx)(g.EmptyState,{title:"Keine fälligen Termine",icon:n})]})]})}],52683)}]);