package com.spring.domain.user.dto;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import com.spring.common.validation.EnumValid;
import com.spring.domain.user.entity.AgentUser;
import com.spring.domain.user.entity.AgentUserRole;

import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class SignUpRequest {
    
    @NotBlank(message = "사용자ID는 필수값 입니다.")
    @Size(min = 4, max = 50, message = "사용자ID는 4자 이상 50자 이하로 입력해야 합니다.")
    @Pattern(regexp = "^[A-Za-z0-9]+$", message = "사용자ID는 영문과 숫자만 입력 가능합니다.")
    private String userId;

    @NotBlank(message = "비밀번호는 필수값 입니다.")
    @Size(max = 100, message = "비밀번호는 100자 이하로 입력해야 합니다.")
    private String userPassword;

    @NotBlank(message = "사용자명은 필수값 입니다.")
    @Size(max = 50, message = "사용자명은 50자 이하로 입력해야 합니다.")
    private String userName;

    @NotBlank(message = "EMAIL은 필수값 입니다.")
    @Email(message = "EMAIL형식이 잘못 되었습니다.")
    @Size(max = 100, message = "EMAIL은 100자 이하로 입력해야 합니다.")
    private String email;

    @EnumValid(target = AgentUserRole.class, message = "올바른 값을 입력해주세요.")
    private AgentUserRole userRole;

    public void encodePassword(String password) {
        this.userPassword = password;
    }

    public AgentUser toEntity() {
        return AgentUser.builder()
                .userId(userId)
                .password(userPassword)
                .name(userName)
                .email(email)
                .approved(false)
                .userRole(userRole)
                .createdBy(userId)
                .modifiedBy(userId)
                .build();
    }

}
