import { notification } from "antd";
import React from "react";
import { useMutation } from "react-apollo";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { INSERT_NEW_JOB_LINE, UPDATE_JOB_LINE } from "../../graphql/jobs-lines.queries";
import { toggleModalVisible } from "../../redux/modals/modals.actions";
import { selectJobLineEditModal } from "../../redux/modals/modals.selectors";
import JobLinesUpdsertModal from "./job-lines-upsert-modal.component";

const mapStateToProps = createStructuredSelector({
  jobLineEditModal: selectJobLineEditModal
});
const mapDispatchToProps = dispatch => ({
  toggleModalVisible: () => dispatch(toggleModalVisible("jobLineEdit"))
});

function JobLinesUpsertModalContainer({
  jobLineEditModal,
  toggleModalVisible
}) {
  const { t } = useTranslation();
  const [insertJobLine] = useMutation(INSERT_NEW_JOB_LINE);
  const [updateJobLine] = useMutation(UPDATE_JOB_LINE);

  const handleFinish = values => {
    if (!jobLineEditModal.context.id) {
      insertJobLine({
        variables: {
          lineInput: [{ jobid: jobLineEditModal.context.jobid, ...values }]
        }
      })
        .then(r => {
          if (jobLineEditModal.actions.refetch)
            jobLineEditModal.actions.refetch();
          toggleModalVisible();
          notification["success"]({
            message: t("joblines.successes.created")
          });
        })
        .catch(error => {
          notification["error"]({
            message: t("joblines.errors.creating", {
              message: error.message
            })
          });
        });
    } else {
      updateJobLine({
        variables: {
          lineId: jobLineEditModal.context.id,
          line: values
        }
      })
        .then(r => {
          notification["success"]({
            message: t("joblines.successes.updated")
          });
        })
        .catch(error => {
          notification["success"]({
            message: t("joblines.errors.updating", {
              message: error.message
            })
          });
        });
      if (jobLineEditModal.actions.refetch) jobLineEditModal.actions.refetch();
      toggleModalVisible();
    }
  };

  const handleCancel = () => {
    toggleModalVisible();
  };

  return (
    <JobLinesUpdsertModal
      visible={jobLineEditModal.visible}
      jobLine={jobLineEditModal.context}
      handleFinish={handleFinish}
      handleCancel={handleCancel}
    />
  );
}

export default connect(
  mapStateToProps,
  mapDispatchToProps
)(JobLinesUpsertModalContainer);
