import { ApiProperty } from "@nestjs/swagger";
import { IsEmail, IsNotEmpty, IsString, Matches, MaxLength, MinLength } from "class-validator";

// Crea el PRIMER acceso operable de un tenant: identidad de plataforma (o
// reusa una existente por email) + usuario local en SU base + la membresia
// que los une. Sin esto, un tenant recien registrado (incluso ya activo)
// no tiene a nadie que pueda loguearse — ver tenants-admin.service.ts.
export class ProvisionarAccesoDto {
  @ApiProperty({ description: "Email de la identidad (se reusa si ya existe una con ese correo)" })
  @IsEmail()
  email: string;

  @ApiProperty()
  @IsString()
  @IsNotEmpty()
  @MaxLength(255)
  nombre: string;

  @ApiProperty({ description: "Username LOCAL dentro de la base del tenant (taller_usuarios.username)" })
  @IsString()
  @IsNotEmpty()
  @MaxLength(100)
  @Matches(/^[a-zA-Z0-9_.-]+$/, {
    message: "username solo puede tener letras, numeros, punto, guion y guion bajo",
  })
  username: string;

  @ApiProperty({ description: "Password del PRIMER login — solo se usa si la identidad no existia todavia" })
  @IsString()
  @MinLength(8)
  @MaxLength(255)
  password: string;
}
