import { Type } from 'class-transformer';
import { IsBoolean, IsInt, IsOptional, IsString, IsUrl, Max, Min, MinLength } from 'class-validator';

export class CreateBotDto {
  @IsString()
  @MinLength(2, { message: 'Название бота должно содержать минимум 2 символа' })
  name!: string;

  @IsString()
  @MinLength(5, { message: 'Username бота должен содержать минимум 5 символов' })
  username!: string;
}

export class UpdateBotDto {
  @IsOptional()
  @IsString()
  @MinLength(2, { message: 'Название бота должно содержать минимум 2 символа' })
  name?: string;

  @IsOptional()
  @IsString()
  @MinLength(5, { message: 'Username бота должен содержать минимум 5 символов' })
  username?: string;
}

export class SetBotWebAppDto {
  @IsOptional()
  @IsUrl({}, { message: 'Укажите корректный URL Mini App' })
  webAppUrl?: string;
}

export class UpdateBotProfileDto {
  @IsOptional()
  @IsString()
  description?: string;

  @IsOptional()
  @IsString()
  aboutText?: string;

  @IsOptional()
  @IsString()
  botPicUrl?: string;

  @IsOptional()
  @IsString()
  menuButtonJson?: string;

  @IsOptional()
  @IsString()
  menuButtonUrl?: string;

  @IsOptional()
  @IsString()
  menuButtonText?: string;
}

export class SetBotActiveDto {
  @IsBoolean()
  isActive!: boolean;
}

export class ListAdminBotsQueryDto {
  @IsOptional()
  @IsString()
  search?: string;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  page?: number;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(100)
  limit?: number;
}

export class ValidateWebAppInitDataDto {
  @IsString()
  initData!: string;

  @IsString()
  botToken!: string;
}

export class SubmitBotMessageDto {
  @IsString()
  @MinLength(1, { message: 'Текст сообщения не может быть пустым' })
  text!: string;

  @IsOptional()
  @IsString()
  roomId?: string;
}

export class SubmitBotCallbackDto {
  @IsInt()
  @Min(1)
  messageId!: number;

  @IsString()
  @MinLength(1, { message: 'callbackData не может быть пустым' })
  callbackData!: string;
}
