package com.zsElectric.boot.common.util.electric;

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

import java.time.Duration;
import java.time.LocalDateTime;

/**
 * Token实体类
 * 封装Token相关信息及有效性检查[2](@ref)
 */
@Data
public class ApiToken {
    /**
     * 获取的凭证
     */
    private String accessToken;
    
    /**
     * 凭证有效期（单位：秒）
     */
    private Integer tokenAvailableTime;
    
    /**
     * 令牌获取时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime obtainTime;
    
    /**
     * 令牌过期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime expireTime;
    
    /**
     * 检查令牌是否有效
     * 提前60秒过期，避免网络延迟等问题导致的令牌无效[2](@ref)
     * @return true-有效，false-无效
     */
    public boolean isValid() {
        return LocalDateTime.now().plusSeconds(60).isBefore(expireTime);
    }
    
    /**
     * 计算剩余有效时间（秒）
     */
    public long getRemainingSeconds() {
        return Duration.between(LocalDateTime.now(), expireTime).getSeconds();
    }
}