import { MutationTree, ActionTree } from 'vuex'
import { RootState } from '@/store/index'
import {
  SettingMutations,
  SettingState,
  PlaySource,
  BasicEffect
} from '@/interface'
import { useFooterModule } from '@/modules'

export const actions: ActionTree<SettingState, RootState> = {}

export const mutations: MutationTree<SettingState> = {
  [SettingMutations.SET_SOURCE](state, source: PlaySource[]) {
    state.source = source
  },
  [SettingMutations.SET_BIT_RATE](state, bit: number) {
    state.bitRate = bit
  },
  [SettingMutations.SET_BASIC_EFFECT](state, basic: BasicEffect[]) {
    const { useState } = useFooterModule()
    const footerState = useState()
    footerState.effect?.clearBasicEffect()
    if (basic.includes(BasicEffect.D3)) {
      footerState.effect?.startSpatial()
    }
    if (basic.includes(BasicEffect.FADE)) {
      footerState.effect?.startInOut(true)
    }
    if (basic.includes(BasicEffect.TENDER)) {
      footerState.effect?.startTender()
    }
    state.basicEffect = basic
  },
  [SettingMutations.SET_CONVOLVER_EFFECT](state, convolver) {
    const { useState } = useFooterModule()
    const footerState = useState()
    if (convolver === '原唱') {
      footerState.effect?.clearConvolver()
    } else {
      footerState.effect?.createConvolver(convolver)
    }
    state.convolver = convolver
  },
  [SettingMutations.SET_UPGRADE](state, upgrade) {
    state.upgrade = upgrade
  }
}