import { NextRequest, NextResponse } from 'next/server';
import { EvaluationService, ProjectService, ProjectFileService, ProjectWebsiteService } from '@/lib/services/database';
import { unlink } from 'fs/promises';
import { join } from 'path';

export async function DELETE(
  request: NextRequest,
  { params }: { params: { id: string } }
) {
  try {
    const evaluationId = parseInt(params.id);
    
    if (isNaN(evaluationId)) {
      return NextResponse.json(
        { success: false, error: '無效的評審ID' },
        { status: 400 }
      );
    }

    console.log(`🗑️ 開始刪除評審記錄: ID=${evaluationId}`);

    // 獲取評審記錄以找到對應的專案
    const evaluation = await EvaluationService.findById(evaluationId);
    if (!evaluation) {
      return NextResponse.json(
        { success: false, error: '找不到指定的評審記錄' },
        { status: 404 }
      );
    }

    const projectId = evaluation.project_id;
    console.log(`📋 找到對應專案: ID=${projectId}`);

    // 獲取專案信息
    const project = await ProjectService.findById(projectId);
    if (!project) {
      return NextResponse.json(
        { success: false, error: '找不到對應的專案' },
        { status: 404 }
      );
    }

    // 獲取專案文件列表
    const projectFiles = await ProjectFileService.findByProjectId(projectId);
    console.log(`📁 找到 ${projectFiles.length} 個專案文件`);

    // 開始事務性刪除
    try {
      // 1. 刪除評審相關數據（這些會因為外鍵約束自動刪除）
      // - evaluation_scores (CASCADE)
      // - evaluation_feedback (CASCADE)
      await EvaluationService.delete(evaluationId);
      console.log(`✅ 已刪除評審記錄: ID=${evaluationId}`);

      // 2. 刪除專案網站記錄
      const projectWebsites = await ProjectWebsiteService.findByProjectId(projectId);
      for (const website of projectWebsites) {
        await ProjectWebsiteService.delete(website.id);
      }
      console.log(`✅ 已刪除 ${projectWebsites.length} 個專案網站記錄`);

      // 3. 刪除專案文件記錄和實際文件
      for (const file of projectFiles) {
        try {
          // 刪除實際文件
          const filePath = join(process.cwd(), file.file_path);
          await unlink(filePath);
          console.log(`🗑️ 已刪除文件: ${file.original_name}`);
        } catch (fileError) {
          console.warn(`⚠️ 刪除文件失敗: ${file.original_name}`, fileError);
          // 繼續刪除其他文件，不中斷整個流程
        }
        
        // 刪除文件記錄
        await ProjectFileService.delete(file.id);
      }
      console.log(`✅ 已刪除 ${projectFiles.length} 個專案文件記錄`);

      // 4. 刪除專案記錄
      await ProjectService.delete(projectId);
      console.log(`✅ 已刪除專案記錄: ID=${projectId}`);

      console.log(`🎉 成功刪除評審報告: 專案=${project.title}`);

      return NextResponse.json({
        success: true,
        message: '評審報告已成功刪除',
        data: {
          projectId: projectId,
          projectTitle: project.title,
          deletedFiles: projectFiles.length,
          deletedWebsites: projectWebsites.length
        }
      });

    } catch (deleteError) {
      console.error('❌ 刪除過程中發生錯誤:', deleteError);
      return NextResponse.json(
        { 
          success: false, 
          error: '刪除過程中發生錯誤，請稍後再試' 
        },
        { status: 500 }
      );
    }

  } catch (error) {
    console.error('❌ 刪除評審記錄失敗:', error);
    return NextResponse.json(
      { success: false, error: '刪除評審記錄失敗' },
      { status: 500 }
    );
  }
}
