1import{g as q,a as C,c as T}from"./index-DvZkZgav.js";async function R(n,c,u,f={}){const{maxRetries:l=3,delayBetweenRetries:g=1e3,concurrentLimit:d=5}=f;if(!Array.isArray(n)||n.length===0)return;if(typeof c!="function")throw new Error("apiCallFunction must be a function");if(typeof u!="function")throw new Error("onComplete must be a function");const i=new Map,s=new Set,h=new Set;n.forEach(p=>{i.set(p.id,{item:p,attempts:0,lastError:null,status:"pending"})});for(let p=0;p<n.length;p+=d){const I=n.slice(p,p+d).map(D=>k(D.id,i,s,h,c,u,1));await Promise.allSettled(I)}await L(i,s,h,c,u,l,g,d),z(s,i,u)}async function L(n,c,u,f,l,g,d,i){let s=1;for(;s<g&&c.size>0;){const h=Array.from(c);c.clear();for(let p=0;p<h.length;p+=i){const I=h.slice(p,p+i).map(D=>k(D,n,c,u,f,l,s+1));await Promise.allSettled(I)}c.size>0&&s<g-1&&await B(d),s++}}async function k(n,c,u,f,l,g,d){const i=c.get(n);if(!(!i||f.has(n)))try{const s=await l(i.item);i.status="completed",i.lastError=null,f.add(n),g(n,null,s)}catch(s){if(console.error(`Error processing item ${n} (attempt ${d}):`,s),i.attempts=d,i.lastError=s,i.status="failed",s.message.includes("not authenticated")||s.message.includes("Missing required fields")||s.message.includes("Invalid payload")||s.message.includes("401")||s.message.includes("Unauthorized")){i.status="failed",f.add(n),g(n,s,null);return}u.add(n)}}function z(n,c,u){n.forEach(f=>{const l=c.get(f);l&&u(f,l.lastError)})}function B(n){return new Promise(c=>setTimeout(c,n))}async function U(n,c,u){const f=n.map(t=>t.formData.selectedPlatforms).flat(),l=u||{};let g=Array.isArray(n)?[...n]:[],d=null;const i=t=>{g=t(g),c(g)},s=(t,a)=>{i(m=>m.map(r=>t.includes(r.id)?{...r,generating:a,complete:r.complete}:r))},h=t=>{i(a=>a.map(m=>m.id===t?{...m,generating:!1,complete:!0}:m))},p=(t,a)=>{i(m=>m.map(r=>r.id===t?{...r,generating:!1,error:(a==null?void 0:a.message)||String(a)}:r))},M=t=>{!t||t.length===0||i(a=>[...a,...t])},I=t=>`${t}_${Date.now()}_${Math.random().toString(36).slice(2,8)}`,D=async t=>{var a,m,r,A;switch(t.type){case"campaign":{const e=t.formData||{},j={context:{timelineType:((m=(a=e.timelineType)==null?void 0:a.toLowerCase)==null?void 0:m.call(a))||"campaign",description:e.description||"",startDate:e.startDate||"",endDate:e.endDate||"",selectedPlatforms:e.selectedPlatforms||[],objective:e.objective||"",targetAudience:e.targetAudience||"",coreMessage:e.coreMessage||""},ids:{projectId:e.projectId||l.projectId||""}},w=await T("https://dimrwpvadgqrtraifgxg.supabase.co/functions/v1/generate-campaign",j)||{},E=w.campaign||null,_=w.series||[],y=w.campaignId||null;if(y)if(E){if(!_)throw new Error("Campaign generation did not return series data")}else throw new Error("Campaign generation did not return campaign data");else throw new Error("Campaign generation did not return campaignId");return{newJobs:(Array.isArray(_)?_:[]).map(v=>({id:I("series"),type:"series",name:v.title||"Series",complete:!1,generating:!1,formData:{timelineType:"series",description:v.description||"",startDate:v.startDate||"",endDate:v.endDate||"",objective:E.objective||"",targetAudience:E.target_audience||"",coreMessage:E.core_message||"",projectId:e.projectId||l.projectId||"",campaignId:y||null}})),campaignId:y}}case"series":{const e=t.formData||{},b=["description"].filter(o=>!e[o]||e[o].trim()==="");if(b.length>0)throw new Error(`Missing required fields: ${b.join(", ")}`);const w={context:{timelineType:((A=(r=e.timelineType)==null?void 0:r.toLowerCase)==null?void 0:A.call(r))||"series",description:e.description||"",startDate:e.startDate||"",endDate:e.endDate||"",objective:e.objective||"Increase engagement and brand awareness",targetAudience:e.targetAudience||"General audience",coreMessage:e.coreMessage||"Engaging content that resonates with our audience"},ids:{projectId:e.projectId||l.projectId||null,campaignId:e.campaignId||d||null}};if(!w.ids.projectId)throw new Error("Missing projectId in series generation");e.objective,e.targetAudience,e.coreMessage;const _=await T("https://dimrwpvadgqrtraifgxg.supabase.co/functions/v1/generate-series",w)||{},y=_.series||{},S=_.posts||[],v=_.interactions||[],P=_.seriesId,J=(Array.isArray(S)?S:[]).map(o=>({id:I("post"),type:"post",name:o.title||o.name||"Post",complete:!1,generating:!1,formData:{title:o.title||o.name||"",description:o.description||"",post_date:o.post_date||o.date||void 0,project_id:e.projectId||l.projectId||"",campaign_id:e.campaignId||d||"",series_id:P,publish_platforms:e.selectedPlatforms||[],objective:y.objective||"",target_audience:y.target_audience||"",core_message:y.core_message||""}})),$=(Array.isArray(v)?v:[]).map(o=>({id:I("interaction"),type:"interaction",name:o.title||o.name||"Interaction",complete:!1,generating:!1,formData:{...e,title:o.title||o.name||"",interaction_type:o.interaction_type||o.type||"comment",target_account:o.target_account||o.account||"",interaction_date:o.interaction_date||o.date||void 0,project_id:e.projectId||l.projectId||"",campaign_id:e.campaignId||d||"",series_id:P,objective:y.objective||"",target_audience:y.target_audience||"",core_message:y.core_message||""}}));return{newJobs:[...J,...$]}}case"post":{const e=t.formData||{},j=f,b={description:e.description||"",objective:e.objective||"",target_audience:e.targetAudience||e.target_audience||"",core_message:e.coreMessage||e.core_message||""},w={campaignId:e.campaignId||d||null,seriesId:e.series_id||seriesId||null,projectId:e.project_id||l.projectId||null};return await C(b,w,t.id,e.post_date||e.date||void 0,j,async()=>{}),{}}case"interaction":{const e=t.formData||{}
1,j=e.interaction_date||e.date||void 0,b={description:e.description||"",objective:e.objective||"",target_audience:e.target_audience||e.targetAudience||"",core_message:e.core_message||e.coreMessage||""},w={campaignId:e.campaign_id||e.campaignId||d||null,seriesId:e.series_id||e.seriesId||null,projectId:e.project_id||l.projectId||null};return await q(b,t.id,!0,w,j,async()=>{}),{}}default:throw new Error(`Unknown job type: ${t.type}`)}};let x=0;const F=100;for(;;){if(x++,x>F){console.error("Maximum iterations reached, stopping generation");break}const t=g.filter(a=>!a.complete&&!a.generating&&!a.error);if(t.length===0)break;s(t.map(a=>a.id),!0),await R(t,D,(a,m,r)=>{var A;if(m){p(a,m);return}h(a),(A=r==null?void 0:r.newJobs)!=null&&A.length&&M(r.newJobs),r!=null&&r.campaignId&&!d&&(d=r.campaignId)},{maxRetries:3,delayBetweenRetries:1e3,concurrentLimit:4})}if(!g.every(t=>t.complete)){const t=g.find(a=>!a.complete&&a.error);return{success:!1,error:(t==null?void 0:t.error)||"Some jobs failed"}}return{success:!0,campaignId:d||void 0}}export{U as generateTimeline,R as processItemsWithRetry};
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.