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<BookStatus>('') 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