/**
 * All theseus API calls return serialized values (both return values and errors);
 * So, for example, addDefaultInstance creates a blank Profile object, where the Rust struct is serialized,
 *  and deserialized into a usable JS object.
 */
import { invoke } from '@tauri-apps/api/tauri'
import { create } from './profile'

// Installs pack from a version ID
export async function install(projectId, versionId, packTitle, iconUrl) {
  const location = {
    type: 'fromVersionId',
    project_id: projectId,
    version_id: versionId,
    title: packTitle,
    icon_url: iconUrl,
  }
  const profile_creator = await invoke('plugin:pack|pack_get_profile_from_pack', { location })
  const profile = await create(
    profile_creator.name,
    profile_creator.gameVersion,
    profile_creator.modloader,
    profile_creator.loaderVersion,
    profile_creator.icon,
  )

  return await invoke('plugin:pack|pack_install', { location, profile })
}

// Installs pack from a path
export async function install_from_file(path) {
  const location = {
    type: 'fromFile',
    path: path,
  }
  const profile_creator = await invoke('plugin:pack|pack_get_profile_from_pack', { location })
  const profile = await create(
    profile_creator.name,
    profile_creator.gameVersion,
    profile_creator.modloader,
    profile_creator.loaderVersion,
    profile_creator.icon,
  )
  return await invoke('plugin:pack|pack_install', { location, profile })
}
