1import{u as J,r as c,d as A,j as e}from"./index-BtGFp6U-.js";import{u as K}from"./useAdminCheck-MU0jS-vQ.js";import{C as x,b as w,c as k,d as y,a as Q}from"./card-Bv3a_rxh.js";import{B as X}from"./button-CpP5hguP.js";import{I as Y}from"./input-BvXG7xgz.js";import{B as b}from"./badge-bQyvWIV0.js";import{S as R,a as F,b as D,c as M,d as T}from"./select-BAX-moZP.js";import{T as Z,a as $,b as C,c as n,d as ee,e as r}from"./table-BXtE5J7l.js";import{A as se}from"./arrow-left--dLolqNV.js";import{T as te}from"./trending-up-IDzdTbAA.js";import{T as ae}from"./trending-down-UUjQ7GLy.js";import"./useImpersonation-DnBWmLwT.js";import"./queryTimeout-DjX5RWJs.js";import"./roleCache-CPULw5mK.js";import"./index-BdQq_4o_.js";import"./index-Cq0EMQb1.js";import"./Combination-CcwfQTMS.js";import"./index-Cf0XRMqp.js";import"./chevron-down-w2YyRUlg.js";import"./check-Lktdb7n7.js";const P=[{key:"6",months:6,weeks:26,label:"6 month"},{key:"12",months:12,weeks:52,label:"12 month"},{key:"18",months:18,weeks:78,label:"18 month"}],d=o=>o.toLocaleString("en-AU",{style:"currency",currency:"AUD",maximumFractionDigits:0}),re=o=>o.toLocaleString("en-AU",{style:"currency",currency:"AUD",minimumFractionDigits:2,maximumFractionDigits:2});function Te(){const{isAdmin:o,isLoading:L}=K(),B=J(),[h,E]=c.useState([]),[u,U]=c.useState(""),[p,I]=c.useState("all"),[m,H]=c.useState("12");c.useEffect(()=>{o&&V()},[o]);const V=async()=>{const{data:s}=await A.from("dealer_bike_models").select("*").is("deleted_at",null).order("created_at",{ascending:!1}),t=[...new Set((s||[]).map(l=>l.dealer_user_id))],{data:a}=await A.from("profiles").select("user_id, email, company_name").in("user_id",t);E((s||[]).map(l=>{const i=a==null?void 0:a.find(g=>g.user_id===l.dealer_user_id);return{...l,dealer_company:(i==null?void 0:i.company_name)||"Unknown",dealer_email:(i==null?void 0:i.email)||""}}))},W=c.useMemo(()=>{const s=new Map;return h.forEach(t=>s.set(t.dealer_user_id,t.dealer_company||"Unknown")),Array.from(s,([t,a])=>({id:t,company:a}))},[h]),j=c.useMemo(()=>h.filter(s=>{if(p!=="all"&&s.dealer_user_id!==p)return!1;if(u){const t=u.toLowerCase();if(!s.name.toLowerCase().includes(t)&&!(s.manufacturer||"").toLowerCase().includes(t)&&!(s.dealer_company||"").toLowerCase().includes(t))return!1}return!0}),[h,u,p]),S=s=>{const t=P.find(G=>G.key===m),l=(m==="6"?s.rate_6_month:m==="12"?s.rate_12_month:s.rate_18_month)||0,i=s.weekly_service_fee||0,g=l+i,q=s.setup_fee||0,v=g*t.weeks+q,N=s.wholesale_price,_=v-N,O=v>0?_/v*100:0,z=N>0?_/N*100:0;return{weeklyRate:l,weeklyTotal:g,totalRevenue:v,cost:N,profit:_,marginPct:O,markupPct:z,weeks:t.weeks}},f=c.useMemo(()=>{let s=0,t=0;return j.forEach(a=>{const l=S(a);s+=l.totalRevenue,t+=l.cost}),{revenue:s,cost:t,profit:s-t,avgMargin:s>0?(s-t)/s*100:0}},[j,m]);return L?e.jsx("div",{className:"p-8",children:"Loading..."}):o?e.jsxs("div",{className:"container mx-auto py-8 px-4",children:[e.jsxs("div",{className:"mb-6 flex items-center gap-4",children:[e.jsxs(X,{variant:"ghost",onClick:()=>B("/admin"),children:[e.jsx(se,{className:"mr-2 h-4 w-4"}),"Back"]}),e.jsxs("div",{children:[e.jsx("h1",{className:"text-3xl font-bold",children:"Dealer Pricing & Margins"}),e.jsx("p",{className:"text-sm text-muted-foreground",children:"Per-bike repayment and profit breakdown. Wholesale price entered by dealer is treated as our landed cost."})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-6",children:[e.jsx(x,{children:e.jsxs(w,{className:"pb-2",children:[e.jsxs(k,{children:["Total Revenue (",m,"m, all bikes)"]}),e.jsx(y,{className:"text-2xl",children:d(f.revenue)})]})}),e.jsx(x,{children:e.jsxs(w,{className:"pb-2",children:[e.jsx(k,{children:"Total Cost (wholesale)"}),e.jsx(y,{className:"text-2xl",children:d(f.cost)})]})}),e.jsx(x,{children:e.jsxs(w,{className:"pb-2",children:[e.jsx(k,{children:"Total Profit"}),e.jsx(y,{className:"text-2xl text-primary",children:d(f.profit)})]})}),e.jsx(x,{children:e.jsxs(w,{className:"pb-2",children:[e.jsx(k,{children:"Average Margin"}),e.jsxs(y,{className:"text-2xl",children:[f.avgMargin.toFixed(1),"%"]})]})})]}),e.jsxs("div",{className:"flex flex-wrap gap-3 mb-4",children:[e.jsx(Y,{placeholder:"Search bike, manufacturer, or dealerâ¦",value:u,onChange:s=>U(s.target.value),className:"max-w-sm"}),e.jsxs(R,{value:p,onValueChange:I,children:[e.jsx(F,{className:"w-[240px]",children:e.jsx(D,{placeholder:"All dealers"})}),e.jsxs(M,{children:[e.jsx(T,{value:"all",children:"All dealers"}),W.map(s=>e.jsx(T,{value:s.id,children:s.company},s.id))]})]}),e.jsxs(R,{value:m,onValueChange:s=>H(s),children:[e.jsx(F,{className:"w-[160px]",children:e.jsx(D,{})}),e.jsx(M,{children:P.map(s=>e.jsxs(T,{value:s.key,children:[s.label," term"]},s.key))})]})]}),e.jsx(x,{children:e.jsx(Q,{className:"p-0",children:e.jsxs(Z,{children:[e.jsx($,{children:e.jsxs(C,{children:[e.jsx(n,{children:"Bike"}),e.jsx(n,{children:"Dealer"}),e.jsx(n,{className:"text-right",children:"RRP"}),e.jsx(n,{className:"text-right",children:"Wholesale (cost)"}),e.jsx(n,{className:"text-right",children:"Weekly (incl. service)"}),e.jsx(n,{className:"text-right",children:"Total Revenue"}),e.jsx(n,{className:"text-right",children:"Profit"}),e.jsx(n,{className:"text-right",children:"Margin"}),e.jsx(n,{className:"text-right",children:"Markup"}),e.jsx(n,{children:"Status"})]})}),e.jsx(ee,{children:j.length===0?e.jsx(C,{children:e.jsx(r,{colSpan:10,className:"text-center text-muted-foreground py-8",children:"No dealer bikes found"})}):j.map(s=>{const t=S(s),a=t.profit>=0;return e.jsxs(C,{children:[e.jsxs(r,{children:[e.jsx("div",{className:"font-medium",children:s.name}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s.manufacturer||"â"})]}),e.jsxs(r,{children:[e.jsx("div",{className:"text-sm",children:s.dealer_company}),e.jsx("div",{className:"text-xs text-muted-foreground",children:s.dealer_email})]}),e.jsx(r,{className:"text-right",children:d(s.rrp_price)}),e.jsx(r,{className:"text-right",children:d(s.wholesale_price)}),e.jsxs(r,{className:"text-right font-mono",children:[re(t.weeklyTotal),e.jsxs("div",{className:"text-xs text-muted-foreground",children:["à ",t.weeks," wks"]})]}),e.jsx(r,{className:"text-right font-mono",children:d(t.totalRevenue)}),e.jsx(r,{className:"text-right font-mono",children:e.jsx("span",{className:a?"text-primary font-semibold":"text-destructive font-semibold",children:d(t.profit)})}),e.jsx(r,{className:"text-right",children:e.jsxs(b,{variant:a?"default":"destructive",className:"font-mono",children:[a?e.jsx(te,{className:"h-3 w-3 mr-1"}):e.jsx(ae,{className:"h-3 w-3 mr-1"}),t.marginPct.toFixed(1),"%"]})}),e.jsxs(r,{className:"text-right text-sm font-mono text-muted-foreground",children:[t.markupPct.toFixed(0),"%"]}),e.jsx(r,{children:e.jsx(b,{variant:s.is_active?"default":"secondary",children:s.is_active?"Active":"Inactive"})})]},s.id)})})]})})}),e.jsx("p",{className:"text-xs text-muted-foreground mt-4",children:"Revenue = (weekly rate + weekly service fee) à term weeks + setup fee. Profit = revenue â dealer wholesale price. Excludes registration, stamp duty, deposits, and Rental Saver Offset."})]}):null}export{Te 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.