import { request, type ApiResponse } from './request'
import { formatBusinessTime } from '@/utils/businessTime'

export type BatteryGroupFieldStatus = '启用' | '禁用'
export type BatteryGroupFieldType = '文本' | '数字' | '时间' | '备注'

interface BatteryGroupFieldDto {
  fieldId: number
  fieldName: string | null
  fieldType: string | null
  createBy: string | null
  createTime: number | null
  status: string | null
}

interface BatteryGroupFieldListResponse extends ApiResponse {
  total: number
  rows: BatteryGroupFieldDto[]
}

export interface BatteryGroupField {
  id: number
  name: string
  type: BatteryGroupFieldType
  creator: string
  createdAt: string
  status: BatteryGroupFieldStatus
}

export interface BatteryGroupFieldPayload {
  fieldName: string
  fieldType: string
  status: '0' | '1'
}

const typeMap: Record<string, BatteryGroupFieldType> = {
  text: '文本', number: '数字', time: '时间', date: '时间', remark: '备注',
}

export const fieldTypeCode: Record<BatteryGroupFieldType, string> = {
  文本: 'text', 数字: 'number', 时间: 'time', 备注: 'remark',
}

export function mapBatteryGroupFieldType(value: string | null | undefined): BatteryGroupFieldType {
  return typeMap[value || ''] || '文本'
}

export async function getBatteryGroupFields(): Promise<BatteryGroupField[]> {
  const result = await request<BatteryGroupFieldListResponse>('/system/batteryGroupField/list?pageNum=1&pageSize=1000')
  return (result.rows || []).map(item => ({
    id: item.fieldId,
    name: item.fieldName || '',
    type: mapBatteryGroupFieldType(item.fieldType),
    creator: item.createBy || '-',
    createdAt: formatBusinessTime(item.createTime),
    status: item.status === '1' ? '禁用' : '启用',
  }))
}

export function createBatteryGroupField(payload: BatteryGroupFieldPayload): Promise<ApiResponse> {
  return request<ApiResponse>('/system/batteryGroupField', { method: 'POST', body: JSON.stringify(payload) })
}

export function updateBatteryGroupField(fieldId: number, payload: BatteryGroupFieldPayload): Promise<ApiResponse> {
  return request<ApiResponse>('/system/batteryGroupField', {
    method: 'PUT', body: JSON.stringify({ fieldId, ...payload }),
  })
}

export function changeBatteryGroupFieldStatus(fieldId: number, status: '0' | '1'): Promise<ApiResponse> {
  return request<ApiResponse>('/system/batteryGroupField/changeStatus', {
    method: 'PUT', body: JSON.stringify({ fieldId, status }),
  })
}

export function deleteBatteryGroupField(fieldId: number): Promise<ApiResponse> {
  return request<ApiResponse>(`/system/batteryGroupField/${fieldId}`, { method: 'DELETE' })
}
