import { Controller, Get, Post, Body, UseGuards } from '@nestjs/common';
import { ApiTags, ApiOperation, ApiBody, ApiResponse } from '@nestjs/swagger';
import { CrawlerService } from './crawler.service';
import { StartCrawlDto } from './dto/crawler.dto';
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';

@ApiTags('Crawler')
@Controller({ path: 'crawler', version: '1' })
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles(UserRole.SUPER_ADMIN, UserRole.ADMIN)
export class CrawlerController {
  constructor(private readonly crawlerService: CrawlerService) {}

  @Post('start')
  @ApiOperation({ summary: 'Start website crawling' })
  @ApiBody({ type: StartCrawlDto })
  @ApiResponse({ status: 201, description: 'Crawl completed successfully' })
  async startCrawl(@Body() body: StartCrawlDto) {
    const { url, maxDepth = 2, maxUrls = 100 } = body;
    const results = await this.crawlerService.crawlWebsite(url, maxDepth, maxUrls);
    return {
      message: 'Crawl completed',
      baseUrl: url,
      totalLinks: results.length,
      links: results,
    };
  }

  @Get('clear')
  @ApiOperation({ summary: 'Clear all crawl data' })
  @ApiResponse({ status: 200, description: 'Crawl data cleared' })
  clearCrawlData() {
    this.crawlerService.clearCrawlData();
    return { message: 'Crawl data cleared' };
  }
}
