import { tauriStore } from '@/utils/persist'
import { create } from 'zustand'
import { createJSONStorage, persist } from 'zustand/middleware'

interface ToolState {
  launchOptions: string[]
  launchIndex: number
  powerPlan: number
}

interface ToolAction {
  setLaunchOption: (option: string, index: number) => void
  setLaunchOptions: (options: string[]) => void
  setLaunchIndex: (index: number) => void
  setPowerPlan: (index: number) => void
}

const STORE_NAME = "tool"
const { /* store,  */ storage } = tauriStore(STORE_NAME)

const useToolStore = create<ToolState & ToolAction>()(
  persist(
    (set/* , get */) => ({
      launchOptions: ["-high -refresh 120 -novid -nojoy -tickrate 128 +cl_cmdrate 128 +cl_updaterate 128 +exec auto.cfg +test", "", ""],
      launchIndex: 0,
      powerPlan: 0,
      setLaunchOption: (option: string, index: number) => set((state) => ({ launchOptions: [...state.launchOptions.slice(0, index), option, ...state.launchOptions.slice(index + 1)] })),
      setLaunchOptions: (options: string[]) => set(() => ({ launchOptions: options })),
      setLaunchIndex: (index: number) => set(() => ({ launchIndex: index })),
      setPowerPlan: (index: number) => set(() => ({ powerPlan: index }))
    }),
    {
      name: STORE_NAME, // name of item in the storage (must be unique)
      storage: createJSONStorage(() => storage), // (optional) by default the 'localStorage' is used
    }
  )
)

export default useToolStore