import { NextResponse } from 'next/server';
import { atsPool } from '@/lib/db/mysql';
import { getRecruiterFromRequest } from '@/lib/auth/recruiter';

export async function GET(
  req: Request,
  { params }: { params: { jobid: string } }
) {
  try {
    const recruiter = await getRecruiterFromRequest();
    if (!recruiter) {
      return NextResponse.json({ error: 'unauthorized' }, { status: 401 });
    }

    const jobid = Number(params.jobid);
    if (!jobid) {
      return NextResponse.json({ error: 'invalid_job_id' }, { status: 400 });
    }

    const [[job]]: any = await atsPool.query(
      `
      SELECT id, title, created_at
      FROM jobs
      WHERE id = ?
        AND created_by = ?
      LIMIT 1
      `,
      [jobid, recruiter.id]
    );

    if (!job) {
      return NextResponse.json({ error: 'job_not_found' }, { status: 404 });
    }

    const [[stats]]: any = await atsPool.query(
      `
      SELECT
        COUNT(mc.id)                    AS total,
        ROUND(AVG(mc.ats_score), 2)     AS avgScore,
        SUM(mc.status = 'accepted')     AS accepted,
        SUM(mc.status = 'rejected')     AS rejected,
        SUM(mc.status = 'pending')      AS pending,
        SUM(mc.status = 'shortlisted')  AS shortlisted
      FROM matches m
      JOIN match_candidates mc ON mc.match_id = m.id
      WHERE m.job_id = ?
      `,
      [jobid]
    );

    const [candidates]: any = await atsPool.query(
      `
      SELECT
        c.id                 AS candidateId,
        c.first_name,
        c.last_name,
        mc.ats_score         AS score,
        mc.status,
        ar.score             AS analysisScore,
        ar.result_json       AS analysis,
        ar.created_at        AS analyzedAt
      FROM matches m
      JOIN match_candidates mc ON mc.match_id = m.id
      JOIN candidates c ON c.id = mc.candidate_id
      LEFT JOIN analysis_results ar
        ON ar.candidate_id = c.id
       AND ar.created_at = (
         SELECT MAX(ar2.created_at)
         FROM analysis_results ar2
         WHERE ar2.candidate_id = c.id
       )
      WHERE m.job_id = ?
      ORDER BY mc.ats_score DESC
      `,
      [jobid]
    );

    return NextResponse.json({
      job,
      stats: {
        total: stats?.total ?? 0,
        avgScore: stats?.avgScore ?? 0,
        accepted: stats?.accepted ?? 0,
        rejected: stats?.rejected ?? 0,
        pending: stats?.pending ?? 0,
        shortlisted: stats?.shortlisted ?? 0,
      },
      candidates,
    });
  } catch (error) {
    console.error('[ATS MATCHES]', error);
    return NextResponse.json(
      { error: 'internal_server_error' },
      { status: 500 }
    );
  }
}
