import { type AuthProvider, HttpError } from 'react-admin';
import data from './users.json';

/**
 * This authProvider is only for test purposes. Don't use it in production.
 */
export const authProvider: AuthProvider = {
    login: ({ username, password }) => {
        const user = data.users.find(
            (u) => u.username === username && u.password === password,
        );

        if (user) {
            const { password, ...userToPersist } = user;
            localStorage.setItem('user', JSON.stringify(userToPersist));
            return Promise.resolve();
        }

        return Promise.reject(
            new HttpError('Unauthorized', 401, {
                message: 'Invalid username or password',
            }),
        );
    },
    logout: () => {
        localStorage.removeItem('user');
        return Promise.resolve();
    },
    checkError: (error) => {
        const status = error.status;
        if (status === 401 || status === 403) {
            localStorage.removeItem('auth');
            return Promise.reject();
        }
        // other error code (404, 500, etc): no need to log out
        return Promise.resolve();
    },
    checkAuth: () =>
        localStorage.getItem('user') ? Promise.resolve() : Promise.reject(),
    getPermissions: () => {
        return Promise.resolve(undefined);
    },
    getIdentity: () => {
        const persistedUser = localStorage.getItem('user');
        const user = persistedUser ? JSON.parse(persistedUser) : null;

        return Promise.resolve(user);
    },
};

export default authProvider;