"use client";

import React, { createContext, useContext, useState, useEffect } from "react";
import { useRouter } from "next/navigation";

const AuthContext = createContext(null);

// фейковые пользователи (3 логина/пароля)
const USERS = [
  {
    id: 1,
    role: "user", // обычный пользователь
    name: "Пользователь",
    login: "user@mail.com",
    password: "user123",
  },
  {
    id: 2,
    role: "volunteer",
    name: "Волонтёр",
    login: "vol@mail.com",
    password: "vol123",
  },
    {
    id: 3,
    role: "moderator",
    name: "Модератор",
    login: "mod@mail.com",
    password: "mod123",
  },
];

export const AuthProvider = ({ children }) => {
  const [user, setUser] = useState(null); // {id, role, name, login}
  const [loading, setLoading] = useState(true);
  const router = useRouter();

  // Поднимаем пользователя из localStorage, чтобы контекст сохранялся между перезагрузками
  useEffect(() => {
    const saved = typeof window !== "undefined" ? localStorage.getItem("authUser") : null;
    if (saved) {
      setUser(JSON.parse(saved));
    }
    setLoading(false);
  }, []);

  const login = async (login, password) => {
    // имитация запроса на бэк
    const found = USERS.find(
      (u) => u.login === login && u.password === password
    );
    if (!found) {
      throw new Error("Неверный логин или пароль");
    }

    const authUser = {
      id: found.id,
      role: found.role,
      name: found.name,
      login: found.login,
    };

    setUser(authUser);
    localStorage.setItem("authUser", JSON.stringify(authUser));

    // после логина перенаправляем на стартовую страницу по роли
    if (found.role === "user") router.push("/home");
    if (found.role === "volunteer") router.push("/mainValounter");
    if (found.role === "moderator") router.push("/moderatorMain");
  };

  const logout = () => {
    setUser(null);
    localStorage.removeItem("authUser");
    router.push("/login");
  };

  const value = {
    user,
    loading,
    isAuthenticated: !!user,
    login,
    logout,
  };

  return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;
};

export const useAuth = () => useContext(AuthContext);
