export const useAuth = () => {
const history = useHistory();
const { user, setUser } = useContext(UserContext);
const [, setLocalStorageUser] = useLocalStorage('user', null);
const [showAlert, setShowAlert] = useState(false);
const [alertMessage, setAlertMessage] = useState("");
const [alertHeader, setAlertHeader] = useState("");
const handleAlert = (show, message, header) => {
setShowAlert(show);
setAlertMessage(message);
setAlertHeader(header);
};
const registerUser = useCallback(async (data, resetFormCallback) => {
// Validation
if (data.password !== data.confirmPassword) {
handleAlert(true, "Las contraseñas no coinciden.", "Advertencia");
return;
}
delete data.confirmPassword;
try {
const createdUser = await createUser(data);
if (createdUser.ok) {
const loginUserData = { correo: data.correo, password: data.password };
const registedUserData = await loginUser(loginUserData);
if (registedUserData.ok) {
setLocalStorageUser(registedUserData.data);
setUser(registedUserData.data);
handleAlert(true, `Bienvenido ${registedUserData.data.nombre}`, "Usuario creado");
resetFormCallback?.();
history.push("/chat");
} else {
handleAlert(true, registedUserData.messageError, "Advertencia");
}
} else {
handleAlert(true, createdUser.messageError, "Advertencia");
}
} catch (error) {
console.error(`Mensaje de error: ${error}`);
}
}, [history, setUser, setLocalStorageUser]);
const login = useCallback(async (logindata, resetFormCallback) => {
try {
const registedUserData = await loginUser(logindata);
if (registedUserData.ok) {
setUser(registedUserData.data);
setLocalStorageUser(registedUserData.data);
handleAlert(true, `Bienvenido ${registedUserData.data.nombre}`, "Sesión iniciada");
resetFormCallback?.();
history.push("/chat");
} else {
handleAlert(true, registedUserData.messageError, "Advertencia");
}
} catch (error) {
console.error(`Mensaje de error: ${error}`);
}
}, [history, setUser, setLocalStorageUser]);
const logout = () => {
history.push('/home');
setUser(null);
setLocalStorageUser(null);
}
return {
registerUser,
login,
logout,
showAlert,
alertMessage,
alertHeader,
handleAlert
}
}