package cn.novalon.gym.manage.datacount.domain;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 数据统计结果域对象
 *
 * @author system
 * @date 2026-06-09
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DataStatistics {

    /**
     * 统计类型：MEMBER-会员统计，BOOKING-预约统计，SIGN_IN-签到统计
     */
    private String statType;

    /**
     * 统计周期：DAY-日统计，WEEK-周统计，MONTH-月统计
     */
    private String periodType;

    /**
     * 统计日期（DAY时为具体日期，WEEK时为周开始日期，MONTH时为月份第一天）
     */
    private LocalDateTime statDate;

    /**
     * 统计数据值
     */
    private Long count;

    /**
     * 关联ID（如会员ID等）
     */
    private Long relatedId;

    /**
     * 扩展数据（JSON格式存储额外信息）
     */
    private String extraData;

    /**
     * 统计周期常量
     */
    public static final class PeriodType {
        /** 日统计 */
        public static final String DAY = "DAY";
        /** 周统计 */
        public static final String WEEK = "WEEK";
        /** 月统计 */
        public static final String MONTH = "MONTH";

        private PeriodType() {}
    }

    /**
     * 统计类型常量
     */
    public static final class StatType {
        /** 会员统计 */
        public static final String MEMBER = "MEMBER";
        /** 预约统计 */
        public static final String BOOKING = "BOOKING";
        /** 签到统计 */
        public static final String SIGN_IN = "SIGN_IN";

        private StatType() {}
    }
}
