import { Body, Controller, Delete, Get, Logger, Param, Post, Query, Req, Res, UseGuards } from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
import { HostType, SendTo } from 'common/enum/HostType.enum';
import { JwtAuthGuard } from 'common/guards/jwt-auth.guard';
import { RolesGuard } from 'common/guards/roles.guard';
import { Roles } from 'common/decorators/role.decorator';
import { UserRole } from 'common/enum/UserRole.enum';
import { AuthService } from 'modules/auth/auth.service';
import { NewsletterService } from 'modules/newsletter/news-letter.service';
import { UserService } from 'modules/user/users.service';

import { ApiBearerAuth, ApiOperation } from '@nestjs/swagger';

@Controller({ path: 'admin', version: '1' })
@UseGuards(JwtAuthGuard, RolesGuard)
export class AdminController {
  private readonly logger = new Logger(AdminController.name);

  constructor(
    private readonly userService: UserService,
    private readonly newsletterService: NewsletterService,
    private readonly authService: AuthService,
  ) {}

  @Delete('newsletters/:id')
  @Roles(UserRole.ADMIN, UserRole.SUPER_ADMIN)
  async deleteNewsletter(@Param('id') id: number, @Res() res: any) {
    try {
      await this.newsletterService.deleteNewsletterLog(id);
      return res.redirect('/admin/newsletters');
    } catch {
      return res.redirect('/admin/newsletters?error=Deletion failed');
    }
  }

  @Get('logout')
  @ApiOperation({ summary: 'Admin logout' })
  @ApiBearerAuth()
  @Roles(UserRole.ADMIN, UserRole.SUPER_ADMIN)
  async logout(@Req() req: any, @Res() res: any) {
    const { cookie } = await this.authService.logout();
    res.setHeader('Set-Cookie', cookie);
    return res.redirect('/');
  }

  // @Post('permissions')
  // @Roles(UserRole.SUPER_ADMIN)
  // @RequiresPermissions(AllPermissionsEnum.MANAGE_PERMISSIONS)
  // @ApiOperation({ summary: 'Manage role permissions' })
  // @ApiBearerAuth()
  // async managePermissions(@Body() data: ManagePermissionsDto) {
  //   await this.rolePermissionService.managePermission(data);
  // }
}
