import {
  IsBoolean,
  IsEmail,
  IsEnum,
  IsInt,
  IsOptional,
  IsString,
  Max,
  MaxLength,
  Min,
} from 'class-validator';
import { Type } from 'class-transformer';
import { InviteChannel, InviteScope } from '../entities/meeting-invite.entity';

export class CreateInviteDto {
  @IsOptional()
  @IsString()
  @MaxLength(255)
  recipient_name?: string;

  @IsOptional()
  @IsEmail()
  recipient_email?: string;

  @IsOptional()
  @IsString()
  @MaxLength(40)
  recipient_mobile?: string;

  /** invite an existing QRS user instead of an outside guest */
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  recipient_user_id?: number;

  @IsOptional()
  @IsEnum(InviteScope)
  scope?: InviteScope;

  @IsOptional()
  @IsEnum(InviteChannel)
  channel?: InviteChannel;

  /** AUDITOR | CLIENT | OBSERVER */
  @IsOptional()
  @IsString()
  grant_role?: string;

  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(720)
  ttl_hours?: number;

  /**
   * Send immediately on creation. Only meaningful with channel EMAIL —
   * WhatsApp and SMS are tap-to-open links the sender opens themselves.
   */
  @IsOptional()
  @IsBoolean()
  send_now?: boolean;
}
