import express from 'express';
import path from 'path';
import { authenticate, authorize, requireBotPermission } from '../middlewares/auth';
import {
  getAllBots,
  getBotById,
  getBotByNamePublic,
  createBot,
  updateBot,
  deleteBot,
  getUsedAgentIds,
  getUserBots,
  toggleBotActivation,
} from '../controllers/botController';
import { uploadBotImage, debugUpload } from '../middlewares/upload';
//
import logger from '../utils/logger';

const router = express.Router();

// Serve bot images safely via static middleware (avoids double-send on abort)
router.use('/image', express.static(path.join(__dirname, '../../uploads/bot-images')));

// TEST ROUTE - protect for admins/teachers only or disable in production
router.post('/test-upload', 
  authenticate,
  authorize('ADMIN', 'TEACHER'),
  uploadBotImage,
  debugUpload,
  (req: express.Request, res: express.Response) => {
    console.log('🔍 Test upload route hit');
    console.log('📝 Body info:', req.body);
    res.json({ success: true, message: 'Test upload successful', body: req.body });
  }
);

// Get all bots (authenticated users)
router.get('/', authenticate, getAllBots);

// Get user's accessible bots (authenticated users) - MUST be before /:id
router.get('/accessible', authenticate, getUserBots);

// Get used agent IDs (admin/teacher only)
router.get('/used-agent-ids', authenticate, authorize('ADMIN', 'TEACHER'), getUsedAgentIds);

// Get bot by name (public endpoint for chat)
router.get('/name/:botName', getBotByNamePublic);

// Get bot by ID (public endpoint) - MUST be last
router.get('/:id', getBotById);

// Create new bot (admin, or teacher with canCreateBots)
router.post('/',
  authenticate,
  requireBotPermission('canCreateBots'),
  uploadBotImage,
  debugUpload,
  createBot
);

// Update bot (admin, or teacher with canEditBots)
router.put(
  '/:id',
  authenticate,
  requireBotPermission('canEditBots'),
  uploadBotImage,
  debugUpload,
  updateBot
);

// Toggle bot activation with connection validation (admin, or teacher with canEditBots)
router.patch('/:id/toggle-activation', authenticate, requireBotPermission('canEditBots'), toggleBotActivation);

// Delete bot (admin, or teacher with canEditBots)
router.delete('/:id', authenticate, requireBotPermission('canEditBots'), deleteBot);

export default router;

