// src/routes/admin.routes.js
// 관리자 라우트

const express = require('express');
const { body, param } = require('express-validator');
const adminController = require('../controllers/admin.controller');
const { authenticateJWT, requireAdmin } = require('../middlewares/auth.middleware');
const { validateRequest } = require('../middlewares/validation.middleware');

const router = express.Router();

// 모든 라우트에 JWT 인증 + 관리자 권한 필요
router.use(authenticateJWT);
router.use(requireAdmin);

// ===== LLM 프로바이더 관리 =====

/**
 * GET /api/v1/admin/providers
 * LLM 프로바이더 목록 조회
 */
router.get('/providers', adminController.getProviders);

/**
 * POST /api/v1/admin/providers
 * LLM 프로바이더 추가
 */
router.post(
  '/providers',
  [
    body('name')
      .trim()
      .isLength({ min: 1, max: 50 })
      .withMessage('프로바이더 이름은 1-50자 사이여야 합니다'),
    body('displayName')
      .trim()
      .isLength({ min: 1, max: 100 })
      .withMessage('표시 이름은 1-100자 사이여야 합니다'),
    body('modelName')
      .trim()
      .isLength({ min: 1, max: 100 })
      .withMessage('모델 이름은 1-100자 사이여야 합니다'),
    body('apiKey')
      .optional()
      .isString(),
    body('priority')
      .optional()
      .isInt({ min: 1, max: 100 }),
    validateRequest,
  ],
  adminController.createProvider
);

/**
 * PATCH /api/v1/admin/providers/:id
 * LLM 프로바이더 수정 (API 키 설정 포함)
 */
router.patch(
  '/providers/:id',
  [
    param('id')
      .isUUID()
      .withMessage('유효한 프로바이더 ID가 아닙니다'),
    body('apiKey')
      .optional()
      .isString(),
    body('modelName')
      .optional()
      .isString(),
    body('isActive')
      .optional()
      .isBoolean(),
    body('priority')
      .optional()
      .isInt({ min: 1, max: 100 }),
    validateRequest,
  ],
  adminController.updateProvider
);

/**
 * DELETE /api/v1/admin/providers/:id
 * LLM 프로바이더 삭제
 */
router.delete(
  '/providers/:id',
  [
    param('id')
      .isUUID()
      .withMessage('유효한 프로바이더 ID가 아닙니다'),
    validateRequest,
  ],
  adminController.deleteProvider
);

// ===== 사용자 관리 =====

/**
 * GET /api/v1/admin/users
 * 사용자 목록 조회
 */
router.get('/users', adminController.getUsers);

/**
 * PATCH /api/v1/admin/users/:id
 * 사용자 정보 수정 (역할, 상태, 플랜 등)
 */
router.patch(
  '/users/:id',
  [
    param('id')
      .isUUID()
      .withMessage('유효한 사용자 ID가 아닙니다'),
    body('role')
      .optional()
      .isIn(['user', 'admin']),
    body('status')
      .optional()
      .isIn(['active', 'inactive', 'suspended']),
    body('plan')
      .optional()
      .isIn(['free', 'basic', 'pro', 'enterprise']),
    body('monthlyTokenLimit')
      .optional()
      .isInt({ min: 0 }),
    validateRequest,
  ],
  adminController.updateUser
);

// ===== 시스템 통계 =====

/**
 * GET /api/v1/admin/stats
 * 시스템 통계 조회
 */
router.get('/stats', adminController.getStats);

/**
 * GET /api/v1/admin/usage/by-user
 * 사용자별 사용량 통계
 */
router.get('/usage/by-user', adminController.getUsageByUser);

/**
 * GET /api/v1/admin/usage/by-provider
 * 프로바이더별 사용량 통계
 */
router.get('/usage/by-provider', adminController.getUsageByProvider);

module.exports = router;
