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;
    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 시크릿(보류/확정 공용). API 응답·로그 미노출. */
    @JsonIgnore
    private String otpSecret;
    /** OTP 등록 확정 여부(기본 false). 최초 로그인 verify 성공 시 true. (db/93_auth_otp.sql) */
    private Boolean otpEnabled;

    // ── UIWS 로그인 보조 이식 컬럼 (esn_user ALTER, db/90_uiws_system.sql) ────────
    /** 회원가입 승인 여부(기본 true=기존계정). 신규 가입자는 false → ADMIN 승인 전 로그인 차단. */
    private Boolean approved;
    /** 표시명(아이디찾기 매칭용). */
    private String displayName;
    /** 임시비번 발급 후 비밀번호 변경 유도 플래그. */
    private Boolean pwChangeYn;
}
