const router = require('express').Router();
const { authMiddleware, requireRole } = require('../middleware/auth');
const validate = require('../middleware/validate');
const ctrl = require('../controllers/assignmentController');

const MODES = ['exam', 'practice', 'repeat', 'ct'];

const createSchema = { body: {
  title:        { type: 'string', required: true, minLen: 1, maxLen: 200 },
  subject_slug: { type: 'string', maxLen: 100 },
  mode:         { type: 'string', oneOf: MODES },
  count:        { type: 'number', min: 1, max: 200 },
  deadline:     { type: 'string', maxLen: 30 },
}};

const updateSchema = { body: {
  title:        { type: 'string', required: true, minLen: 1, maxLen: 200 },
  subject_slug: { type: 'string', maxLen: 100 },
  mode:         { type: 'string', oneOf: MODES },
  count:        { type: 'number', min: 1, max: 200 },
  deadline:     { type: 'string', maxLen: 30 },
}};

const directSchema = { body: {
  title:         { type: 'string', required: true, minLen: 1, maxLen: 200 },
  subject_slug:  { type: 'string', maxLen: 100 },
  mode:          { type: 'string', oneOf: MODES },
  count:         { type: 'number', min: 1, max: 200 },
  deadline:      { type: 'string', maxLen: 30 },
  student_email: { type: 'string', maxLen: 255 },
}};

const bulkSchema = { body: {
  title:     { type: 'string', required: true, minLen: 1, maxLen: 200 },
  class_ids: { type: 'array',  required: true },
  mode:      { type: 'string', oneOf: MODES },
  count:     { type: 'number', min: 1, max: 200 },
}};

router.use(authMiddleware);

router.get('/my',               ctrl.myAssignments);
router.get('/teacher',          requireRole('teacher','admin'), ctrl.teacherAssignments);
router.get('/templates',        requireRole('teacher','admin'), ctrl.listTemplates);
router.post('/templates',       requireRole('teacher','admin'), ctrl.saveTemplate);
router.delete('/templates/:id', requireRole('teacher','admin'), ctrl.deleteTemplate);
router.post('/bulk',            requireRole('teacher','admin'), validate(bulkSchema),   ctrl.bulkCreateAssignment);
router.post('/',                requireRole('teacher','admin'), validate(directSchema), ctrl.createDirectAssignment);
router.post('/:id/start',       ctrl.startAssignment);
router.get('/:id/results',                        requireRole('teacher','admin'), ctrl.assignmentResults);
router.get('/:id/question-stats',                 requireRole('teacher','admin'), ctrl.assignmentQuestionStats);
router.get('/:id/sessions/:session_id/review',    requireRole('teacher','admin'), ctrl.assignmentSessionReview);
router.put('/:id',              requireRole('teacher','admin'), validate(updateSchema), ctrl.updateAssignment);
router.delete('/:id',           requireRole('teacher','admin'), ctrl.deleteAssignment);

module.exports = router;
