"use client";

import { create } from "zustand";
import { persist } from "zustand/middleware";

export interface AuthUser {
  id: string;
  name: string;
  email: string;
  initials: string;
}

interface AuthStore {
  user: AuthUser | null;
  isAuthenticated: boolean;
  hydrated: boolean;
  setUser: (user: AuthUser | null) => void;
  hydrateFromSession: () => Promise<void>;
  logout: () => Promise<void>;
}

export const useAuthStore = create<AuthStore>()(
  persist(
    (set) => ({
      user: null,
      isAuthenticated: false,
      hydrated: false,
      setUser: (user) => set({ user, isAuthenticated: !!user }),
      hydrateFromSession: async () => {
        try {
          const res = await fetch("/api/auth/session");
          const data = (await res.json()) as { authed: boolean; user: AuthUser | null };
          set({
            user: data.authed ? data.user : null,
            isAuthenticated: data.authed,
            hydrated: true,
          });
        } catch {
          set({ user: null, isAuthenticated: false, hydrated: true });
        }
      },
      logout: async () => {
        await fetch("/api/auth/session", { method: "POST" });
        set({ user: null, isAuthenticated: false });
      },
    }),
    {
      name: "postsync-auth",
      partialize: (state) => ({
        user: state.user,
        isAuthenticated: state.isAuthenticated,
      }),
    },
  ),
);
