/**
 * 系统账户报表服务
 * [2026-01-04] 新增：负责系统账户报表数据的API调用
 * [2026-01-06] 更新：添加收益类型汇总统计接口
 * 回滚方式：删除此文件
 */

import apiClient from '@/infrastructure/api/client';
import { API_ENDPOINTS } from '@/infrastructure/api/endpoints';
import type {
  ApiResponse,
  SystemAccountReportResponse,
  SystemAccountWithBalance,
  RegionAccountsSummary,
  OfflineSettlementSummary,
  ExpiredRewardsSummary,
  AllSystemAccountsLedgerResponse,
  AllRewardTypeSummariesResponse,
  RewardEntriesResponse,
  FeeCollectionSummaryResponse,
  FeeCollectionEntriesResponse,
  OfflineSettlementEntriesResponse,
  ExpiredRewardsEntriesResponse,
} from '@/types';

/**
 * 查询参数
 */
interface DateRangeParams {
  startDate?: string;
  endDate?: string;
}

/**
 * 系统账户报表服务
 */
export const systemAccountReportService = {
  /**
   * 获取完整系统账户报表
   */
  async getFullReport(params?: DateRangeParams): Promise<ApiResponse<SystemAccountReportResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.FULL_REPORT, { params });
  },

  /**
   * 获取固定系统账户列表（带余额）
   */
  async getFixedAccounts(): Promise<ApiResponse<SystemAccountWithBalance[]>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.FIXED_ACCOUNTS);
  },

  /**
   * 获取省区域账户汇总
   */
  async getProvinceSummary(): Promise<ApiResponse<RegionAccountsSummary>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.PROVINCE_SUMMARY);
  },

  /**
   * 获取市区域账户汇总
   */
  async getCitySummary(): Promise<ApiResponse<RegionAccountsSummary>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.CITY_SUMMARY);
  },

  /**
   * 获取面对面结算统计
   */
  async getOfflineSettlement(params?: DateRangeParams): Promise<ApiResponse<OfflineSettlementSummary>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.OFFLINE_SETTLEMENT, { params });
  },

  // [2026-01-07] 新增：获取面对面结算明细列表
  /**
   * 获取面对面结算明细列表
   */
  async getOfflineSettlementEntries(params?: {
    page?: number;
    pageSize?: number;
    startDate?: string;
    endDate?: string;
  }): Promise<ApiResponse<OfflineSettlementEntriesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.OFFLINE_SETTLEMENT_ENTRIES, { params });
  },

  /**
   * 获取过期收益统计
   */
  async getExpiredRewards(params?: DateRangeParams): Promise<ApiResponse<ExpiredRewardsSummary>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.EXPIRED_REWARDS, { params });
  },

  // [2026-01-07] 新增：获取过期收益明细列表
  /**
   * 获取过期收益明细列表
   */
  async getExpiredRewardsEntries(params?: {
    page?: number;
    pageSize?: number;
    rightType?: string;
  }): Promise<ApiResponse<ExpiredRewardsEntriesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.EXPIRED_REWARDS_ENTRIES, { params });
  },

  // [2026-01-05] 新增：获取所有系统账户分类账明细
  /**
   * 获取所有系统账户的分类账明细
   */
  async getAllLedger(params?: DateRangeParams & { pageSize?: number }): Promise<ApiResponse<AllSystemAccountsLedgerResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.ALL_LEDGER, { params });
  },

  // [2026-01-06] 新增：获取所有收益类型汇总统计
  /**
   * 获取所有收益类型的汇总统计
   * 包括：手续费汇总、省团队收益汇总、市团队收益汇总、分享引荐收益汇总、社区收益汇总
   */
  async getRewardTypeSummaries(): Promise<ApiResponse<AllRewardTypeSummariesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.REWARD_TYPE_SUMMARIES);
  },

  // [2026-01-06] 新增：获取收益类型详细记录列表
  /**
   * 获取指定收益类型的详细记录列表
   */
  async getRewardEntriesByType(params: {
    rightType: string;
    page?: number;
    pageSize?: number;
  }): Promise<ApiResponse<RewardEntriesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.REWARD_ENTRIES_BY_TYPE, { params });
  },

  /**
   * 获取手续费类型的详细记录列表（系统费用：成本费、运营费等）
   * @deprecated 使用 getFeeCollectionSummary 获取真正的提现手续费
   */
  async getFeeEntriesDetailed(params?: {
    page?: number;
    pageSize?: number;
  }): Promise<ApiResponse<RewardEntriesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.FEE_ENTRIES_DETAILED, { params });
  },

  // [2026-01-06] 新增：手续费归集账户统计（真正的提现手续费）
  // 来源：wallet-service 中 S0000000006 账户的 FEE_COLLECTION 类型流水
  // 回滚方式：删除以下方法

  /**
   * 获取手续费归集账户汇总统计（提现手续费）
   * 统计 S0000000006 账户收到的所有提现手续费
   */
  async getFeeCollectionSummary(): Promise<ApiResponse<FeeCollectionSummaryResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.FEE_COLLECTION_SUMMARY);
  },

  /**
   * 获取手续费归集账户流水明细（提现手续费）
   */
  async getFeeCollectionEntries(params?: {
    page?: number;
    pageSize?: number;
    feeType?: string;
    startDate?: string;
    endDate?: string;
  }): Promise<ApiResponse<FeeCollectionEntriesResponse>> {
    return apiClient.get(API_ENDPOINTS.SYSTEM_ACCOUNT_REPORTS.FEE_COLLECTION_ENTRIES, { params });
  },
};

export default systemAccountReportService;
