import { request, type ApiResponse } from './request'

interface BatteryGroupTemplateFieldDto {
  fieldId: number
  fieldName: string | null
  fieldType: string | null
}

interface BatteryGroupTemplateDto {
  templateId: number
  templateName: string | null
  fields?: BatteryGroupTemplateFieldDto[] | null
}

interface BatteryGroupTemplateResponse extends ApiResponse {
  data: BatteryGroupTemplateDto
}

interface BatteryGroupTemplateOptionsResponse extends ApiResponse {
  data: BatteryGroupTemplateDto[]
}

interface BatteryGroupTemplateCreatedResponse extends ApiResponse {
  data: { templateId: number }
}

export interface BatteryGroupTemplateOption {
  id: number
  name: string
}

export interface BatteryGroupTemplateDetail extends BatteryGroupTemplateOption {
  fieldIds: number[]
}

export async function getBatteryGroupTemplateOptions(): Promise<BatteryGroupTemplateOption[]> {
  const result = await request<BatteryGroupTemplateOptionsResponse>('/system/batteryGroupTemplate/options')
  return (result.data || []).map(item => ({ id: Number(item.templateId), name: item.templateName || `模板${item.templateId}` }))
}

export async function getBatteryGroupTemplate(templateId: number): Promise<BatteryGroupTemplateDetail> {
  const result = await request<BatteryGroupTemplateResponse>(`/system/batteryGroupTemplate/${templateId}`)
  return {
    id: Number(result.data.templateId),
    name: result.data.templateName || `模板${result.data.templateId}`,
    fieldIds: (result.data.fields || []).map(field => field.fieldId),
  }
}

export function createBatteryGroupTemplate(templateName: string, fieldIds: number[]): Promise<BatteryGroupTemplateCreatedResponse> {
  return request<BatteryGroupTemplateCreatedResponse>('/system/batteryGroupTemplate', {
    method: 'POST', body: JSON.stringify({ templateName, fieldIds }),
  })
}

export function updateBatteryGroupTemplate(templateId: number, templateName: string, fieldIds: number[]): Promise<ApiResponse> {
  return request<ApiResponse>('/system/batteryGroupTemplate', {
    method: 'PUT', body: JSON.stringify({ templateId, templateName, fieldIds }),
  })
}
