import React, { createContext, useState, useEffect, useContext } from 'react';
// import axios from 'axios'; // Убираем axios
import users from './storage/users.json'; // Импортируем JSON

const AuthContext = createContext();

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

export const AuthProvider = ({ children }) => {
    const [user, setUser] = useState(null);
    const [token, setToken] = useState(localStorage.getItem('token') || null);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        const initializeAuth = async () => {
            setLoading(true);
            if (token) {
                // axios.defaults.headers.common['Authorization'] = `Bearer ${token}`; // Убираем axios
                try {
                    // Замените на реальный запрос к API для получения данных пользователя
                    // const response = await axios.get('/api/user'); // Убираем axios
                    // setUser(response.data); // Убираем axios
                    // Ищем пользователя в JSON файле по токену (username)
                    const storedUsername = localStorage.getItem('username');
                    const foundUser = users.find(u => u.username === storedUsername);
                    if (foundUser) {
                        setUser(foundUser);
                    } else {
                        logout();
                    }
                } catch (error) {
                    console.error('Ошибка при аутентификации:', error);
                    logout(); // Очищаем токен, если он недействителен
                }
            }
            setLoading(false);
        };

        initializeAuth();
    }, [token]);

    const login = async ({ username, password }) => {
        return new Promise((resolve, reject) => {
            const foundUser = users.find(u => u.username === username && u.password === password);
            if (foundUser) {
                const newToken = username; // В качестве токена используем username
                localStorage.setItem('token', newToken);
                localStorage.setItem('username', username); // Сохраняем username
                setToken(newToken);
                // axios.defaults.headers.common['Authorization'] = `Bearer ${newToken}`; // Убираем axios
                setUser(foundUser);
                resolve();
            } else {
                reject(new Error('Неверный логин или пароль'));
            }
        });
    };

    const register = async ({ username, password }) => {
        return new Promise((resolve, reject) => {
            // Проверяем, существует ли уже пользователь с таким именем
            const existingUser = users.find(u => u.username === username);
            if (existingUser) {
                reject(new Error('Пользователь с таким именем уже существует'));
            } else {
                // В реальном приложении нужно добавить пользователя в базу данных
                // Здесь мы просто эмулируем добавление
                const newUser = {
                    id: users.length + 1,
                    username,
                    password
                };
                users.push(newUser);
                // Автоматически логиним после регистрации
                login({ username, password })
                    .then(resolve)
                    .catch(reject);
            }
        });
    };

    const logout = () => {
        localStorage.removeItem('token');
        localStorage.removeItem('username');
        setToken(null);
        setUser(null);
        // delete axios.defaults.headers.common['Authorization']; // Убираем axios
    };

    const value = {
        user,
        token,
        login,
        register,
        logout,
        loading,
    };

    return (
        <AuthContext.Provider value={value}>
            {!loading && children}
        </AuthContext.Provider>
    );
};