package com.zioinfo.mes.auth;

import lombok.Data;
import java.time.LocalDateTime;

/**
 * MES 운영자 계정 (mes_user 테이블).
 *
 * <p>role: SUPERADMIN / MANAGER / WORKER / VIEWER.
 */
@Data
public class MesUser {
    private Long id;
    private String username;
    private String passwordHash;
    private String displayName;
    private String role;
    private boolean active;
    private LocalDateTime createdAt;

    // ── UIWS 2FA 이식 (mes_user ALTER, db/91_uiws_port.sql) ─────────────────────
    /** 2FA 발송 대상 이메일. mes_user 원본 미보유 → 91_uiws_port.sql ALTER 로 추가. */
    private String email;
    /** 이메일 인증코드(6자리). 발급 후 verify 단계에서 검증. API 응답에는 절대 미포함. */
    private String emailVerifyCode;
    /** 인증코드 만료시각. */
    private LocalDateTime emailVerifyExpire;
    /** 로그인 실패 누적 횟수(기본 0). max-login-fail 도달 시 locked. */
    private Integer loginFailCount;
    /** 계정 잠금 여부(기본 false). */
    private Boolean locked;
    /** TOTP 시크릿(보류/확정 공용). API 응답·로그 미노출. */
    private String otpSecret;
    /** OTP 등록 확정 여부(최초 로그인 verify 성공 시 true). db/93_auth_otp.sql ALTER. */
    private Boolean otpEnabled;

    // ── 로그인 보조 이식(회원가입 승인 게이트) mes_user.approved ───────────────
    /** 회원가입 승인 여부(기본 true). 신규 가입자는 false → SUPERADMIN 승인 전 로그인 차단. */
    private Boolean approved;
}
