import { ref } from 'vue'
import type { FieldType } from '@/stores/batteryGroups'

export type BatteryGroupFieldStatus = '启用' | '禁用'

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

const STORAGE_KEY = 'battery_detection_group_fields_v1'

const seedFields: BatteryGroupField[] = [
  { id: 1086, name: '额定容量', type: '数字', creator: '张工', createdAt: '2026-08-05 09:30', status: '启用' },
  { id: 1085, name: '电流', type: '数字', creator: '李工', createdAt: '2026-08-04 16:18', status: '启用' },
  { id: 1084, name: '内阻', type: '数字', creator: '周工', createdAt: '2026-08-04 11:42', status: '启用' },
  { id: 1083, name: '循环温度', type: '数字', creator: '王工', createdAt: '2026-08-03 15:06', status: '禁用' },
  { id: 1082, name: '生产批次', type: '文本', creator: '赵工', createdAt: '2026-08-02 10:24', status: '启用' },
  { id: 1081, name: '生产日期', type: '时间', creator: '陈工', createdAt: '2026-08-01 14:10', status: '启用' },
  { id: 1080, name: '材料备注', type: '备注', creator: 'Admin', createdAt: '2026-08-01 09:26', status: '启用' },
]

function inferFieldType(name: string): FieldType {
  if (/日期|时间/.test(name)) return '时间'
  if (/备注|说明|描述/.test(name)) return '备注'
  if (/容量|电流|电压|内阻|温度|数量|厚度|长度|宽度|重量|次数/.test(name)) return '数字'
  return '文本'
}

function loadFields() {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    if (stored) {
      const parsed = JSON.parse(stored) as Array<Partial<BatteryGroupField> & Pick<BatteryGroupField, 'id' | 'name' | 'creator' | 'createdAt' | 'status'>>
      return parsed.map(item => ({ ...item, type: item.type || inferFieldType(item.name) })) as BatteryGroupField[]
    }
  } catch {
    localStorage.removeItem(STORAGE_KEY)
  }
  return seedFields
}

const fields = ref<BatteryGroupField[]>(loadFields())

function persist() {
  localStorage.setItem(STORAGE_KEY, JSON.stringify(fields.value))
}

function nowString() {
  const date = new Date()
  const pad = (value: number) => String(value).padStart(2, '0')
  return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())} ${pad(date.getHours())}:${pad(date.getMinutes())}`
}

export function useBatteryGroupFields() {
  function createField(data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    const id = Math.max(1000, ...fields.value.map(item => item.id)) + 1
    fields.value.unshift({ ...data, id, createdAt: nowString() })
    persist()
    return id
  }

  function updateField(id: number, data: Pick<BatteryGroupField, 'name' | 'type' | 'creator' | 'status'>) {
    const target = fields.value.find(item => item.id === id)
    if (!target) return false
    Object.assign(target, data)
    persist()
    return true
  }

  function removeField(id: number) {
    fields.value = fields.value.filter(item => item.id !== id)
    persist()
  }

  function saveChanges() {
    persist()
  }

  return { fields, createField, updateField, removeField, saveChanges }
}
