import { useAuth } from '@websanova/vue-auth/src/v3.js';
import { defineStore } from 'pinia';
import { computed, ref } from 'vue';
import { ProjectService } from '../service/ProjectService';
import { LoadingStore } from './LoadingStore';

export const UserPrefStore = defineStore('userpref_store', () => {

    const user = ref(null)
    const userLoaded = ref(false)
    const selectedApp = ref(null)
    const loadingStore = LoadingStore()
    const selectedFileRE = ref(null)
    const selectedScenario = ref(null)

    async function fetchUserData() {
  const auth = useAuth();
  loadingStore.user_loading = true;

  try {
    const fetchedUser = await auth.fetch();
    user.value = fetchedUser.data.data;
            selectedApp.value = user.value.selectedApplication;
    userLoaded.value = true;
  } catch (error) {
    console.error('Errore nel recupero dei dati utente:', error);
    // Puoi anche lanciare un errore se vuoi gestirlo in modo diverso altrove
    throw error;  // Lancia l'errore per gestirlo fuori dalla funzione, se necessario
  } finally {
    loadingStore.user_loading = false;
  }
}

    
    async function updateSelectedProject(project) {
      try {
          loadingStore.user_loading = true;
          selectedApp.value = null;
          // Aspetta che l'aggiornamento del progetto finisca
          await ProjectService.updateSelectedProject(project);
          
      } catch (error) {
          console.error("Errore durante l'aggiornamento del progetto:", error);
      } finally {
          // Assicurati che il caricamento venga disabilitato anche in caso di errore
          loadingStore.user_loading = false;
      }
  };
  

  

    async function setSelectedApp(app){
      loadingStore.user_loading = true;
      await ProjectService.updateSelectedApplication(app);
      selectedApp.value = app;
      loadingStore.user_loading = false;      
    }

    const selectedProject = computed(() => user.value.selectedProject)
    //const availableApp = computed(() => user.value.selectedProject.lstApplications)
    const availableApp = computed(() => {
      if (user.value.selectedProject!=null) {
          return user.value.selectedProject.lstApplications
      } else {
          return []
      }
  });

  async function setSelectedFile(file){
    selectedFileRE.value = file;
  }

  async function setSelectedScenario(scenario){
    selectedScenario.value = scenario;
  }

  const getSelProj = computed(() => {
    return selectedProject.value
  })

  const getSelApp = computed(() => {
    return selectedApp.value
  })

  const getSelFile = computed(() => {
    return selectedFileRE.value 
  })

  const getSelScenario = computed(() => {
    return selectedScenario.value
  })

  const getUser = computed(() => {
    return user.value
  })


    return {getSelFile, user,selectedFileRE,fetchUserData,getUser,userLoaded,selectedProject,availableApp,getSelApp,setSelectedApp,selectedApp, setSelectedScenario, updateSelectedProject,getSelProj, getSelScenario, setSelectedFile }
  })