package com.dora.dto;

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

import java.time.LocalDate;
import java.util.List;

/**
 * UV统计数据传输对象
 * 
 * @author dora
 * @date 2024/12/01
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class UvStatisticsDto {

    /**
     * 日期
     */
    private LocalDate date;

    /**
     * 独立访客数（UV）
     */
    private Long uv;

    /**
     * 页面访问量（PV）
     */
    private Long pv;

    /**
     * 新访客数
     */
    private Long newVisitors;

    /**
     * 访问IP列表（脱敏后）
     */
    private List<String> ipList;

    /**
     * UV统计汇总信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class UvSummary {
        
        /**
         * 今日UV
         */
        private Long todayUv;

        /**
         * 昨日UV
         */
        private Long yesterdayUv;

        /**
         * 最近7天总UV
         */
        private Long weeklyUv;

        /**
         * 最近7天平均UV
         */
        private Double weeklyAvgUv;

        /**
         * 今日PV
         */
        private Long todayPv;

        /**
         * 昨日PV
         */
        private Long yesterdayPv;

        /**
         * 最近7天总PV
         */
        private Long weeklyPv;

        /**
         * UV增长率（相比昨日）
         */
        private Double uvGrowthRate;

        /**
         * PV增长率（相比昨日）
         */
        private Double pvGrowthRate;

        /**
         * 最近7天UV趋势数据
         */
        private List<UvStatisticsDto> weeklyTrend;
    }

    /**
     * 访客详情信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class VisitorDetail {
        
        /**
         * IP地址（脱敏）
         */
        private String ip;

        /**
         * 首次访问时间
         */
        private String firstVisitTime;

        /**
         * 最后访问时间
         */
        private String lastVisitTime;

        /**
         * 访问次数
         */
        private Integer visitCount;

        /**
         * 用户代理信息
         */
        private String userAgent;

        /**
         * 是否为新访客
         */
        private Boolean isNewVisitor;

        /**
         * 地理位置
         */
        private String location;
    }
}
