package com.zioinfo.esn.auth;

import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.time.LocalDateTime;

@Data
public class EsnUser {
    private Long id;
    private String tenantCode;
    private String username;
    @JsonIgnore
    private String passwordHash;  // API 응답 미노출
    private String role;          // ADMIN, MANAGER, USER
    private String email;
    private String phone;
    private boolean active;
    // ── 로그인 보조 이식 컬럼 (esn_user ALTER, db/93_esn_login_helper.sql) ─────────
    /** 이름(아이디찾기/비번초기화 매칭 키). */
    private String name;
    /** 가입 승인 상태(APPROVED / PENDING). 신규 가입은 PENDING(승인대기). */
    private String approvalStatus;
    private LocalDateTime lastLoginAt;
    private LocalDateTime createdAt;

    // ── UIWS 2FA 이식 컬럼 (esn_user ALTER, db/91_uiws_port.sql) ─────────────────
    /** 이메일 인증코드(6자리). 발급 후 verify 단계에서 검증. API 응답에는 절대 미포함. */
    @JsonIgnore
    private String emailVerifyCode;
    /** 인증코드 만료시각. */
    @JsonIgnore
    private LocalDateTime emailVerifyExpire;
    /** 로그인 실패 누적 횟수(기본 0). max-login-fail 도달 시 locked. */
    private Integer loginFailCount;
    /** 계정 잠금 여부(기본 false). */
    private Boolean locked;
    /** TOTP 시크릿(UIWS OTP 경로 대비, 현재 이메일 흐름에서는 미사용). */
    @JsonIgnore
    private String otpSecret;
}
