import { ApiProperty, ApiPropertyOptional } from "@nestjs/swagger";
import { Type } from "class-transformer";
import {
  IsArray,
  IsNotEmpty,
  IsNumber,
  IsOptional,
  IsString,
  ValidateNested,
} from "class-validator";

export class PushEventDto {
  @ApiProperty({ description: "UUID único del evento" })
  @IsNotEmpty()
  @IsString()
  eventId: string;

  @ApiProperty({ description: "Tipo de evento (CREATE_OT, UPDATE_OT, etc.)" })
  @IsNotEmpty()
  @IsString()
  eventType: string;

  @ApiProperty({ description: "Tipo de entidad (ot, cliente, vehiculo, etc.)" })
  @IsNotEmpty()
  @IsString()
  entityType: string;

  @ApiProperty({ description: "ID local de la entidad" })
  @IsNotEmpty()
  @IsString()
  localId: string;

  @ApiProperty({ description: "Datos del evento" })
  @IsNotEmpty()
  payload: any;

  @ApiProperty({ description: "Timestamp del evento" })
  @IsNotEmpty()
  @IsNumber()
  timestamp: number;
}

export class PushSyncDto {
  @ApiProperty({
    type: [PushEventDto],
    description: "Lista de eventos a sincronizar",
  })
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => PushEventDto)
  events: PushEventDto[];

  @ApiPropertyOptional({ description: "ID del dispositivo" })
  @IsOptional()
  @IsString()
  deviceId?: string;
}
