import { Controller, Request, Post, Body, Get, Res, UseGuards, Param, Put, Query, Delete, Patch, Req } from '@nestjs/common';
import { ApiParam, ApiQuery, ApiTags, ApiBody, ApiConsumes } from '@nestjs/swagger';
import { toJsonResponse } from '../../common/response';

import { AdminGuard } from 'src/modules/auth/guards/admin.guard';
import { CommonGuard } from 'src/modules/auth/guards/common.guard';
import { WebhookService } from './webhook.services';

// DTO Files

@ApiTags('webhook')
@Controller('webhook')
export class WebhookController {
  constructor(private webhookService: WebhookService) { }

  @Post('stripe')
  async webhook(@Req() request: any, @Res() response: any) {
    try {
      const status = await this.webhookService.stripeWebhook(request);
      if (status) {
        return response.status(200).json();
      }
    } catch (error) {
      return response.status(200).json();
    }
  }

  @Post('comet-chat')
  async cometChatWebhook(@Req() request: any, @Res() response: any) {
    try {
      const status = await this.webhookService.cometChatWebhook(request);
      if (status) {
        return response.status(200).json();
      }
    } catch (error) {
      return response.status(200).json();
    }
  }

  @Get('whatsapp')
  verifyWebhook(@Query() query: any) {
    const VERIFY_TOKEN = process.env.WHATSAPP_VERIFY_TOKEN;
    const mode = query['hub.mode'];
    const token = query['hub.verify_token'];
    const challenge = query['hub.challenge'];

    if (mode === 'subscribe' && token === VERIFY_TOKEN) {
      return challenge; // MUST return plain string
    }

  }

  @Post('whatsapp')
  async whatsapp(@Req() request: any, @Res() response: any) {
    try {
      const status = await this.webhookService.whatsappWebhook(request);
      if (status) {
        return response.status(200).json();
      }
    } catch (error) {
      return response.status(200).json();
    }
  }
  @Post('sendgrid')
  async sendgrid(@Req() request: any, @Res() response: any) {
    try {
      console.log(request.body);
      return response.status(200).json();
    } catch (error) {
      return response.status(200).json();
    }
  }


  @Get('tiktok')
  async tiktok(@Req() request: any, @Res() response: any) {
    return response.redirect(`${process.env.FRONTEND_URL}register/influencer/steps?code=${request.query.code}`);
  }
}
