import { useState } from "react" import { useNavigate } from "react-router-dom" import { getToken } from "../../utils/auth" import { API_URL } from "../../config" import { isObject } from "../../utils/types" import { handleHTTPErrors } from "../../utils" type BookResponse = { Success: boolean } const isBookResponse = (obj: unknown): obj is BookResponse => isObject(obj, { "Success": "boolean" }) type BookStatus = "" | "Загрузка..." | "Забронировано" | "Ошибка бронирования" function useBook(id: number) { const navigate = useNavigate() const [status, setStatus] = useState('') const handleBook = async () => { const token = getToken() if (token) { setStatus("Загрузка...") try { const res = await fetch(API_URL + '/book', { method: 'POST', body: JSON.stringify({ id: id }), headers: { 'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json' } }) handleHTTPErrors(res) const data: unknown = await res.json() if (!isBookResponse(data)) { throw new Error("Malformed server response") } if (data.Success === true) { setStatus('Забронировано') } else { throw new Error("Server refused to book") } } catch (err) { setStatus("Ошибка бронирования") if (import.meta.env.DEV) { console.log(err) } } } else { return navigate("/login") } } return { handleBook, status } } export default useBook