import { Formik } from "formik";
import { Fragment, useEffect, useRef, useState } from "react";
import { Button, Form } from "react-bootstrap";
import * as Yup from "yup";
import { FaArrowRight, FaTimes } from "react-icons/fa";
import Image from "next/image";
import { getSession } from "next-auth/react";
import "react-bootstrap-typeahead/css/Typeahead.css";
import { useDispatch, useSelector } from "react-redux";
import { getLoggedInVendor, updateVendorBusinessDetails } from "../../redux/actions/vendorActions";
import { loadUser, updateUserApprovalStatus } from "../../redux/actions/userActions";
import { useRouter } from "next/router";

const BusinessDetails = () => {
  const [session, setSession] = useState(null);
  const dispatch = useDispatch();
  const router = useRouter()
  const { loggedInVendor } = useSelector(state => state.loggedInVendor);
  const { vendorDetails } = useSelector(state => state.vendorDetails);
  const { user, error } = useSelector(state => state.loadedUser);
  //   const [pincodeData, setPinCodeData] = useState()
  //   const ref = useRef(null);
  // console.log("vendorDetails", vendorDetails);
  const [disableFields, setdisableFields] = useState();
  useEffect(() => {
    console.log("user", user);
    if (user) {
      if (user.approved == "approved" || user.approved == "rejected") {
        setdisableFields(false);
      } else if (user.approved == "pending") {
        setdisableFields(true);
      }
    }
  }, [user]);
  // console.log("userStatus", userStatus);
  useEffect(() => {
    const fetchSession = async () => {
      setSession(await getSession());
    };
    fetchSession();
    // dispatch(getLoggedInVendor());
  }, []);
  // console.log("session", loggedInVendor);
  const businessDetailsValidationSchema = Yup.object().shape({
    panNumber: Yup.string().required("Pan Number is Required"),
    panFile: Yup.mixed(),
    gstNumber: Yup.string().required("GST Number is Required"),
    gstCertificateFile: Yup.mixed(),
    businessName: Yup.string().required("Business Name is Required"),
    brandLogoFile: Yup.mixed(),
    pincode: Yup.string().required("Pincode is Required"),
    country: Yup.string().required("Country is Required"),
    state: Yup.string().required("State is Required"),
    city: Yup.string().required("City is Required"),
    addressLine1: Yup.string().required("Address Line 1 is Required"),
    addressLine2: Yup.string().required("Address Line 2 is Required")
  });

  //   const handleSearch = async pin => {
  //     let pincodeDataSet = await pincodeSearchByFilter(pin);
  //     console.log("pincodeData", pincodeDataSet.data.data);
  //     setPinCodeData(pincodeDataSet.data.data)
  //   };

  let vendorData;

  if (vendorDetails) {
    vendorData = {
      panNumber: vendorDetails.attributes.pan,
      panFile: vendorDetails.attributes.panImage,
      gstNumber: vendorDetails.attributes.gst,
      gstCertificateFile: vendorDetails.attributes.gstImage,
      businessName: vendorDetails.attributes.businessName,
      brandLogoFile: vendorDetails.attributes.logo,
      pincode: vendorDetails.attributes.pincode,
      country: vendorDetails.attributes.country,
      state: vendorDetails.attributes.state,
      city: vendorDetails.attributes.city,
      addressLine1: vendorDetails.attributes.addressLine1,
      addressLine2: vendorDetails.attributes.addressLine2
    };
  }

  const ApprovalStatus = () => {
    if (user) {
      switch (user.approved) {
        case "approved":
          return <></>;

        case "rejected":
          return (
            <>
              <div class="alert alert-danger" role="alert">
                Your profile has been rejected! Please contact the admin for more details!
              </div>
            </>
          );

        case "pending":
          return (
            <>
              <div class="alert alert-primary" role="alert">
                Your profile is under consideration, please wait till admin gives approval
              </div>
            </>
          );

        case "none":
          return <></>;

        default:
          break;
      }
    }
  };
  // vendorDetails && console.log("vendorData", vendorData, vendorDetails.length > 0);
  return (
    <Fragment>
      {user && (
        <div className="container p-5">
          <div className="row">
            <div className="col-12 col-lg-8">
              <div className="content-div business-details">
                <h2>Tell us about your business</h2>
                <p>Please have the following ready before you begin</p>
                <p>
                  <FaArrowRight /> Your bank account details for receiving payments from ZanGO
                </p>
                <p className="mb-4">
                  <FaArrowRight /> Tax (GST/PAN) details of your business.
                </p>
                <hr />
                <div className="form-container mt-4">
                  <ApprovalStatus />
                  <Formik
                    enableReinitialize
                    initialValues={{
                      panNumber: vendorData?.panNumber ? vendorData?.panNumber : "",
                      panFile: vendorData?.panImage ? vendorData?.panImage : "",
                      gstNumber: vendorData?.gstNumber ? vendorData?.gstNumber : "",
                      gstCertificateFile: vendorData?.gstImage ? vendorData?.gstImage : "",
                      businessName: vendorData?.businessName ? vendorData?.businessName : "",
                      brandLogoFile: vendorData?.logo ? vendorData?.logo : "",
                      pincode: vendorData?.pincode ? vendorData?.pincode : "",
                      country: vendorData?.country ? vendorData?.country : "",
                      state: vendorData?.state ? vendorData?.state : "",
                      city: vendorData?.city ? vendorData?.city : "",
                      addressLine1: vendorData?.addressLine1 ? vendorData?.addressLine1 : "",
                      addressLine2: vendorData?.addressLine2 ? vendorData?.addressLine2 : ""
                    }}
                    validationSchema={businessDetailsValidationSchema}
                    // enableReinitialize={true}
                    onSubmit={async values => {
                      console.log("business details values", values);
                      const businessDetails = {
                        pan: values.panNumber,
                        gst: values.gstNumber,
                        businessName: values.businessName,
                        state: values.state,
                        city: values.city,
                        pincode: values.pincode,
                        country: values.country,
                        addressLine1: values.addressLine1,
                        addressLine2: values.addressLine2
                      };
                      // await dispatch(updateVendorBusinessDetails({businessDetails, }))

                      const response = await dispatch(getLoggedInVendor());

                      console.log("loggedInVendorReducer", response);

                      const updateBusinessDetails = await dispatch(updateVendorBusinessDetails({ businessDetails, vendorId: response.id }));
                      await updateUserApprovalStatus({ status: "pending" });
                      await dispatch(loadUser());
                      router.push("/vendor/dashboard")
                      // console.log("updateBusinessDetails", updateBusinessDetails);
                    }}
                  >
                    {({ values, errors, touched, handleChange, handleBlur, handleSubmit, setFieldValue }) => (
                      <Form
                        onSubmit={e => {
                          e.preventDefault();
                          handleSubmit();
                        }}
                      >
                        <h4>Vendor Business Information</h4>
                        <div className="mt-3">
                          <p className="textH">Business documents</p>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>Enter Business PAN No.</label>
                                <input type="text" name="panNumber" onChange={handleChange} onBlur={handleBlur} value={values.panNumber} disabled={disableFields} />
                                {errors.panNumber && touched.panNumber && <span className="form-error">{errors.panNumber}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>Upload PAN</label>
                                <div className="custom-file">
                                  <input
                                    disabled={disableFields}
                                    type="file"
                                    className="custom-file-input"
                                    id="panFile"
                                    name="panFile"
                                    onChange={event => {
                                      if (event) {
                                        const file = event.currentTarget.files[0];
                                        setFieldValue("panFile", file);
                                      }
                                    }}
                                    onBlur={handleBlur}
                                    // value={values.panFile}
                                    onClick={event => {
                                      const { target = {} } = event || {};
                                      target.value = "";
                                    }}
                                  />
                                  <label className="custom-file-label" htmlFor="panFile">
                                    Upload
                                  </label>
                                </div>
                                <p className="textS">Upload in .PNG or .JPG/JPEG format</p>
                                {errors.panFile && touched.panFile && <span className="form-error">{errors.panFile}</span>}
                                {values.panFile && (
                                  <div className="d-flex align-items-center justify-content-between p-1" style={{ width: "100%" }}>
                                    <p className="textS m-0">{values.panFile.name}</p>
                                    <FaTimes
                                      style={{ cursor: "pointer" }}
                                      onClick={() => {
                                        setFieldValue("panFile", "");
                                      }}
                                    />
                                  </div>
                                )}
                              </div>
                            </div>
                          </div>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>GST Number</label>
                                <input disabled={disableFields} type="text" name="gstNumber" onChange={handleChange} onBlur={handleBlur} value={values.gstNumber} />
                                {errors.gstNumber && touched.gstNumber && <span className="form-error">{errors.gstNumber}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>GST Certificate</label>
                                <div className="custom-file">
                                  <input
                                    disabled={disableFields}
                                    type="file"
                                    className="custom-file-input"
                                    id="gstCertificateFile"
                                    name="gstCertificateFile"
                                    onChange={handleChange}
                                    onBlur={handleBlur}
                                    value={values.gstCertificateFile}
                                  />
                                  <label className="custom-file-label" htmlFor="gstCertificateFile">
                                    Upload
                                  </label>
                                </div>
                                <p className="textS">Upload in .PNG or .JPG/JPEG format</p>
                                {errors.gstCertificateFile && touched.gstCertificateFile && <span className="form-error">{errors.gstCertificateFile}</span>}
                              </div>
                            </div>
                          </div>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>Business Name</label>
                                <input disabled={disableFields} type="text" name="businessName" onChange={handleChange} onBlur={handleBlur} value={values.businessName} />
                                {errors.businessName && touched.businessName && <span className="form-error">{errors.businessName}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>Brand Logo</label>
                                <div className="custom-file">
                                  <input
                                    disabled={disableFields}
                                    type="file"
                                    className="custom-file-input"
                                    id="brandLogoFile"
                                    name="brandLogoFile"
                                    onChange={handleChange}
                                    onBlur={handleBlur}
                                    value={values.brandLogoFile}
                                  />
                                  <label className="custom-file-label" htmlFor="brandLogoFile">
                                    Upload
                                  </label>
                                </div>
                                <p className="textS">Upload in .PNG or .JPG/JPEG format</p>
                                {errors.brandLogoFile && touched.brandLogoFile && <span className="form-error">{errors.brandLogoFile}</span>}
                              </div>
                            </div>
                          </div>
                        </div>
                        <hr />
                        <div className="mt-4">
                          <p className="textH">Business Address</p>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>Pincode</label>
                                {/* <AsyncTypeahead
                                onSearch={handleSearch}
                                minLength={3}
                                value={values.pincode}
                                id="basic-behaviors-example"
                                labelKey="name"
                                options={pincodeData && pincodeData.length>0 && pincodeData.map(item=>{
                                    return {name: item.attributes.name, id: item.id}
                                })}
                                placeholder="Choose a state..."
                                ref={ref}
                                onBlur={() => {
                                  console.log(ref.current);
                                  if (!ref.current.state.selected.length > 0) {
                                    ref.current?.clear();
                                  }
                                }}
                                onChange={(e) => {
                                  console.log("input change", e);
                                }}
                              /> */}
                                <input disabled={disableFields} type="text" name="pincode" onChange={handleChange} onBlur={handleBlur} value={values.pincode} />
                                {errors.pincode && touched.pincode && <span className="form-error">{errors.pincode}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>Country</label>
                                <input disabled={disableFields} type="text" name="country" onChange={handleChange} onBlur={handleBlur} value={values.country} />
                                {errors.country && touched.country && <span className="form-error">{errors.country}</span>}
                              </div>
                            </div>
                          </div>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>State</label>
                                <input disabled={disableFields} type="text" name="state" onChange={handleChange} onBlur={handleBlur} value={values.state} />
                                {errors.state && touched.state && <span className="form-error">{errors.state}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>City</label>
                                <input disabled={disableFields} type="text" name="city" onChange={handleChange} onBlur={handleBlur} value={values.city} />
                                {errors.city && touched.city && <span className="form-error">{errors.city}</span>}
                              </div>
                            </div>
                          </div>
                          <div className="row">
                            <div className="col-12 col-lg-5">
                              <div className="input-group">
                                <label>Address Line 1</label>
                                <input disabled={disableFields} type="text" name="addressLine1" onChange={handleChange} onBlur={handleBlur} value={values.addressLine1} />
                                {errors.addressLine1 && touched.addressLine1 && <span className="form-error">{errors.addressLine1}</span>}
                              </div>
                            </div>
                            <div className="col-12 offset-lg-1 col-lg-5">
                              <div className="input-group">
                                <label>Address Line 2</label>
                                <input disabled={disableFields} type="text" name="addressLine2" onChange={handleChange} onBlur={handleBlur} value={values.addressLine2} />
                                {errors.addressLine2 && touched.addressLine2 && <span className="form-error">{errors.addressLine2}</span>}
                              </div>
                            </div>
                          </div>
                        </div>
                        <div className="row mt-3 mb-1">
                          <div className="col-12 col-lg-5">
                            <div className="input-group">
                              <Button disabled={disableFields} type="submit" className="btn btn-primary btn-submit">
                                Send for Approval
                              </Button>
                            </div>
                          </div>
                        </div>
                      </Form>
                    )}
                  </Formik>
                </div>
              </div>
            </div>
            <div className="col-12 col-lg-4">
              <div className="content-div help-center">
                <h2>Help Center</h2>
                <ul className="helplist">
                  <li>
                    <Image alt="" src="/images/vendor/question.svg" width="22" height="22" />
                    <p>Lorem Ipsum Dolor Sit?</p>
                  </li>
                  <li>
                    <Image alt="" src="/images/vendor/question.svg" width="22" height="22" />
                    <p>Lorem Ipsum Dolor Sit?</p>
                  </li>
                  <li>
                    <Image alt="" src="/images/vendor/question.svg" width="22" height="22" />
                    <p>Lorem Ipsum Dolor Sit?</p>
                  </li>
                  <li>
                    <Image alt="" src="/images/vendor/question.svg" width="22" height="22" />
                    <p>Lorem Ipsum Dolor Sit?</p>
                  </li>
                  <li>
                    <Image alt="" src="/images/vendor/call.svg" width="32" height="32" />
                    <p>+1 (407) 8798 789</p>
                  </li>
                </ul>
              </div>
            </div>
          </div>
        </div>
      )}
    </Fragment>
  );
};

export default BusinessDetails;