import { Request, Response } from 'express';
import { ThemeService, ThemeData } from '../services/theme.service';

export class ThemeController {
  // Créer un nouveau thème
  static async createTheme(req: Request, res: Response) {
    try {
      const themeData: ThemeData = req.body;
      const theme = await ThemeService.createTheme(themeData);
      res.status(201).json(theme);
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de la création du thème' });
    }
  }

  // Récupérer tous les thèmes
  static async getAllThemes(req: Request, res: Response) {
    try {
      const themes = await ThemeService.getAllThemes();
      res.json(themes);
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de la récupération des thèmes' });
    }
  }

  // Récupérer le thème actif
  static async getActiveTheme(req: Request, res: Response) {
    try {
      const theme = await ThemeService.getActiveTheme();
      if (!theme) {
        return res.status(404).json({ error: 'Aucun thème actif trouvé' });
      }
      res.json(theme);
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de la récupération du thème actif' });
    }
  }

  // Activer un thème
  static async activateTheme(req: Request, res: Response) {
    try {
      const { themeId } = req.params;
      const theme = await ThemeService.activateTheme(themeId);
      res.json(theme);
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de l\'activation du thème' });
    }
  }

  // Mettre à jour un thème
  static async updateTheme(req: Request, res: Response) {
    try {
      const { themeId } = req.params;
      const themeData: Partial<ThemeData> = req.body;
      const theme = await ThemeService.updateTheme(themeId, themeData);
      res.json(theme);
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de la mise à jour du thème' });
    }
  }

  // Supprimer un thème
  static async deleteTheme(req: Request, res: Response) {
    try {
      const { themeId } = req.params;
      await ThemeService.deleteTheme(themeId);
      res.status(204).send();
    } catch (error) {
      res.status(500).json({ error: 'Erreur lors de la suppression du thème' });
    }
  }
} 