import { ref } from 'vue'
import {
  createBatteryGroupField,
  deleteBatteryGroupField,
  fieldTypeCode,
  getBatteryGroupFields,
  updateBatteryGroupField,
  type BatteryGroupField,
} from '@/api/batteryGroupFields'

// 报表和控制台仍通过该 store 读取字段；数据由后端 MySQL 提供，避免业务字段落入浏览器 localStorage。
const fields = ref<BatteryGroupField[]>([])
let refreshPromise: Promise<BatteryGroupField[]> | null = null

function toPayload(data: Pick<BatteryGroupField, 'name' | 'type' | 'status'>) {
  return {
    fieldName: data.name.trim(),
    fieldType: fieldTypeCode[data.type],
    status: data.status === '启用' ? '0' as const : '1' as const,
  }
}

export function useBatteryGroupFields() {
  async function refreshFields() {
    if (!refreshPromise) {
      refreshPromise = getBatteryGroupFields()
        .then(result => {
          fields.value.splice(0, fields.value.length, ...result)
          return fields.value
        })
        .finally(() => {
          refreshPromise = null
        })
    }
    return refreshPromise
  }

  async function createField(data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    await createBatteryGroupField(toPayload(data))
    await refreshFields()
    return fields.value[0]?.id
  }

  async function updateField(id: number, data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    await updateBatteryGroupField(id, toPayload(data))
    await refreshFields()
    return true
  }

  async function removeField(id: number) {
    await deleteBatteryGroupField(id)
    await refreshFields()
  }

  async function saveChanges() {
    await refreshFields()
  }

  void refreshFields()
  return { fields, refreshFields, createField, updateField, removeField, saveChanges }
}

export type { BatteryGroupField }
