/**
 * 轮询配置管理 API
 */
import { BaseService } from '../BaseService'
import type { BaseResponse } from '@/types/api'
import type {
  PollingConfig,
  PollingConfigQueryParams,
  PollingConfigListResponse,
  CreatePollingConfigRequest,
  UpdatePollingConfigRequest,
  UpdatePollingConfigStatusRequest
} from '@/types/api/pollingConfig'

/**
 * 轮询配置管理服务
 */
export class PollingConfigService extends BaseService {
  /**
   * 获取轮询配置列表
   * @param params 查询参数
   * @returns 配置列表
   */
  static getPollingConfigs(
    params?: PollingConfigQueryParams
  ): Promise<BaseResponse<PollingConfigListResponse>> {
    return this.get<BaseResponse<PollingConfigListResponse>>('/api/admin/polling-configs', params)
  }

  /**
   * 获取轮询配置详情
   * @param id 配置ID
   * @returns 配置详情
   */
  static getPollingConfigById(id: number): Promise<BaseResponse<PollingConfig>> {
    return this.get<BaseResponse<PollingConfig>>(`/api/admin/polling-configs/${id}`)
  }

  /**
   * 创建轮询配置
   * @param data 创建参数
   * @returns 创建的配置
   */
  static createPollingConfig(
    data: CreatePollingConfigRequest
  ): Promise<BaseResponse<PollingConfig>> {
    return this.post<BaseResponse<PollingConfig>>('/api/admin/polling-configs', data)
  }

  /**
   * 更新轮询配置
   * @param id 配置ID
   * @param data 更新参数
   * @returns 更新后的配置
   */
  static updatePollingConfig(
    id: number,
    data: UpdatePollingConfigRequest
  ): Promise<BaseResponse<PollingConfig>> {
    return this.put<BaseResponse<PollingConfig>>(`/api/admin/polling-configs/${id}`, data)
  }

  /**
   * 删除轮询配置
   * @param id 配置ID
   */
  static deletePollingConfig(id: number): Promise<BaseResponse<void>> {
    return this.delete<BaseResponse<void>>(`/api/admin/polling-configs/${id}`)
  }

  /**
   * 更新轮询配置状态
   * @param id 配置ID
   * @param data 状态参数
   */
  static updatePollingConfigStatus(
    id: number,
    data: UpdatePollingConfigStatusRequest
  ): Promise<BaseResponse<void>> {
    return this.put<BaseResponse<void>>(`/api/admin/polling-configs/${id}/status`, data)
  }

  /**
   * 获取所有启用的配置
   * @returns 启用的配置列表
   */
  static getEnabledPollingConfigs(): Promise<BaseResponse<PollingConfig[]>> {
    return this.get<BaseResponse<PollingConfig[]>>('/api/admin/polling-configs/enabled')
  }
}
