package com.takensoft.cms.mber.dto;

import com.takensoft.cms.mber.vo.MberAuthorVO;
import lombok.*;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;

/**
 * @author  : takensoft
 * @since   : 2024.04.01
 *
 * 회원 가입 관련 DTO
 */
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class JoinDTO {
    /**
     * 회원 아이디
     */
    private String mbrId;
    /**
     * 로그인 아이디
     */
    @NotBlank(message = "로그인 아이디는 필수 입력 값입니다.")
    @Size(min = 5, max = 50)
    private String lgnId;
    /**
     * 회원 이름
     */
    @NotBlank(message = "이름은 필수 입력 값입니다.")
    @Size(min = 2, max = 50)
    private String mbrNm;
    /**
     * 닉네임
     */
    private String ncnm;
    /**
     * 비밀번호
     */
    @NotBlank(message = "비밀번호는 필수 입력 값입니다.")
    private String pswd;
    /**
     * 휴대폰번호
     */
    private String mblTelno;
    /**
     * 전화번호
     */
    private String telno;
    /**
     * 이메일
     */
    @Email(message = "이메일 형식에 맞지 않습니다.")
    private String eml;
    /**
     * 우편번호
     */
    private String zip;
    /**
     * 주소
     */
    private String addr;
    /**
     * 상세주소
     */
    private String daddr;
    /**
     * 회원상태
     * 0: 탈퇴, 1: 승인, 2: 승인대기, 3: 차단
     */
    private String mbrStts;
    /**
     * 사용여부
     */
    private String useYn;
    /**
     * 차단일
     */
    private String cntrlDt;
    /**
     * 차단사유
     */
    private String cntrlRsn;
    /**
     * 문자수신여부
     * 0: 거부, 1: 허용
     */
    private String smsRcptnAgreYn;
    /**
     * 이메일수신여부
     * 0: 거부, 1: 허용
     */
    private String emlRcptnAgreYn;
    /**
     * 개인정보공개여부
     * 0: 거부, 1: 허용
     */
    private String prvcRlsYn;
    /**
     * 회원형태
     * S: 시스템, K: 카카오, N: 네이버, G: 구글, F: 페이스북
     */
    private String mbrType;
    /**
     * 비밀번호 변경일
     */
    private String pswdChgDt;
    /**
     * 최초등록 아이디
     */
    private String frstRegIp;
    /**
     * 시스템 제공 여부 -> 시스템에서 제공되는 데이터는 사용자가 제거하지 못하도록 하기 위한 설정값
     * 0: 시스템, 1: 사용자
     */
    private String sysPvsnYn;
    /**
     * 등록자
     */
    private String rgtr;
    /**
     * 등록일
     */
    private String regDt;
    /**
     * 수정자
     */
    private String mdfr;
    /**
     * 수정일
     */
    private String mdfcnDt;
    /**
     * 권한 정보
     */
    private List<MberAuthorVO> authorList = new ArrayList<MberAuthorVO>();
}
