import { notifications } from "../../../../../shared/lib/notifications.ts";
import { modals } from "@mantine/modals";
import { useDealPageContext } from "../../../contexts/DealPageContext.tsx";
import { AssignmentSchema, DealService } from "../../../../../client";

const useEmployeesTab = () => {
    const { selectedDeal: deal, refetchDeal } = useDealPageContext();

    const manageEmployee = (dealId: number, userId: number, isAssign: boolean) => {
        DealService.manageEmployee({
            requestBody: {
                dealId,
                userId,
                isAssign,
            },
        })
            .then(({ ok, message }) => {
                notifications.guess(ok, { message });
                refetchDeal();
            })
            .catch((err) => console.log(err));
    };

    const onInputFinish = (userIdInput: string) => {
        const userId = parseInt(userIdInput);
        if (isNaN(userId)) {
            notifications.error({ message: "Ошибка, некорректные данные в QR-коде" });
            return;
        }

        if (!deal) return;
        manageEmployee(deal.id, userId, true);
    };

    const onAssignEmployeeByQrClick = () => {
        modals.openContextModal({
            modal: "scanningModal",
            innerProps: {
                label: "Отсканируйте QR-код",
                onScan: onInputFinish,
                closeOnScan: true,
            },
            withCloseButton: false,
        });
    };

    const onUnassignEmployeeClick = (assignment: AssignmentSchema) => {
        if (!deal) return;
        manageEmployee(deal.id, assignment.user.id, false);
    };

    const onAssignEmployeeManuallyClick = () => {
        if (!deal) return;

        modals.openContextModal({
            modal: "assignUserModal",
            title: `Назначение исполнителя`,
            withCloseButton: false,
            innerProps: {
                deal,
                manageEmployee,
            },
        });
    };

    return {
        onAssignEmployeeByQrClick,
        onAssignEmployeeManuallyClick,
        onUnassignEmployeeClick,
    };
};

export default useEmployeesTab;
