import { defineStore } from 'pinia';
import axios from 'axios';
import { useAuthApi } from '@/composables/useAuthApi';
import { useValidationStore } from '@/stores/validation';

export const useAuthStore = defineStore('auth', {
    
  state: () => ({
    user: null as any,
    token: useCookie('token'), // Store token in cookies
    errorMessage: null as any,
    errors: [],
    userSideMenus: []
  }),

  actions: {

    async getUser(){
      try{
        
        let userInfoStorage = localStorage.getItem("user_info");
        if(userInfoStorage){
          this.user =  JSON.parse(userInfoStorage);      
        }else{
          this.user = null;
        }

      }catch(error){
        throw error;
      }
    },

    async login(email: string, password: string) {

        const validationStore = useValidationStore()

        validationStore.clearErrors() 
   
        try{
            const { login } = useAuthApi('login')

            const response = await login({ email, password })
            
            if (response.status) {
                this.token = response.data.token;
                localStorage.setItem('token', response.data.token);
                localStorage.setItem('user_info', JSON.stringify(response.data.user));
                localStorage.setItem('local', "bn");
                navigateTo('/dashboard');
            }

        }catch(error){
            validationStore.setErrors(error);
            throw error;
        }
        
    },


    async logout() {

      try{
        const { logout } = useAuthApi('logout')

        const response = await logout({})        
          //if (response.status) {
              localStorage.removeItem("user_info");
              localStorage.removeItem("cart");
              localStorage.removeItem("token");
              localStorage.removeItem("selected_route_id");
              localStorage.removeItem("selected_store_id");
              localStorage.removeItem("selected_customer_id");         
          //}
          navigateTo('/login');   

        }catch(error){
            throw error;
        }
    },


    async updateMyAccount(form: any) {

      const validationStore = useValidationStore()

      validationStore.clearErrors() 
 
      try{
          const { formSubmit } = useAuthApi('change-my-account')
          return await formSubmit(form);

      }catch(error){
          console.log("validation error");
          console.log(error);
          validationStore.setErrors(error);
          throw error;
      }
      
  },


  async changePassword(form: any) {

      const validationStore = useValidationStore()

      validationStore.clearErrors() 

      try{
          const { formSubmit } = useAuthApi('change-password')
          return await formSubmit(form);

      }catch(error){
          console.log("validation error");
          console.log(error);
          validationStore.setErrors(error);
          throw error;
      }
      
  },


  }
});