package com.zioinfo.cms.auth;

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

/**
 * CMS 관리자/운영자 계정 (cms_user 테이블).
 *
 * <p>role: SUPERADMIN / EDITOR / AUTHOR / VIEWER.
 * 회원(member)과는 별개 — 회원은 cms_member, 본 엔티티는 콘텐츠 운영자.
 */
@Data
public class CmsUser {
    private Long id;
    private String username;
    private String passwordHash;
    private String displayName;
    private String role;
    private boolean active;
    private LocalDateTime createdAt;

    // ── UIWS 2FA 이식 컬럼 (cms_user ALTER, 91_uiws_port.sql) ───────────────────
    /** 운영자 이메일(2FA 인증코드 발송 대상). 기존 cms_user 미보유 → 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 시크릿(UIWS OTP 경로). 등록 확정 전 보류 시크릿도 여기 저장. API 응답에 절대 미포함. */
    private String otpSecret;
    /** OTP 등록 확정 여부(기본 false). 최초 로그인 verify 성공 시 true 로 확정(멱등). */
    private Boolean otpEnabled;

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