1import{o as e,d as s,s as t,j as a,F as i}from"./index-BSIgsikq.js";import{r}from"./react-vendor-B8XeDuRh.js";import{B as l}from"./Button-DTsKzcpl.js";import{I as n}from"./Input-Cc7vURWv.js";import{C as d}from"./Card-DN5R0sYi.js";import{P as c}from"./plus-CWJ2u64Z.js";import{T as o}from"./trash-2-BYSRJ6P4.js";import{S as u}from"./send-DLDjIysT.js";import"./supabase-vendor-CqSCB733.js";import"./analytics-vendor-CQ66ECAF.js";function m(){const{requestId:m}=e(),x=s(),[p,h]=r.useState(!0),[j,y]=r.useState(!1),[g,f]=r.useState(null),[v,b]=r.useState([{id:"1",description:"",quantity:1,unit_price:0,total:0}]),[N,_]=r.useState(""),[q,w]=r.useState(30);r.useEffect(()=>{m&&S()},[m]);const S=async()=>{try{h(!0);const{data:e,error:s}=await t.from("quote_requests_new").select("*").eq("id",m).maybeSingle();if(s)throw s;if(!e)return void x("/admin/quotes");if(f(e),e.deliverables&&e.deliverables.length>0){const s=e.deliverables.map((e,s)=>({id:String(s+1),description:e,quantity:1,unit_price:0,total:0}));b(s)}}catch(e){}finally{h(!1)}},k=(e,s,t)=>{b(v.map(a=>{if(a.id===e){const e={...a,[s]:t};return"quantity"!==s&&"unit_price"!==s||(e.total=e.quantity*e.unit_price),e}return a}))},C=()=>v.reduce((e,s)=>e+s.total,0),F=()=>.1*C(),Q=()=>C()+F();return p?a.jsx("div",{className:"flex items-center justify-center h-64",children:a.jsx("div",{className:"animate-spin rounded-full h-12 w-12 border-b-2 border-blue-600"})}):g?a.jsxs("div",{className:"max-w-6xl mx-auto px-4 py-8",children:[a.jsxs("div",{className:"mb-8",children:[a.jsx("h1",{className:"text-3xl font-bold text-gray-900 mb-2",children:"Create Quote"}),a.jsxs("p",{className:"text-gray-600",children:["Build a detailed quote for: ",g.project_title]})]}),a.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-6",children:[a.jsxs("div",{className:"lg:col-span-2 space-y-6",children:[a.jsxs(d,{className:"p-6",children:[a.jsxs("div",{className:"flex items-center justify-between mb-6",children:[a.jsxs("h2",{className:"text-xl font-semibold text-gray-900 flex items-center",children:[a.jsx(i,{className:"w-5 h-5 mr-2 text-blue-600"}),"Line Items"]}),a.jsxs(l,{onClick:()=>{const e=String(v.length+1);b([...v,{id:e,description:"",quantity:1,unit_price:0,total:0}])},variant:"outline",size:"sm",children:[a.jsx(c,{className:"w-4 h-4 mr-1"}),"Add Item"]})]}),a.jsx("div",{className:"space-y-4",children:v.map((e,s)=>a.jsxs("div",{className:"grid grid-cols-12 gap-3 items-start",children:[a.jsx("div",{className:"col-span-5",children:a.jsx(n,{type:"text",placeholder:"Description",value:e.description,onChange:s=>k(e.id,"description",s.target.value)})}),a.jsx("div",{className:"col-span-2",children:a.jsx(n,{type:"number",placeholder:"Qty",value:e.quantity,onChange:s=>k(e.id,"quantity",parseInt(s.target.value)||0),min:"1"})}),a.jsx("div",{className:"col-span-2",children:a.jsx(n,{type:"number",placeholder:"Price",value:e.unit_price,onChange:s=>k(e.id,"unit_price",parseFloat(s.target.value)||0),min:"0",step:"0.01"})}),a.jsx("div",{className:"col-span-2",children:a.jsx(n,{type:"text",value:`$${e.total.toFixed(2)}`,readOnly:!0,className:"bg-gray-50"})}),a.jsx("div",{className:"col-span-1",children:a.jsx(l,{onClick:()=>{return s=e.id,void(v.length>1&&b(v.filter(e=>e.id!==s)));var s},variant:"outline",size:"sm",disabled:1===v.length,className:"w-full",children:a.jsx(o,{className:"w-4 h-4"})})})]},e.id))}),a.jsx("div",{className:"mt-6 pt-6 border-t border-gray-200",children:a.jsxs("div",{className:"space-y-2 text-right",children:[a.jsxs("div",{className:"flex justify-between text-gray-700",children:[a.jsx("span",{children:"Subtotal:"}),a.jsxs("span",{children:["$",C().toFixed(2)]})]}),a.jsxs("div",{className:"flex justify-between text-gray-700",children:[a.jsx("span",{children:"Tax (10%):"}),a.jsxs("span",{children:["$",F().toFixed(2)]})]}),a.jsxs("div",{className:"flex justify-between text-xl font-bold text-gray-900 pt-2 border-t",children:[a.jsx("span",{children:"Total:"}),a.jsxs("span",{children:["$",Q().toFixed(2)]})]})]})})]}),a.jsxs(d,{className:"p-6",children:[a.jsx("h2",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Additional Details"}),a.jsxs("div",{className:"space-y-4",children:[a.jsxs("div",{children:[a.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-2",children:"Quote Valid For (days)"}),a.jsx(n,{type:"number",value:q,onChange:e=>w(parseInt(e.target.value)||30),min:"1",max:"365"})]}),a.jsxs("div",{children:[a.jsx("label",{className:"block text-sm font-medium text-gray-700 mb-2",children:"Notes"}),a.jsx("textarea",{value:N,onChange:e=>_(e.target.value),placeholder:"Add any additional notes, terms, or conditions...",rows:6,className:"w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent"})]})]})]})]}),a.jsxs("div",{className:"space-y-6",children:[a.jsxs(d,{className:"p-6",children:[a.jsx("h3",{className:"font-semibold text-gray-900 mb-4",children:"Request Details"}),a.jsxs("div",{className:"space-y-3 text-sm",children:[a.jsxs("div",{children:[a.jsx("span",{className:"text-gray-600",children:"Project:"}),a.jsx("p",{className:"font-medium text-gray-900",children:g.project_title})]}),a.jsxs("div",{children:[a.jsx("span",{className:"text-gray-600",children:"Engagement:"}),a.jsx("p",{className:"font-medium text-gray-900 capitalize",children:g.engagement_type.replace("_"," ")})]}),g.budget_range&&a.jsxs("div",{children:[a.jsx("span",{className:"text-gray-600",children:"Budget Range:"}),a.jsx("p",{className:"font-medium text-gray-900",children:g.budget_range})]}),g.duration_weeks&&a.jsxs("div",{children:[a.jsx("span",{className:"text-gray-600",children:"Duration:"}),a.jsxs("p",{className:"font-medium text-gray-900",children:[g.duration_weeks," weeks"]})]}),g.required_skills.length>0&&a.jsxs("div",{children:[a.jsx("span",{className:"text-gray-600",children:"Skills:"}),a.jsx("div",{className:"flex flex-wrap gap-1 mt-1",children:g.required_skills.map(e=>a.jsx("span",{className:"px-2 py-1 bg-blue-100 text-blue-800 text-xs rounded",children:e},e))})]})]})]}),a.jsxs("div",{className:"space-y-3",children:[a.jsxs(l,{onClick:async()=>{try{y(!0);const{data:e}=await t.rpc("generate_quote_number"),s=e||`QUOTE-${Date.now()}`,a=v.map(e=>({description:e.description,quantity:e.quantity,unit_price:e.unit_price,total:e.total})),{data:{user:i}}=await t.auth.getUser(),{error:r}=await t.from("quotes").insert({quote_request_id:m,quote_number:s,total_amount:Q(),breakdown:a,validity_days:q,status:"sent",notes:N,created_by:null==i?void 0:i.id,sent_at:(new Date).toISOString()});if(r)throw r;const{error:l}=await t.from("quote_requests_new").update({status:"quoted"}).eq("id",m);if(l)throw l;x("/admin/quotes",{state:{message:"Quote sent successfully!"}})}catch(e){alert("Failed to send quote. Please try again.")}finally{y(!1)}},disabled:j||v.some(e=>!e.description||0===e.unit_price),className:"w-full",children:[a.jsx(u,{className:"w-4 h-4 mr-2"}),j?"Sending...":"Send Quote"]}),a.jsx(l,{onClick:async()=>{try{y(!0);const{data:e}=await t.rpc("generate_quote_number"),s=e||`QUOTE-${Date.now()}`,a=v.map(e=>({description:e.description,quantity:e.quantity,unit_price:e.unit_price,total:e.total})),{data:{user:i}}=await t.auth.getUser(),{error:r}=await t.from("quotes").insert({quote_request_id:m,quote_number:s,total_amount:Q(),breakdown:a,validity_days:q,status:"draft",notes:N,created_by:null==i?void 0:i.id});if(r)throw r;x("/admin/quotes",{state:{message:"Quote saved as draft successfully!"}})}catch(e){alert("Failed to save quote. Please try again.")}finally{y(!1)}},variant:"outline",disabled:j,className:"w-full",children:j?"Saving...":"Save as Draft"}),a.jsx(l,{onClick:()=>x("/admin/quotes"),variant:"outline",className:"w-full",children:"Cancel"})]})]})]})]}):a.jsx("div",{className:"p-6",children:a.jsx("p",{className:"text-gray-600",children:"Quote request not found."})})}export{m as QuoteBuilderPage};
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.