package dev.awesomedev.mirim.web.dto;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Past;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

import java.time.LocalDate;

/**
 * 이 파일이 하는 일:
 * "내 정보 수정" 요청 본문. 가입 때 적은 인적사항 중 본인이 고칠 수 있는 것들이다.
 *
 * 학습 포인트: 검증 규칙은 SignupRequest와 "일부러 똑같다".
 * 가입할 땐 막히던 값이 수정으로는 들어간다면 검증이 뚫린 것이나 마찬가지다 —
 * 같은 데이터라면 들어오는 문이 달라도 규칙은 같아야 한다.
 * (아이디·비밀번호·트랙은 여기 없다 — 아이디는 불변, 비밀번호는 전용 API,
 *  트랙 변경은 인사 사항이라 멘토 소관이다.)
 */
public record ProfileUpdateRequest(

        @NotBlank(message = "이름은 필수입니다.")
        String name,

        @NotBlank(message = "회사 이메일 아이디는 필수입니다.")
        @Size(min = 2, max = 40, message = "이메일 아이디는 2~40자입니다.")
        @Pattern(regexp = "^[a-z0-9._-]+$", message = "이메일 아이디는 소문자·숫자·. _ - 만 쓸 수 있어요.")
        String companyEmailLocal,

        @NotNull(message = "생년월일은 필수입니다.")
        @Past(message = "생년월일은 오늘보다 이전이어야 합니다.")
        LocalDate birthDate,

        @NotBlank(message = "연락처는 필수입니다.")
        @Pattern(regexp = "^01[0-9]-?[0-9]{3,4}-?[0-9]{4}$", message = "휴대폰 번호 형식이 올바르지 않아요.")
        String phone,

        @NotBlank(message = "주소는 필수입니다.")
        String address,

        @NotBlank(message = "학교는 필수입니다.")
        String school,

        @NotBlank(message = "전공(학과)은 필수입니다.")
        String major,

        @NotBlank(message = "비상 연락처 이름은 필수입니다.")
        String emergencyName,

        @NotBlank(message = "비상 연락처 관계는 필수입니다.")
        String emergencyRelation,

        @NotBlank(message = "비상 연락처 전화번호는 필수입니다.")
        @Pattern(regexp = "^01[0-9]-?[0-9]{3,4}-?[0-9]{4}$", message = "비상 연락처 전화번호 형식이 올바르지 않아요.")
        String emergencyPhone
) {
}
