import { IsIn, IsNumber, IsOptional, IsString, IsUUID, MinLength } from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

export class UpsertAddressDto {
  @ApiPropertyOptional({ description: 'ID адреса для обновления' })
  @IsOptional()
  @IsUUID('4', { message: 'ID адреса должен быть UUID' })
  addressId?: string;

  @ApiProperty({ description: 'Тип адреса', enum: ['HOME', 'WORK', 'OTHER'] })
  @IsIn(['HOME', 'WORK', 'OTHER'], { message: 'Некорректный тип адреса' })
  label!: 'HOME' | 'WORK' | 'OTHER';

  @ApiProperty({ description: 'Город' })
  @IsString({ message: 'Город должен быть строкой' })
  @MinLength(1, { message: 'Укажите город' })
  city!: string;

  @ApiProperty({ description: 'Улица' })
  @IsString({ message: 'Улица должна быть строкой' })
  @MinLength(1, { message: 'Укажите улицу' })
  street!: string;

  @ApiProperty({ description: 'Дом' })
  @IsString({ message: 'Дом должен быть строкой' })
  @MinLength(1, { message: 'Укажите дом' })
  house!: string;

  @ApiPropertyOptional({ description: 'Квартира или офис' })
  @IsOptional()
  @IsString({ message: 'Квартира должна быть строкой' })
  apartment?: string;

  @ApiPropertyOptional({ description: 'Комментарий' })
  @IsOptional()
  @IsString({ message: 'Комментарий должен быть строкой' })
  comment?: string;

  @ApiPropertyOptional({ description: 'Широта' })
  @IsOptional()
  @IsNumber({}, { message: 'Широта должна быть числом' })
  latitude?: number;

  @ApiPropertyOptional({ description: 'Долгота' })
  @IsOptional()
  @IsNumber({}, { message: 'Долгота должна быть числом' })
  longitude?: number;

  @ApiPropertyOptional({ description: 'Полный адрес одной строкой' })
  @IsOptional()
  @IsString({ message: 'Полный адрес должен быть строкой' })
  fullAddress?: string;
}
