import {
  Controller,
  Get,
  Post,
  Patch,
  Body,
  Param,
  Query,
  Req,
  UseGuards,
  HttpCode,
  HttpStatus,
  ParseUUIDPipe,
} from '@nestjs/common';
import { ScrapingAnalyticsService } from './scraping-analytics.service';
import { AdminAuthGuard } from './admin-auth.guard';
import { AddWebsiteDto, ScrapingLogsQueryDto, UpdateWebsiteDto } from './scraping-analytics.dto';

@Controller('admins/scrapings')
@UseGuards(AdminAuthGuard)
export class ScrapingAnalyticsController {
  constructor(private readonly scrapingAnalyticsService: ScrapingAnalyticsService) {}

  @Get('websites')
  async listWebsites() {
    return this.scrapingAnalyticsService.listWebsites();
  }

  @Post('websites')
  async addWebsite(@Body() body: AddWebsiteDto, @Req() req: any) {
    return this.scrapingAnalyticsService.addWebsite(body, req.admin.id);
  }

  @Patch('websites/:id')
  async updateWebsite(
    @Param('id', ParseUUIDPipe) id: string,
    @Body() body: UpdateWebsiteDto,
    @Req() req: any,
  ) {
    return this.scrapingAnalyticsService.updateWebsite(id, body, req.admin);
  }

  @Post('websites/:id/trigger')
  @HttpCode(HttpStatus.OK)
  async triggerWebsite(@Param('id', ParseUUIDPipe) id: string, @Req() req: any) {
    return this.scrapingAnalyticsService.triggerWebsite(id, req.admin.id);
  }

  @Post('trigger-all')
  @HttpCode(HttpStatus.OK)
  async triggerAll(@Req() req: any) {
    return this.scrapingAnalyticsService.triggerAll(req.admin.id);
  }

  @Get('scripts')
  async listScripts() {
    return this.scrapingAnalyticsService.listScripts();
  }

  @Get('logs')
  async listLogs(@Query() query: ScrapingLogsQueryDto) {
    return this.scrapingAnalyticsService.listLogs(query);
  }

  @Get('logs/:id')
  async getLog(@Param('id', ParseUUIDPipe) id: string) {
    return this.scrapingAnalyticsService.getLog(id);
  }

  @Get('reports/stats')
  async reportStats() {
    return this.scrapingAnalyticsService.reportStats();
  }
}
