/**
 * {{FeatureName}} Feature Routes - Express endpoints with AppKit integration
 * @module {{projectName}}/{{featureName}}-routes
 * @file src/api/features/{{featureName}}/{{featureName}}.route.ts
 *
 * @llm-rule WHEN: Need HTTP endpoints for {{featureName}} feature with error handling and database operations
 * @llm-rule AVOID: Adding routes without asyncRoute wrapper - breaks error handling
 * @llm-rule NOTE: Auto-discovered by router.ts, exports default Express router, supports full CRUD operations
 */

import express from 'express';
import { errorClass } from '@voilajsx/appkit/error';
import { loggerClass } from '@voilajsx/appkit/logger';
import { {{featureName}}Service } from './{{featureName}}.service.js';

const router = express.Router();
const error = errorClass.get();
const logger = loggerClass.get('{{featureName}}-routes');

// GET /api/{{featureName}} - Get all {{featureName}} items
router.get('/', error.asyncRoute(async (_req, res) => {
  logger.info('GET /api/{{featureName}} request received');
  const result = await {{featureName}}Service.getAll();
  res.json(result);
}));

// POST /api/{{featureName}} - Create new {{featureName}}
router.post('/', error.asyncRoute(async (req, res) => {
  logger.info('POST /api/{{featureName}} request received', { body: req.body });
  const result = await {{featureName}}Service.create(req.body);
  res.status(201).json(result);
}));

// GET /api/{{featureName}}/:id - Get specific {{featureName}} by ID
router.get('/:id', error.asyncRoute(async (req, res) => {
  const id = req.params.id;
  logger.info('GET /api/{{featureName}}/:id request received', { id });
  const result = await {{featureName}}Service.getById(id);
  res.json(result);
}));

// PUT /api/{{featureName}}/:id - Update {{featureName}} by ID
router.put('/:id', error.asyncRoute(async (req, res) => {
  const id = req.params.id;
  logger.info('PUT /api/{{featureName}}/:id request received', { id, body: req.body });
  const result = await {{featureName}}Service.update(id, req.body);
  res.json(result);
}));

// DELETE /api/{{featureName}}/:id - Delete {{featureName}} by ID
router.delete('/:id', error.asyncRoute(async (req, res) => {
  const id = req.params.id;
  logger.info('DELETE /api/{{featureName}}/:id request received', { id });
  await {{featureName}}Service.delete(id);
  res.status(200).json({ message: 'Deleted successfully' });
}));

export default router;