﻿import {
  Body,
  Controller,
  Get,
  Post,
  Query,
  Request,
  UseGuards,
} from "@nestjs/common";
import {
  ApiBearerAuth,
  ApiOperation,
  ApiQuery,
  ApiTags,
} from "@nestjs/swagger";
import { RequirePermission } from "../auth/decorators/require-permission.decorator";
import { JwtAuthGuard } from "../auth/guards/jwt-auth.guard";
import { PermissionGuard } from "../auth/guards/permission.guard";
import { PushSyncDto } from "./dto/push-sync.dto";
import { SyncService } from "./sync.service";

@ApiTags("sync")
@ApiBearerAuth()
@UseGuards(JwtAuthGuard, PermissionGuard)
@RequirePermission("sync", "write")
@Controller("sync")
export class SyncController {
  constructor(private readonly syncService: SyncService) {}

  @Post("push")
  @ApiOperation({ summary: "Sincronizar eventos offline -> servidor" })
  async push(@Body() body: PushSyncDto, @Request() req: any) {
    return this.syncService.processPushEvents(body.events, req.user?.id);
  }

  @Get("pull")
  @ApiOperation({ summary: "Obtener cambios incrementales desde servidor" })
  @ApiQuery({
    name: "since",
    required: true,
    description: "Timestamp desde el cual obtener cambios",
  })
  async pull(@Query("since") since: number) {
    return this.syncService.pullChanges(Number(since));
  }
}
