// src/routes/chat.routes.js
// 채팅 API 라우트 (OpenAI 호환)

const express = require('express');
const { body } = require('express-validator');
const chatController = require('../controllers/chat.controller');
const { authenticateAny } = require('../middlewares/auth.middleware');
const { validateRequest } = require('../middlewares/validation.middleware');
const { usageLogger } = require('../middlewares/usage-logger.middleware');

const router = express.Router();

/**
 * POST /api/v1/chat/completions
 * 채팅 완성 API (OpenAI 호환)
 * 
 * 인증: Bearer API_KEY 또는 JWT 토큰
 */
router.post(
  '/completions',
  authenticateAny,
  [
    body('model')
      .optional()
      .isString()
      .withMessage('모델은 문자열이어야 합니다'),
    body('messages')
      .isArray({ min: 1 })
      .withMessage('메시지 배열이 필요합니다'),
    body('messages.*.role')
      .isIn(['system', 'user', 'assistant'])
      .withMessage('메시지 역할은 system, user, assistant 중 하나여야 합니다'),
    body('messages.*.content')
      .isString()
      .notEmpty()
      .withMessage('메시지 내용이 필요합니다'),
    body('temperature')
      .optional()
      .isFloat({ min: 0, max: 2 })
      .withMessage('온도는 0-2 사이여야 합니다'),
    body('max_tokens')
      .optional()
      .isInt({ min: 1, max: 128000 })
      .withMessage('최대 토큰은 1-128000 사이여야 합니다'),
    body('stream')
      .optional()
      .isBoolean()
      .withMessage('스트림은 불리언이어야 합니다'),
    validateRequest,
  ],
  usageLogger,
  chatController.completions
);

module.exports = router;
