import { ApiProperty } from '@nestjs/swagger';
import { IsNotEmpty, IsNumber, IsOptional, IsString, IsUUID, Min } from 'class-validator';

export class CreateStockDto {
  @ApiProperty({ description: 'ID del depósito' })
  @IsNotEmpty()
  @IsUUID()
  deposito_id: string;

  @ApiProperty({ description: 'ID del producto' })
  @IsNotEmpty()
  @IsUUID()
  producto_id: string;

  @ApiProperty({ description: 'Cantidad disponible', example: 100 })
  @IsNotEmpty()
  @IsNumber()
  @Min(0)
  cantidad_disponible: number;

  @ApiProperty({ description: 'Stock mínimo', example: 10, required: false })
  @IsOptional()
  @IsNumber()
  @Min(0)
  stock_minimo?: number;

  @ApiProperty({ description: 'Stock máximo', example: 1000, required: false })
  @IsOptional()
  @IsNumber()
  @Min(0)
  stock_maximo?: number;

  @ApiProperty({ description: 'Ubicación en el depósito', example: 'A-01-03', required: false })
  @IsOptional()
  @IsString()
  ubicacion?: string;
}

export class AjustarStockDto {
  @ApiProperty({ description: 'ID del depósito' })
  @IsNotEmpty()
  @IsUUID()
  deposito_id: string;

  @ApiProperty({ description: 'ID del producto' })
  @IsNotEmpty()
  @IsUUID()
  producto_id: string;

  @ApiProperty({ description: 'Cantidad a ajustar (positivo o negativo)', example: 10 })
  @IsNotEmpty()
  @IsNumber()
  cantidad: number;

  @ApiProperty({ description: 'Observaciones del ajuste', required: false })
  @IsOptional()
  @IsString()
  observaciones?: string;
}

export class ReservarStockDto {
  @ApiProperty({ description: 'ID del depósito' })
  @IsNotEmpty()
  @IsUUID()
  deposito_id: string;

  @ApiProperty({ description: 'ID del producto' })
  @IsNotEmpty()
  @IsUUID()
  producto_id: string;

  @ApiProperty({ description: 'Cantidad a reservar', example: 5 })
  @IsNotEmpty()
  @IsNumber()
  @Min(0)
  cantidad: number;
}

export class TransferirStockDto {
  @ApiProperty({ description: 'ID del depósito origen' })
  @IsNotEmpty()
  @IsUUID()
  deposito_origen_id: string;

  @ApiProperty({ description: 'ID del depósito destino' })
  @IsNotEmpty()
  @IsUUID()
  deposito_destino_id: string;

  @ApiProperty({ description: 'ID del producto' })
  @IsNotEmpty()
  @IsUUID()
  producto_id: string;

  @ApiProperty({ description: 'Cantidad a transferir', example: 10 })
  @IsNotEmpty()
  @IsNumber()
  @Min(1)
  cantidad: number;

  @ApiProperty({ description: 'Observaciones', required: false })
  @IsOptional()
  @IsString()
  observaciones?: string;
}
