import { IsNotEmpty, ValidateIf, IsIn, MinLength, MaxLength } from 'class-validator';
import { validationMessages } from '../../../messages/validation-messages';
import { ApiProperty } from '@nestjs/swagger';
import { MatchPasswordValidator } from 'src/validators/match-password.validator';


export class UserRegisterDto {
    @ApiProperty({ example: 'Test', required: true, type: 'string' })
    @IsNotEmpty({ message: validationMessages.user.first_name_required })
    @MaxLength(20)
    first_name: string;

    @ApiProperty({ example: 'User', required: true, type: 'string' })
    @IsNotEmpty({ message: validationMessages.user.last_name_required })
    @MaxLength(20)
    last_name: string;

    @ApiProperty({ example: '+91', required: false, type: 'string' })
    // @IsNotEmpty({ message: validationMessages.user.country_code_required  })
    country_code: string;

    @ApiProperty({ example: '1234567890', required: false, type: 'string' })
    @MaxLength(15)
    // @IsNotEmpty({ message: validationMessages.user.phone_number_required  })
    phone_number: string;

    @ApiProperty({ example: 'user@yopmail.com', required: true, type: 'string' })
    @IsNotEmpty({ message: validationMessages.user.email_required })
    @MaxLength(50)
    email: string;

    @ApiProperty({ example: 'company name', required: false, type: 'string' })
    @ValidateIf(o => o.role == 'brand')
    @IsNotEmpty({ message: validationMessages.user.company_name_required })
    @MaxLength(50)
    company_name: string;

    @ApiProperty({ example: 'xxxxxx', required: true, type: 'string' })
    @IsNotEmpty({ message: validationMessages.user.password_required })
    @MinLength(8)
    @MaxLength(20)
    password: string;

    @ApiProperty({ example: 'xxxxxxx', required: true, type: 'string' })
    @MatchPasswordValidator({ message: validationMessages.user.password_not_match })
    @MinLength(8)
    @MaxLength(20)
    @IsNotEmpty({ message: validationMessages.user.confirm_password_required })
    confirm_password: string;

    @IsIn(['brand', 'influencer'], { message: validationMessages.user.role_invalid })
    @IsNotEmpty({ message: validationMessages.user.role_required })
    role: string;

    @ApiProperty({ example: '123456789', required: true })
    // @IsNotEmpty({ message: validationMessages.user.social_id_required })
    social_id: string;

    @ApiProperty({ example: 'google', enum: ['google'], required: true })
    // @IsIn(['google'], { message: validationMessages.user.type_invalid })
    // @IsNotEmpty({ message: validationMessages.user.type_required })
    social_type: string;

    @ApiProperty({ example: 'en', required: false, type: 'string' })
    language: string;

    country: string;
    gender: string;
    currency: string;
    display_name: string;

    id: string;
}
