import { getInterviewQuizDetailsByToken } from '../controllers/interviewQuizController';
import { Router } from "express";
import {
  createQuiz,
  getAllQuizzes,
  getQuiz,
  updateQuiz,
  deleteQuiz,
  getActiveQuizzes,
  getQuizForUser,
  attemptQuiz,
} from "../controllers/quizController";
import {
  submitQuiz,
  getMyResults,
  getQuizResults,
  getSubmission,
  exportResults,
} from "../controllers/quizResultController";
import protectAdmin from "../middlewares/protectAdmin";
import protectUser from "../middlewares/protectUser";
import { createInterviewQuizAssignment } from '../controllers/interviewQuizController';
import { startInterviewQuizByToken } from '../controllers/interviewQuizController';
import { submitInterviewQuizByToken } from '../controllers/interviewQuizController';

const router = Router();

// Candidate: View interview quiz details before starting (no auth)
router.get('/interview/quiz/details/:token', getInterviewQuizDetailsByToken);
// User: static routes — must be before /:id to avoid route conflict
router.get("/active", protectUser, getActiveQuizzes);
router.get("/my-results", protectUser, getMyResults);

// Admin: quiz CRUD
router.get("/", protectAdmin, getAllQuizzes);
router.post("/", protectAdmin, createQuiz);
router.get("/:id", protectAdmin, getQuiz);
router.put("/:id", protectAdmin, updateQuiz);
router.delete("/:id", protectAdmin, deleteQuiz);

// User: take + attempt + submit
router.get("/:id/take", protectUser, getQuizForUser);
router.get("/:id/attempt", protectUser, attemptQuiz);
router.post("/:id/submit", protectUser, submitQuiz);

// Admin: results
router.get("/:id/results", protectAdmin, getQuizResults);
router.get("/:id/results/export", protectAdmin, exportResults);
router.get("/:quizId/submissions/:userId", protectAdmin, getSubmission);

// Admin: Create and send interview quiz assignment (direct link for candidate)
router.post('/interview/quiz/assign', protectAdmin, createInterviewQuizAssignment);

// Candidate: Start interview quiz via secure token (no auth)
router.get('/interview/quiz/attempt/:token', startInterviewQuizByToken);

// Candidate: Submit interview quiz answers via secure token (no auth)
router.post('/interview/quiz/attempt/:token/submit', submitInterviewQuizByToken);

export default router;
