./kaisetsu-app/src/app/api/analyze/route.ts

import { NextRequest, NextResponse } from 'next/server';
import { after } from 'next/server';
import { randomUUID } from 'crypto';
import { processJob } from '@/lib/process-job';
import { storage } from '@/lib/storage';

export const dynamic = 'force-dynamic';

interface JobStatus {
  status: 'processing' | 'completed' | 'error';
  step: string;
  progress: number;
  error?: string;
  createdAt: string;
  updatedAt: string;
}

export async function POST(request: NextRequest) {
  try {
    const body = await request.json();
    const { gcsUri, mimeType, generateNarration, tcOffset, genre } = body;

    if (!gcsUri) {
      return NextResponse.json({ error: 'gcsUri is required' }, { status: 400 });
    }

    const jobId = randomUUID();
    console.log(`Creating job ${jobId} for ${gcsUri}`);

    await storage.saveJobInput(jobId, {
      gcsUri,
      mimeType,
      generateNarration,
      tcOffset,
      genre: genre || 'variety',
    });

    const now = new Date().toISOString();
    const initialStatus: JobStatus = {
      status: 'processing',
      step: 'queued',
      progress: 0,
      createdAt: now,
      updatedAt: now,
    };
    await storage.saveJobStatus(jobId, initialStatus);

    after(async () => {
      try {
        console.log(`[${jobId}] Starting background processing...`);
        await processJob(jobId);
      } catch (err) {
        console.error(`[${jobId}] Background processing failed:`, err);
      }
    });

    return NextResponse.json({ jobId });
  } catch (error) {
    console.error('Job creation error:', error);
    return NextResponse.json(
      { error: error instanceof Error ? error.message : 'Failed to create job' },
      { status: 500 }
    );
  }
}