import { defineStore } from 'pinia'

export const useSettingsStore = defineStore('SettingsStore', {
  state: () => ({
    categories: []
  }),
  getters: {
    recently_added_limit: (state) =>
      state.setting('webinterface', 'recently_added_limit')?.value ?? 100,
    show_composer_for_genre: (state) =>
      state.setting('webinterface', 'show_composer_for_genre')?.value ?? null,
    show_composer_now_playing: (state) =>
      state.setting('webinterface', 'show_composer_now_playing')?.value ??
      false,
    show_cover_artwork_in_album_lists: (state) =>
      state.setting('artwork', 'show_cover_artwork_in_album_lists')
        ?.value ?? false,
    show_filepath_now_playing: (state) =>
      state.setting('webinterface', 'show_filepath_now_playing')?.value ??
      false,
    show_menu_item_audiobooks: (state) =>
      state.setting('webinterface', 'show_menu_item_audiobooks')?.value ??
      false,
    show_menu_item_files: (state) =>
      state.setting('webinterface', 'show_menu_item_files')?.value ?? false,
    show_menu_item_music: (state) =>
      state.setting('webinterface', 'show_menu_item_music')?.value ?? false,
    show_menu_item_playlists: (state) =>
      state.setting('webinterface', 'show_menu_item_playlists')?.value ?? false,
    show_menu_item_podcasts: (state) =>
      state.setting('webinterface', 'show_menu_item_podcasts')?.value ?? false,
    show_menu_item_radio: (state) =>
      state.setting('webinterface', 'show_menu_item_radio')?.value ?? false,
    show_menu_item_search: (state) =>
      state.setting('webinterface', 'show_menu_item_search')?.value ?? false
  },
  actions: {
    update(option) {
      const settingCategory = this.categories.find(
        (category) => category.name === option.category
      )
      if (!settingCategory) {
        return
      }
      const settingOption = settingCategory.options.find(
        (setting) => setting.name === option.name
      )
      if (settingOption) {
        settingOption.value = option.value
      }
    },
    setting(categoryName, optionName) {
      return (
        this.categories
          .find((category) => category.name === categoryName)
          ?.options.find((option) => option.name === optionName) ?? {}
      )
    }
  }
})
