import { Controller, Get, Param, Req, Res, Header, Query } from '@nestjs/common';
import { Request, Response } from 'express';
import { PesTrackingService } from './pes-tracking.service';

@Controller({ path: 'track', version: '1' })
export class PesTrackingController {
  constructor(private readonly trackingService: PesTrackingService) {}

  @Get('open/:trackingId')
  @Header('Content-Type', 'image/gif')
  async trackOpen(@Param('trackingId') trackingId: string, @Req() req: Request, @Res() res: Response) {
    await this.trackingService.recordEmailOpen(trackingId, req.ip, req.headers['user-agent']);

    // Return transparent 1x1 pixel
    const pixel = Buffer.from('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7', 'base64');
    return res.send(pixel);
  }

  @Get('click/:trackingId')
  async trackClick(@Param('trackingId') trackingId: string, @Query('url') originalUrl: string, @Req() req: Request, @Res() res: Response) {
    if (!originalUrl) {
      return res.status(400).send('Missing destination URL');
    }

    await this.trackingService.recordEmailClick(trackingId, originalUrl, req.ip, req.headers['user-agent']);

    return res.redirect(decodeURIComponent(originalUrl));
  }
}
