import { Request, Response, NextFunction } from 'express';
import { AvailabilityService } from '../services/AvailabilityService';
import { AvailabilityView } from '../views/AvailabilityView';

export class AvailabilityController {
  constructor(private availabilityService = new AvailabilityService()) {}

  getForEventType = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { schedule, user } = await this.availabilityService.getScheduleForEventType(
        req.userId!,
        req.params.id,
      );
      res.json(AvailabilityView.toResponse(schedule, user));
    } catch (err) {
      next(err);
    }
  };

  updateForEventType = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { schedule, user } = await this.availabilityService.updateScheduleForEventType(
        req.userId!,
        req.params.id,
        req.body,
      );
      res.json(AvailabilityView.toResponse(schedule, user));
    } catch (err) {
      next(err);
    }
  };

  copyForEventType = async (req: Request, res: Response, next: NextFunction) => {
    try {
      const { schedule, user } = await this.availabilityService.copyScheduleFromEventType(
        req.userId!,
        req.params.id,
        req.body.sourceEventTypeId,
      );
      res.json(AvailabilityView.toResponse(schedule, user));
    } catch (err) {
      next(err);
    }
  };
}
