package cn.nianxx.thhotel.platform.identity.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;

/**
 * 平台用户 session 实体。数据库只保存 token_hash，不保存明文 access token。
 */
@TableName("platform_user_session")
public class PlatformUserSessionEntity {

    /** session 内部 ID。 */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    /** 所属用户 ID。 */
    private Long userId;
    /** access token 的 SHA-256 哈希。 */
    private String tokenHash;
    /** session 状态：ACTIVE、REVOKED、EXPIRED。 */
    private String sessionStatus;
    /** token 签发 UTC 时间。 */
    private LocalDateTime issuedAt;
    /** token 过期 UTC 时间。 */
    private LocalDateTime expiresAt;
    /** 注销或撤销 UTC 时间。 */
    private LocalDateTime revokedAt;
    /** 最近使用 UTC 时间。 */
    private LocalDateTime lastSeenAt;
    /** 登录或最近请求 IP，第一版可为空。 */
    private String clientIp;
    /** User-Agent 摘要，第一版可为空。 */
    private String userAgentSummary;
    /** 记录创建 UTC 时间。 */
    private LocalDateTime createdAt;
    /** 记录更新 UTC 时间。 */
    private LocalDateTime updatedAt;

    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public Long getUserId() { return userId; }
    public void setUserId(Long userId) { this.userId = userId; }
    public String getTokenHash() { return tokenHash; }
    public void setTokenHash(String tokenHash) { this.tokenHash = tokenHash; }
    public String getSessionStatus() { return sessionStatus; }
    public void setSessionStatus(String sessionStatus) { this.sessionStatus = sessionStatus; }
    public LocalDateTime getIssuedAt() { return issuedAt; }
    public void setIssuedAt(LocalDateTime issuedAt) { this.issuedAt = issuedAt; }
    public LocalDateTime getExpiresAt() { return expiresAt; }
    public void setExpiresAt(LocalDateTime expiresAt) { this.expiresAt = expiresAt; }
    public LocalDateTime getRevokedAt() { return revokedAt; }
    public void setRevokedAt(LocalDateTime revokedAt) { this.revokedAt = revokedAt; }
    public LocalDateTime getLastSeenAt() { return lastSeenAt; }
    public void setLastSeenAt(LocalDateTime lastSeenAt) { this.lastSeenAt = lastSeenAt; }
    public String getClientIp() { return clientIp; }
    public void setClientIp(String clientIp) { this.clientIp = clientIp; }
    public String getUserAgentSummary() { return userAgentSummary; }
    public void setUserAgentSummary(String userAgentSummary) { this.userAgentSummary = userAgentSummary; }
    public LocalDateTime getCreatedAt() { return createdAt; }
    public void setCreatedAt(LocalDateTime createdAt) { this.createdAt = createdAt; }
    public LocalDateTime getUpdatedAt() { return updatedAt; }
    public void setUpdatedAt(LocalDateTime updatedAt) { this.updatedAt = updatedAt; }
}
