import { Decimal } from '@prisma/client/runtime/library';

/**
 * 实时统计仓储接口
 * 用于存储和更新从 Kafka 事件累加的统计数据
 */
export const REALTIME_STATS_REPOSITORY = Symbol('REALTIME_STATS_REPOSITORY');

export interface RealtimeStatsData {
  id?: bigint;
  statsDate: Date;
  dailyPlantingCount: number;
  dailyOrderCount: number;
  dailyPlantingAmount: Decimal;
  dailyNewUserCount: number;
  dailyProvinceAuthCount: number;
  dailyCityAuthCount: number;
  createdAt?: Date;
  updatedAt?: Date;
}

export interface IRealtimeStatsRepository {
  /**
   * 获取或创建指定日期的统计记录
   */
  getOrCreateByDate(date: Date): Promise<RealtimeStatsData>;

  /**
   * 根据日期查找统计记录
   */
  findByDate(date: Date): Promise<RealtimeStatsData | null>;

  /**
   * 增加认种数量
   */
  incrementPlanting(
    date: Date,
    treeCount: number,
    amount: Decimal,
  ): Promise<RealtimeStatsData>;

  /**
   * 增加订单数量
   */
  incrementOrder(date: Date): Promise<RealtimeStatsData>;

  /**
   * 增加新用户数量
   */
  incrementNewUser(date: Date): Promise<RealtimeStatsData>;

  /**
   * 增加省公司授权数量
   */
  incrementProvinceAuth(date: Date): Promise<RealtimeStatsData>;

  /**
   * 增加市公司授权数量
   */
  incrementCityAuth(date: Date): Promise<RealtimeStatsData>;

  /**
   * 获取最近N天的统计数据
   */
  findRecentDays(days: number): Promise<RealtimeStatsData[]>;

  /**
   * 获取日期范围内的统计数据
   */
  findByDateRange(startDate: Date, endDate: Date): Promise<RealtimeStatsData[]>;
}
