import { Request, Response, NextFunction } from 'express';
import { EventTypeService } from '../services/EventTypeService';
import { EventTypeView } from '../views/EventTypeView';

export class EventTypeController {
  constructor(private eventTypeService = new EventTypeService()) {}

  list = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { eventTypes, username } = await this.eventTypeService.list(req.userId!);
      res.json(EventTypeView.toList(eventTypes, username));
    } catch (err) {
      next(err);
    }
  };

  create = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { eventType, username } = await this.eventTypeService.create(req.userId!, req.body);
      res.status(201).json(EventTypeView.toHost(eventType, username));
    } catch (err) {
      next(err);
    }
  };

  update = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { eventType, username } = await this.eventTypeService.update(req.userId!, req.params.id, req.body);
      res.json(EventTypeView.toHost(eventType, username));
    } catch (err) {
      next(err);
    }
  };

  delete = async (req: Request, res: Response, next: NextFunction) => {
    try {
      await this.eventTypeService.delete(req.userId!, req.params.id);
      res.status(204).send();
    } catch (err) {
      next(err);
    }
  };
}
