import { NextRequest, NextResponse } from 'next/server';
import { connectToDatabase } from '@/lib/db';
import SatsangSchedule from '@/lib/models/SatsangSchedule';
import { generateOccurrences } from '@/lib/actions/satsangs';

export async function POST(req: NextRequest) {
  try {
    const authHeader = req.headers.get('x-cron-secret');
    const systemSecret = process.env.CRON_SECRET;

    if (!systemSecret) {
      return NextResponse.json(
        { error: 'Server Configuration Error: CRON_SECRET variable is not set.' },
        { status: 500 }
      );
    }

    if (!authHeader || authHeader !== systemSecret) {
      return NextResponse.json(
        { error: 'Unauthorized invocation' },
        { status: 401 }
      );
    }

    await connectToDatabase();

    const activeSchedules = await SatsangSchedule.find({ isActive: true });
    let totalGenerated = 0;
    const failures: { scheduleId: string; error: string }[] = [];

    for (const schedule of activeSchedules) {
      try {
        const result = await generateOccurrences(schedule._id.toString());
        if (result.success) {
          totalGenerated += result.generated || 0;
        } else {
          failures.push({
            scheduleId: schedule._id.toString(),
            error: result.error || 'Unknown failure'
          });
        }
      } catch (err: any) {
        failures.push({
          scheduleId: schedule._id.toString(),
          error: err.message || 'System crash'
        });
      }
    }

    return NextResponse.json({
      success: true,
      processedSchedules: activeSchedules.length,
      generatedOccurrences: totalGenerated,
      failuresCount: failures.length,
      failures: failures.length > 0 ? failures : undefined
    });

  } catch (error: any) {
    return NextResponse.json(
      { error: 'Internal Server Error' },
      { status: 500 }
    );
  }
}

// Support GET requests as well for easy triggers from external cron services if configured
export async function GET(req: NextRequest) {
  return POST(req);
}
