import {api} from "./api";
import {requests} from "../../requests";
import {getComparator} from "../../components/core/getComparator";

class BarClient {

    getBarList(setBars, createError) {
        api().get(requests.bar.all)
            .then((r) => {
                setBars(r.data.sort(getComparator("name")))
            })
            .catch(() => {
                createError("Ошибка получения списков")
            })
    }

    changeBar(id, bars, createWarning, createSuccess, createError, setBars) {
        createWarning("Дождитесь окончания операции")
        api().post(`${requests.bar.change}/${id}`)
            .then(() => createSuccess("Список изменен"))
            .catch(() => createError("Ошибка изменения активного списка"))

        const newState = bars.map((b) => {
            if (b.active) {
                return {
                    ...b, active: false
                }
            }
            if (b.id === id) {
                return {
                    ...b, active: true
                }
            }
            return b;
        })
        setBars(newState);
    }

    deleteBar(bar, bars, createError, createSuccess, setBars) {
        if (bar.active) {
            createError("Нельзя удалить активный бар!")
            return;
        }
        api().delete(requests.bar.crud + bar.id)
            .then(() => createSuccess("Список удален"))
            .catch(() => createError("Ошибка удаления. Обновите страницу"))

        setBars(bars.filter((b) => b.id !== bar.id));
    }

    createBar(name, bars, createSuccess, createError, setBars, setOpen) {
        api().post(requests.bar.crud + name)
            .then((r) => {
                createSuccess("Cписок создан");
                let state = bars;
                state.push(r.data);
                setBars(state)
                setOpen(false)
            }).catch(() => createError("Ошибка создания списка"))
    }

    copyBar(oldId, newName, setBars, bars, createError, createSuccess, setOpen) {
        api().post(requests.bar.crud + "copy/" + oldId + "/" + newName)
            .then((r) => {
                const state = bars;
                state.push(r.data)
                setBars(state);
                createSuccess("Бар скопирован")
                setOpen(false)
            }).catch(() => createError("Ошибка при копировании бара"))
    }
}

export const barClient = new BarClient();