/**
 * [2026-02-17] 预种计划管理服务
 *
 * 管理员端的预种计划 API 调用服务。
 * 提供预种开关管理、订单/持仓/合并记录查询、统计汇总等功能。
 *
 * === API 端点 ===
 * 所有端点走 admin-service 的 PrePlantingAdminModule：
 * - GET    /v1/admin/pre-planting/config          获取预种开关配置
 * - PUT    /v1/admin/pre-planting/config/toggle    切换预种开关
 * - GET    /v1/admin/pre-planting/orders           预种订单列表
 * - GET    /v1/admin/pre-planting/positions         预种持仓列表
 * - GET    /v1/admin/pre-planting/merges            合并记录列表
 * - GET    /v1/admin/pre-planting/stats             统计汇总
 *
 * === 与现有服务的关系 ===
 * 完全独立于现有认种管理。不涉及 planting_orders 或 CONTRACTS 等现有端点。
 */

import apiClient from '@/infrastructure/api/client';
import { API_ENDPOINTS } from '@/infrastructure/api/endpoints';

// ============================================
// 类型定义
// ============================================

/** 预种开关配置 */
export interface PrePlantingConfig {
  isActive: boolean;
  activatedAt: string | null;
  updatedAt: string;
  updatedBy: string | null;
}

/** 预种统计汇总 */
export interface PrePlantingStats {
  totalOrders: number;         // 总订单数
  totalPortions: number;       // 总份数
  totalAmount: number;         // 总金额（USDT）
  totalMerges: number;         // 合并次数
  totalTreesMerged: number;    // 合成树数
  totalUsers: number;          // 参与用户数
  pendingContracts: number;    // 待签约合并数
  pendingMergePortions: number; // 全网待合并份数
}

/** 预种订单（管理员视角） */
export interface PrePlantingAdminOrder {
  id: string;
  orderNo: string;
  userId: string;
  accountSequence: string;
  portionCount: number;
  pricePerPortion: number;
  totalAmount: number;
  provinceCode: string;
  cityCode: string;
  status: 'CREATED' | 'PAID' | 'MERGED';
  mergedToMergeId: string | null;
  createdAt: string;
  paidAt: string | null;
  mergedAt: string | null;
}

/** 预种持仓（管理员视角） */
export interface PrePlantingAdminPosition {
  id: string;
  userId: string;
  accountSequence: string;
  totalPortions: number;
  availablePortions: number;
  mergedPortions: number;
  totalTreesMerged: number;
  provinceCode: string | null;
  cityCode: string | null;
  firstPurchaseAt: string | null;
  updatedAt: string;
}

/** 预种合并记录（管理员视角） */
export interface PrePlantingAdminMerge {
  id: string;
  mergeNo: string;
  userId: string;
  accountSequence: string;
  sourceOrderNos: string[];
  treeCount: number;
  contractStatus: 'PENDING' | 'SIGNED' | 'EXPIRED';
  contractSignedAt: string | null;
  miningEnabledAt: string | null;
  selectedProvince: string | null;
  selectedCity: string | null;
  mergedAt: string;
}

/** 分页列表请求参数 */
export interface PrePlantingListParams {
  page?: number;
  pageSize?: number;
  status?: string;
  accountSequence?: string;
  keyword?: string;
  teamOf?: string;          // 按团队过滤：传入 accountSequence，仅返回该用户团队成员的数据
}

/** 分页列表响应 */
export interface PaginatedResponse<T> {
  items: T[];
  total: number;
  page: number;
  pageSize: number;
}

// ============================================
// 预种计划管理服务
// ============================================

export const prePlantingService = {
  /**
   * 获取预种开关配置
   */
  async getConfig(): Promise<PrePlantingConfig> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.CONFIG);
  },

  /**
   * 切换预种开关（开启/关闭）
   *
   * 开关仅控制"能否发起新购买"，不影响已完成的业务流程。
   * 关闭后已有未凑满份额的用户仍可继续购买至 5 的倍数。
   */
  async toggleConfig(isActive: boolean): Promise<PrePlantingConfig> {
    return apiClient.put(API_ENDPOINTS.PRE_PLANTING.TOGGLE, { isActive });
  },

  /**
   * 获取预种统计汇总
   */
  async getStats(): Promise<PrePlantingStats> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.STATS);
  },

  /**
   * 获取预种订单列表（管理员视角）
   */
  async getOrders(params: PrePlantingListParams = {}): Promise<PaginatedResponse<PrePlantingAdminOrder>> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.ORDERS, { params });
  },

  /**
   * 获取预种持仓列表（管理员视角）
   */
  async getPositions(params: PrePlantingListParams = {}): Promise<PaginatedResponse<PrePlantingAdminPosition>> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.POSITIONS, { params });
  },

  /**
   * 获取合并记录列表（管理员视角）
   */
  async getMerges(params: PrePlantingListParams = {}): Promise<PaginatedResponse<PrePlantingAdminMerge>> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.MERGES, { params });
  },

  /**
   * [2026-02-28] 获取预种协议文本
   */
  async getAgreement(): Promise<{ text: string | null }> {
    return apiClient.get(API_ENDPOINTS.PRE_PLANTING.AGREEMENT);
  },

  /**
   * [2026-02-28] 更新预种协议文本
   */
  async updateAgreement(text: string): Promise<{ text: string }> {
    return apiClient.put(API_ENDPOINTS.PRE_PLANTING.AGREEMENT, { text });
  },
};

export default prePlantingService;
