import { defineStore } from 'pinia'
import { useDesktopStore } from './storeDesktop'
import { DESKTOP_DEFAULT_APPS_STORE_ID } from './storeIds'

export const useDesktopDefaultAppsStore = defineStore(
  DESKTOP_DEFAULT_APPS_STORE_ID,
  () => {
    const desktopStore = useDesktopStore()

    /**
     * Sets a default app for a given feature
     */
    function setDefaultApp(
      feature: string,
      application: IApplicationController,
      entry: string,
    ) {
      if (!desktopStore.state.hasOwnProperty('defaultApps')) {
        desktopStore.state.defaultApps = {}
      }

      desktopStore.state.defaultApps[feature] = {
        applicationId: application.id,
        entry,
      }
    }

    /**
     * Gets the default app config for a given feature
     */
    function getDefaultApp(feature: string): DefaultAppConfig | undefined {
      if (!desktopStore.state.hasOwnProperty('defaultApps')) {
        desktopStore.state.defaultApps = {}
      }

      return desktopStore.state.defaultApps[feature]
    }

    /**
     * Loads default apps from current config
     */
    function loadDefaultAppsFromConfig(runtimeConfig) {
      if (runtimeConfig.public.desktop.defaultApps) {
        desktopStore.state.defaultApps = runtimeConfig.public.desktop.defaultApps
      }
    }

    return {
      setDefaultApp,
      getDefaultApp,
      loadDefaultAppsFromConfig,
    }
  },
)
