import { ICampaignDoc } from '@/modules/campaign/campaign.interface';

export const campaignSchedule = async (campaign: ICampaignDoc, progress): Promise<void> => {
  try {
    const spreadDays = campaign.spreadDuration || 7; // Default to 7 days
    const totalLeads = progress.totalLeads;
    const processedCount = progress.processedLeads.length;

    // Calculate how many days passed since campaign start
    const startDate = new Date(progress.startDate);
    const now = new Date();
    const daysPassed = Math.floor((now.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24));

    // Leads per day
    const leadsPerDay = Math.ceil(totalLeads / spreadDays);
    const targetProcessedCount = Math.min((daysPassed + 1) * leadsPerDay, totalLeads);
    const leadsToProcessNow = targetProcessedCount - processedCount;

    if (leadsToProcessNow <= 0) {
      console.log(
        `Campaign ${campaign._id}: No leads to process today. Already processed ${processedCount}/${totalLeads}`,
      );
      return;
    }

    // Get leads for this batch
    const batchLeads = progress.pendingLeads.slice(0, leadsToProcessNow);

    console.log(
      `Campaign ${campaign._id}: Processing ${batchLeads.length} leads (Day ${daysPassed + 1}/${spreadDays})`,
    );

    // Process each lead (replace with actual channel sending)
    for (const leadId of batchLeads) {
      console.log(`Sending to lead: ${leadId}`);
      progress.processedLeads.push(leadId);
    }

    // Remove processed leads from pending
    progress.pendingLeads = progress.pendingLeads.filter(
      (id: string) => !batchLeads.includes(id),
    );

    progress.lastProcessedDate = now;

    // Campaign completion check
    if (progress.pendingLeads.length === 0) {
      progress.completedDate = now;
    //   campaign.status = 'completed';
      console.log(`Campaign ${campaign._id} completed. All ${totalLeads} leads processed.`);
    } else {
      campaign.status = 'running';
    }

    await campaign.save();
    await progress.save();

    console.log(
      `Campaign ${campaign._id}: Processed ${batchLeads.length} leads. Total: ${progress.processedLeads.length}/${totalLeads}`,
    );
  } catch (error) {
    console.error(`Error in spread strategy for campaign ${campaign._id}:`, error);
    throw error;
  }
};


// Array of lead IDs that have been processed
// processedLeads: string[]; 
//   pendingLeads: string[];

// processedLeads: {
//     type: [String],
//     default: [],
//   },
//   pendingLeads: {
//     type: [String],
//     default: [],
//   },