import AsyncStorage from '@react-native-async-storage/async-storage';
import { create } from 'zustand';
import { createJSONStorage, persist } from 'zustand/middleware';

type DriverUser = {
  id: string;
  role: string;
  email?: string;
  phone?: string;
  status?: string;
};

type DriverSessionState = {
  online: boolean;
  accessToken: string;
  refreshToken: string;
  user: DriverUser | null;
  setOnline: (online: boolean) => void;
  setSession: (payload: { accessToken: string; refreshToken?: string; user?: DriverUser | null }) => void;
  clearSession: () => void;
};

export const useDriverSession = create<DriverSessionState>()(
  persist(
    (set) => ({
      online: false,
      accessToken: '',
      refreshToken: '',
      user: null,
      setOnline: (online) => set({ online }),
      setSession: (payload) =>
        set({
          accessToken: payload.accessToken,
          refreshToken: payload.refreshToken ?? '',
          user: payload.user ?? null,
        }),
      clearSession: () =>
        set({
          online: false,
          accessToken: '',
          refreshToken: '',
          user: null,
        }),
    }),
    {
      name: 'chego-mobile-driver-session',
      storage: createJSONStorage(() => AsyncStorage),
      partialize: (state) => ({
        online: state.online,
        accessToken: state.accessToken,
        refreshToken: state.refreshToken,
        user: state.user,
      }),
    },
  ),
);
