package shop.alien.entity.store.vo;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;

/**
 * 店铺会员卡剩余时长与当前连续购买周期（与会员表 current_period_start / expiry_date 一致）
 */
@Data
@ApiModel("会员卡剩余时间与连续购买周期")
public class PlatformShopMembershipRemainingDetailVo {

    @ApiModelProperty("是否存在会员档案（platform_shop_membership 有该行且已写入到期时间）")
    private Boolean hasMembershipRecord;

    @ApiModelProperty("当前是否在有效期内（到期时间晚于当前时刻）")
    private Boolean membershipActive;

    @ApiModelProperty("剩余天数：未开通或已过期为 0；算法与 /status 接口 remainingDays 一致（按毫秒向上取整到天）")
    private Integer remainingDays;

    @ApiModelProperty("当前连续购买周期总天数：连续周期开始日 0 点 至 到期日 之间的天数（与剩余天数同一套按毫秒折算方式）；无有效起止时间为 null")
    private Integer consecutivePurchaseTotalDays;

    @ApiModelProperty("连续周期开始日期，格式 yyyy/MM/dd；无则为 null（老数据无 current_period_start 时可能回退为首次开通日）")
    private String consecutivePeriodStartYmd;

    @ApiModelProperty("当前会员卡到期日期，格式 yyyy/MM/dd")
    private String currentMembershipEndYmd;

    @ApiModelProperty("每周推广次数总额：当前有效方案 benefit_weekly_homepage_slots；非有效会员为 0")
    private Integer weeklyPromotionTotalPerWeek;

    @ApiModelProperty("本周剩余推广次数：会员表 weekly_promotion_remaining；非有效会员为 0")
    private Integer weeklyPromotionRemainingThisWeek;

    @ApiModelProperty("上一自然月全月店铺访问次数（埋点 TRAFFIC + VIEW，与店铺总浏览量口径一致）")
    private Long lastMonthVisitCount;

    @ApiModelProperty("本自然月从 1 日 0 点（上海时区）至当前时刻的店铺访问次数（埋点 TRAFFIC + VIEW）")
    private Long currentMonthVisitCount;

    @ApiModelProperty("月环比变化百分比：((本月至今 - 上月全月) / 上月全月) × 100，保留两位小数；正为提升负为下降；上月访问数为 0 时为 null（无法计算）")
    private BigDecimal visitCountMoMChangePercent;
}
