import { NextRequest, NextResponse } from 'next/server'
import { cronTaskRepo } from '@/lib/database/repositories/cron-task.repo'
import { taskExecutionRepo } from '@/lib/database/repositories/task-execution.repo'
import crypto from 'crypto'
import { executeTask } from '@/lib/cron/executor'

/**
 * POST /api/cron-tasks/[id]/execute
 * Triggers immediate execution of a task (e.g. "Check Now" for heartbeat).
 */
export async function POST(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  const { id } = await params

  const task = cronTaskRepo.findById(id)
  if (!task) return NextResponse.json({ error: 'Task not found' }, { status: 404 })

  const startTime = new Date().toISOString()

  try {
    const { status, result, sessionId } = await executeTask(task)

    // Record execution
    const execId = crypto.randomUUID()
    taskExecutionRepo.create({
      id: execId,
      taskId: task.id,
      taskName: task.name,
      result,
      status,
      sessionId: sessionId || '',
      executedAt: startTime,
    })

    // Update task last run
    cronTaskRepo.updateLastRun(task.id, result.slice(0, 200), startTime)

    return NextResponse.json({ status, result: result.slice(0, 500), sessionId })
  } catch (err) {
    const errorMsg = err instanceof Error ? err.message : 'Unknown error'
    return NextResponse.json({ status: 'error', result: errorMsg }, { status: 500 })
  }
}
