'use client';
import { useCallback, useEffect, useState } from 'react';
import { authService } from '@/services/auth.service';
import type { AuthSession, LoginPayload, RegisterPayload } from '@/types';

const STORAGE_KEY = 'lv_session';

export function useAuth() {
  const [session, setSession] = useState<AuthSession | null>(null);
  const [loading, setLoading] = useState(true);

  useEffect(() => {
    try {
      const raw = typeof window !== 'undefined' ? localStorage.getItem(STORAGE_KEY) : null;
      if (raw) setSession(JSON.parse(raw));
    } catch {
      /* ignore */
    }
    setLoading(false);
  }, []);

  const persist = useCallback((s: AuthSession | null) => {
    setSession(s);
    if (typeof window === 'undefined') return;
    if (s) localStorage.setItem(STORAGE_KEY, JSON.stringify(s));
    else localStorage.removeItem(STORAGE_KEY);
  }, []);

  const login = useCallback(
    async (payload: LoginPayload) => {
      const s = await authService.login(payload);
      persist(s);
      return s;
    },
    [persist],
  );

  const register = useCallback(
    async (payload: RegisterPayload) => {
      const s = await authService.register(payload);
      persist(s);
      return s;
    },
    [persist],
  );

  const logout = useCallback(async () => {
    await authService.logout();
    persist(null);
  }, [persist]);

  return {
    session,
    user: session?.user ?? null,
    storeId: session?.user.storeId ?? null,
    isAuthenticated: !!session,
    loading,
    login,
    register,
    logout,
  };
}
