import { ApiPropertyOptional } from '@nestjs/swagger';
import { IsISO8601, IsNumber, IsOptional, IsString, MaxLength, Min } from 'class-validator';

export class LimiteOverrideDto {
  @ApiPropertyOptional({ example: 500, description: 'Máximo de documentos por mes (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_documentos?: number;

  @ApiPropertyOptional({ example: 20, description: 'Máximo de usuarios (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_user?: number;

  @ApiPropertyOptional({ example: 5000, description: 'Máximo de productos (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_producto?: number;

  @ApiPropertyOptional({ example: 2000, description: 'Máximo de clientes (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_clientes?: number;

  @ApiPropertyOptional({ example: 100000000, description: 'Monto máximo de facturación (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  monto_facturacion?: number;

  @ApiPropertyOptional({ example: 10, description: 'Máximo de empresas hijas (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_empresas?: number;

  @ApiPropertyOptional({ example: 10, description: 'Máximo de sucursales (override)' })
  @IsNumber()
  @IsOptional()
  @Min(1)
  max_sucursales?: number;

  @ApiPropertyOptional({ example: '2026-04-01T00:00:00Z', description: 'Fecha de expiración del override (ISO8601). Null = permanente.' })
  @IsISO8601({}, { message: 'expira_at debe ser fecha ISO8601 válida' })
  @IsOptional()
  expira_at?: string;

  @ApiPropertyOptional({ example: 'Ampliación por demanda de fin de mes', description: 'Nota interna del override' })
  @IsString()
  @IsOptional()
  @MaxLength(120)
  nota?: string;
}
