import { gql, useMutation } from "@apollo/client";
import { Button, notification } from "antd";
import React, { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { insertAuditTrail } from "../../redux/application/application.actions";
import {
  selectBodyshop,
  selectCurrentUser,
} from "../../redux/user/user.selectors";
import AuditTrailMapping from "../../utils/AuditTrailMappings";

const mapStateToProps = createStructuredSelector({
  bodyshop: selectBodyshop,
  currentUser: selectCurrentUser,
});
const mapDispatchToProps = (dispatch) => ({
  insertAuditTrail: ({ jobid, operation }) =>
    dispatch(insertAuditTrail({ jobid, operation })),
});
export default connect(mapStateToProps, mapDispatchToProps)(JobsAdminUnvoid);

export function JobsAdminUnvoid({
  insertAuditTrail,
  bodyshop,
  job,
  currentUser,
}) {
  const { t } = useTranslation();
  const [loading, setLoading] = useState(false);
  const [updateJob] = useMutation(gql`
mutation UNVOID_JOB($jobId: uuid!) {
  update_jobs_by_pk(pk_columns: {id: $jobId}, _set: {voided: false, status: "${
    bodyshop.md_ro_statuses.default_imported
  }"}) {
    id
    voided
    status
  }
  insert_notes(objects: {jobid: $jobId, audit: true, created_by: "${
    currentUser.email
  }", text: "${t("jobs.labels.unvoidnote")}"}) {
    returning {
      id
    }
  }
}

  `);

  //       const result = await voidJob({
  //     variables: {
  //       jobId: job.id,
  //       job: {
  //         status: bodyshop.md_ro_statuses.default_void,
  //         voided: true,
  //       },
  //       note: [
  //         {
  //           jobid: job.id,
  //           created_by: currentUser.email,
  //           audit: true,
  //           text: t("jobs.labels.voidnote", {
  //             date: moment().format("MM/DD/yyy"),
  //             time: moment().format("hh:mm a"),
  //           }),
  //         },
  //       ],
  //     },
  //   });

  //   if (!!!result.errors) {
  //     notification["success"]({
  //       message: t("jobs.successes.voided"),
  //     });
  //     //go back to jobs list.
  //     history.push(`/manage/`);
  //   } else {
  //     notification["error"]({
  //       message: t("jobs.errors.voiding", {
  //         error: JSON.stringify(result.errors),
  //       }),
  //     });
  //   }

  const handleUpdate = async (values) => {
    setLoading(true);
    const result = await updateJob({
      variables: { jobId: job.id },
    });

    if (!result.errors) {
      notification["success"]({ message: t("jobs.successes.save") });

      insertAuditTrail({
        jobid: job.id,
        operation: AuditTrailMapping.admin_unvoicejob(),
      });
    } else {
      notification["error"]({
        message: t("jobs.errors.saving", {
          error: JSON.stringify(result.errors),
        }),
      });
    }
    setLoading(false);
    //Get the owner details, populate it all back into the job.
  };

  return (
    <Button loading={loading} disabled={!job.voided} onClick={handleUpdate}>
      {t("jobs.actions.unvoid")}
    </Button>
  );
}
