/**
 * 仪表板服务
 * 负责仪表板数据的API调用
 */

import apiClient from '@/infrastructure/api/client';
import { API_ENDPOINTS } from '@/infrastructure/api/endpoints';
import type {
  ApiResponse,
  DashboardOverview,
  DashboardTrendData,
  DashboardPeriod,
  RegionDistributionItem,
  DashboardActivity,
  DashboardStatItem,
  PlantingGlobalStats,
  PlantingTrendPeriod,
  PlantingTrendDataPoint,
} from '@/types';

/** 仪表板概览响应 */
interface DashboardOverviewResponse {
  stats: DashboardStatItem[];
  overview: DashboardOverview;
}

/** 仪表板趋势响应 */
interface DashboardTrendResponse {
  trend: DashboardTrendData;
}

/** 仪表板区域分布响应 */
interface DashboardRegionResponse {
  regions: RegionDistributionItem[];
}

/** 仪表板活动响应 */
interface DashboardActivitiesResponse {
  activities: DashboardActivity[];
}

// [2026-01-07] 新增：热钱包余额响应
/** 热钱包余额响应 */
export interface HotWalletBalanceResponse {
  /** dUSDT (绿积分/公共账户) 余额 */
  dusdtBalance: string | null;
  /** 原生代币 (KAVA/因子) 余额 */
  nativeBalance: string | null;
  /** 链类型 */
  chainType: string;
  /** 是否有效 */
  isValid: boolean;
}

/**
 * 仪表板服务
 */
export const dashboardService = {
  /**
   * 获取仪表板概览数据（统计卡片）
   */
  async getOverview(): Promise<ApiResponse<DashboardOverviewResponse>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.OVERVIEW);
  },

  /**
   * 获取仪表板统计卡片数据
   */
  async getStats(): Promise<ApiResponse<{ stats: DashboardStatItem[] }>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.STATS);
  },

  /**
   * 获取趋势图表数据
   * @param period 时间周期 (7d | 30d | 90d)
   */
  async getTrendData(period: DashboardPeriod = '7d'): Promise<ApiResponse<DashboardTrendResponse>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.CHARTS, {
      params: { period },
    });
  },

  /**
   * 获取区域分布数据
   */
  async getRegionDistribution(): Promise<ApiResponse<DashboardRegionResponse>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.REGION);
  },

  /**
   * 获取最近活动列表
   * @param limit 返回数量限制
   */
  async getRecentActivities(limit = 5): Promise<ApiResponse<DashboardActivitiesResponse>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.ACTIVITIES, {
      params: { limit },
    });
  },

  /**
   * 获取认种统计数据（来自 planting-service，直接从订单表聚合）
   * 数据更可靠，可用于验证 reporting-service 的统计数据
   */
  async getPlantingStats(): Promise<ApiResponse<PlantingGlobalStats>> {
    return apiClient.get(API_ENDPOINTS.PLANTING_STATS.GLOBAL);
  },

  /**
   * 获取认种趋势数据
   * [2026-01-06] 新增
   * @param period 时间维度：day(最近30天)、week(最近12周)、month(最近12月)、quarter(最近8季度)、year(最近5年)
   */
  async getPlantingTrendData(period: PlantingTrendPeriod = 'day'): Promise<ApiResponse<PlantingTrendDataPoint[]>> {
    return apiClient.get(API_ENDPOINTS.PLANTING_STATS.TREND, {
      params: { period },
    });
  },

  // [2026-01-07] 新增：获取热钱包余额
  /**
   * 获取热钱包余额（公共账户和因子）
   * 用于仪表板显示实时余额
   */
  async getHotWalletBalance(): Promise<ApiResponse<HotWalletBalanceResponse>> {
    return apiClient.get(API_ENDPOINTS.DASHBOARD.HOT_WALLET_BALANCE);
  },
};

export default dashboardService;
