import { NextResponse } from "next/server";
import { getDbPool } from "@/db";
import { getSession } from "@/lib/auth";
import { canOperateCapital, resolveInspectionTenant } from "@/lib/authorization";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

export async function GET(request: Request, { params }: { params: Promise<{ externalId: string }> }) {
  try {
    const session = await getSession();
    if (!session) return NextResponse.json({ error: "Faça login para acessar a vistoria." }, { status: 401 });
    if (!canOperateCapital(session)) return NextResponse.json({ error: "Esta área é exclusiva da operação Capital." }, { status: 403 });
    const { externalId } = await params;
    const tenantId = await resolveInspectionTenant(session, new URL(request.url).searchParams.get("tenantId"));
    if (!tenantId) return NextResponse.json({ error: "Cliente da vistoria não encontrado ou inativo." }, { status: 404 });
    const db = getDbPool();
    const [rows] = await db.execute(
      `SELECT id, external_id, vehicle_type, plate, chassis, vehicle_description, model_year,
              responsible_name, responsible_phone, responsible_email, status, risk_score, rules_version, inspection_cycle, created_at, completed_at
       FROM inspections WHERE tenant_id = ? AND external_id = ? LIMIT 1`,
      [tenantId, externalId],
    );
    const inspection = (rows as Record<string, unknown>[])[0];
    if (!inspection) return NextResponse.json({ error: "Vistoria não encontrada." }, { status: 404 });

    const inspectionId = String(inspection.id);
    const [photos] = await db.execute(
      `SELECT p.id, p.category_code, p.latitude, p.longitude, p.ai_status, p.ai_quality_score, p.created_at,
              a.provider AS analysis_provider, a.status AS analysis_status, a.confidence AS analysis_confidence,
              a.summary AS analysis_summary, a.findings AS analysis_findings, a.requires_human AS analysis_requires_human,
              a.ocr_plate, a.plate_match, a.ocr_chassis, a.chassis_match,
              c.comment AS human_comment, c.analyst_name AS comment_analyst_name, c.updated_at AS comment_updated_at,
              m.assessment AS manual_assessment, m.damage_location AS manual_damage_location,
              m.comments AS manual_comments, m.analyst_name AS manual_analyst_name
       FROM inspection_photos p
       LEFT JOIN inspection_photo_analyses a ON a.inspection_photo_id = p.id
       LEFT JOIN inspection_photo_comments c ON c.inspection_photo_id = p.id AND c.analyst_name = ?
       LEFT JOIN inspection_photo_manual_assessments m ON m.inspection_photo_id = p.id
       WHERE p.inspection_id = ? AND p.inspection_cycle = ?
         AND p.ai_status <> 'retriage' AND COALESCE(a.status, '') <> 'failed'
       ORDER BY p.created_at ASC`,
      [session.name, inspectionId, Number(inspection.inspection_cycle || 1)],
    );
    const [reviews] = await db.execute(
      `SELECT analyst_name, review_status, decision, comments, confirmed_findings, discarded_findings,
              reason, rules_version, requested_at, completed_at
       FROM inspection_reviews WHERE inspection_id = ? ORDER BY requested_at DESC LIMIT 1`,
      [inspectionId],
    );
    const [evaluations] = await db.execute(
      "SELECT rule_code, rule_name, points, action, created_at FROM inspection_rule_evaluations WHERE inspection_id = ? ORDER BY points DESC, created_at ASC",
      [inspectionId],
    );
    return NextResponse.json({ inspection, photos, review: (reviews as Record<string, unknown>[])[0] ?? null, evaluations, currentAnalyst: session.name, tenantId });
  } catch (error) {
    console.error("Erro ao consultar detalhe da vistoria", error);
    return NextResponse.json({ error: "Não foi possível carregar a vistoria." }, { status: 500 });
  }
}
