"use client"
import { createSlice } from "@reduxjs/toolkit";
import { useEffect, useState } from "react";

const initialState = {
    user:  typeof window !== "undefined" ? JSON.parse(localStorage.getItem("user") || "null") : null,
    isAuthenticated: typeof window !== "undefined" && !!localStorage.getItem("user"),
};

const userSlice = createSlice({
    name: "user",
    initialState,
    reducers: {
        login(state, action) {
            state.user = action.payload;
            state.isAuthenticated = true;
            if (typeof window !== "undefined") {
                localStorage.setItem("user", JSON.stringify(action.payload));
            }
        },
        logout(state) {
            state.user = null;
            state.isAuthenticated = false;
            if (typeof window !== "undefined") {
                localStorage.removeItem("user");
            }
        },
    },
});

export const { login, logout } = userSlice.actions;

export const selectIsAuthenticated = (state) => state.user.isAuthenticated;
export const selectUser = (state) => state.user.user;

export default userSlice.reducer;

export function useUser() {
    const [user, setUser] = useState(null);

    useEffect(() => {
        if (typeof window !== "undefined") {
            const storedUser = localStorage.getItem("user");
            setUser(storedUser ? JSON.parse(storedUser) : null);
        }
    }, []);

    return user;
}
