import {
  Button,
  FormControl,
  InputAdornment,
  InputLabel,
  MenuItem,
  Select,
  TextField,
} from "@mui/material";
import { useFormik } from "formik";
import { Grid } from "../../../../components/grid/Grid";
import { SPACING } from "../../../../data/spacing";
import { Yup } from "../../../../lib/yup/yup";
import SaveIcon from "@mui/icons-material/Save";
import { PropTypes } from "prop-types";
import { changeBankForm } from "../../services/change-bank-form";
import { useDispatch } from "react-redux";
import {
  DRAWER,
  LOADING_END,
  LOADING_START,
} from "../../../../lib/redux/slices/appSlice";
import { useContext } from "react";
import { AppContext } from "../../../../contexts/AppContext";
import { updateBankForm } from "../../services/update-bank-form";
import { avicultureGetProfile } from "../../../aviculture/services/aviculture-get-profile";
import { slaughterGetProfile } from "../../../slaughter-house/services/slaughter-get-profile";
import { provinceGetProfile } from "../../../province/services/province-get-profile";
import { cityGetProfile } from "../../../city/services/city-get-profile";
import { slaughterHouseVetGetProfile } from "../../../slaughter-house-vet/services/slaughter-house-vet-get-profile";
import { vatFarmGetProfile } from "../../../vet-farm/services/vet-farm-get-profile";

export const ChangeBankForm = ({ item }) => {
  const [openNotif] = useContext(AppContext);
  const dispatch = useDispatch();
  const formik = useFormik({
    initialValues: {
      bankName: item?.userBankInfo?.bankName,
      cardNumber: item?.userBankInfo?.card,
      accountNumber: item?.userBankInfo?.account,
      shabaNumber: item?.userBankInfo?.shaba,
      accountHolder: item?.userBankInfo?.nameOfBankUser,
    },
    validationSchema: Yup.object({
      cardNumber: Yup.number()
        .required("این فیلد اجباری است!")
        .typeError("لطفا شماره کارتتان را وارد کنید!"),
      accountNumber: Yup.number()
        .required("این فیلد اجباری است!")
        .typeError("لطفا شماره حسابتان را وارد کنید!"),
      shabaNumber: Yup.number()
        .required("این فیلد اجباری است!")
        .typeError("لطفا شماره شبا را وارد کنید!"),
      accountHolder: Yup.string()
        .required("این فیلد اجباری است!")
        .typeError("لطفا نام صاحب حساب را وارد کنید!"),
    }),
  });

  return (
    <Grid container gap={SPACING.SMALL} direction="column" display={"flex"}>
      <Grid container gap={SPACING.SMALL} direction={"column"}>
        <Grid>
          <FormControl fullWidth>
            <InputLabel id="demo-simple-select-label">بانک</InputLabel>
            <Select
              fullWidth
              value={formik.values.bankName}
              id="bankName"
              label="بانک"
              onChange={(e) => {
                formik.setFieldValue("bankName", e.target.value);
              }}
            >
              <MenuItem value={"موسسه افضل توس"}>موسسه افضل توس</MenuItem>
              <MenuItem value={"انصار"}>انصار</MenuItem>
              <MenuItem value={"سپه"}>سپه</MenuItem>
              <MenuItem value={"دی"}>دی</MenuItem>
              <MenuItem value={"کاب"}>اقتصاد نوین</MenuItem>
              <MenuItem value={"گردشگری"}>گردشگری</MenuItem>
              <MenuItem value={"حکمت ایرانیان"}>حکمت ایرانیان</MenuItem>
              <MenuItem value={"ایران زمین"}>ایران زمین</MenuItem>
              <MenuItem value={"کشاورزی"}>کشاورزی</MenuItem>
              <MenuItem value={"مسکن"}>مسکن</MenuItem>
              <MenuItem value={"مهر ایران"}>مهر ایران</MenuItem>
              <MenuItem value={"مهر اقتصاد"}>مهر اقتصاد</MenuItem>
              <MenuItem value={"ملت"}>ملت</MenuItem>
              <MenuItem value={"ملی"}>ملی</MenuItem>
              <MenuItem value={"پارسیان"}>پارسیان</MenuItem>
              <MenuItem value={"پاسارگاد"}>پاسارگاد</MenuItem>
              <MenuItem value={"پست بانک ایران"}>پست بانک ایران</MenuItem>
              <MenuItem value={"صادرات"}>صادرات</MenuItem>
              <MenuItem value={"سامان"}>سامان</MenuItem>
              <MenuItem value={"صنعت و معدن"}>صنعت و معدن</MenuItem>
              <MenuItem value={"سرمایه"}>سرمایه</MenuItem>
              <MenuItem value={"شهر"}>شهر</MenuItem>
              <MenuItem value={"سینا"}>سینا</MenuItem>
              <MenuItem value={"تجارت"}>تجارت</MenuItem>
              <MenuItem value={"موسسه اعتباری توسعه"}>
                موسسه اعتباری توسعه
              </MenuItem>
              <MenuItem value={"خاورمیانه"}>خاورمیانه</MenuItem>
            </Select>
          </FormControl>
        </Grid>

        <Grid>
          <TextField
            fullWidth
            id="cardNumber"
            label="شماره کارت"
            value={formik.values.cardNumber}
            error={
              formik.touched.cardNumber
                ? Boolean(formik.errors.cardNumber)
                : null
            }
            onChange={formik.handleChange}
            onBlur={formik.handleBlur}
            helperText={
              formik.touched.cardNumber && Boolean(formik.errors.cardNumber)
                ? formik.errors.cardNumber
                : null
            }
            autoComplete="current-password"
            variant="outlined"
          />
        </Grid>

        <Grid>
          <TextField
            fullWidth
            id="accountNumber"
            label="شماره حساب"
            value={formik.values.accountNumber}
            error={
              formik.touched.accountNumber
                ? Boolean(formik.errors.accountNumber)
                : null
            }
            onChange={formik.handleChange}
            onBlur={formik.handleBlur}
            helperText={
              formik.touched.accountNumber &&
              Boolean(formik.errors.accountNumber)
                ? formik.errors.accountNumber
                : null
            }
            autoComplete="current-password"
            variant="outlined"
          />
        </Grid>
        <Grid>
          <TextField
            fullWidth
            id="shabaNumber"
            label="شماره شبا"
            value={formik.values.shabaNumber}
            error={
              formik.touched.shabaNumber
                ? Boolean(formik.errors.shabaNumber)
                : null
            }
            InputProps={{
              endAdornment: <InputAdornment position="end">IR</InputAdornment>,
            }}
            onChange={formik.handleChange}
            onBlur={formik.handleBlur}
            helperText={
              formik.touched.shabaNumber && Boolean(formik.errors.shabaNumber)
                ? formik.errors.shabaNumber
                : null
            }
            autoComplete="current-password"
            variant="outlined"
          />
        </Grid>
        <Grid>
          <TextField
            fullWidth
            id="accountHolder"
            label="نام صاحب حساب"
            value={formik.values.accountHolder}
            error={
              formik.touched.accountHolder
                ? Boolean(formik.errors.accountHolder)
                : null
            }
            onChange={formik.handleChange}
            onBlur={formik.handleBlur}
            helperText={
              formik.touched.accountHolder &&
              Boolean(formik.errors.accountHolder)
                ? formik.errors.accountHolder
                : null
            }
            variant="outlined"
          />
        </Grid>
        <Grid>
          <Button
            onClick={() => {
              dispatch(LOADING_START());
              if (item.userBankInfo) {
                dispatch(
                  updateBankForm({
                    name_of_bank_user: formik.values.accountHolder,
                    bank_name: formik.values.bankName,
                    card: formik.values.cardNumber,
                    shaba: formik.values.shabaNumber,
                    account: formik.values.accountNumber,
                    key: item.userBankInfo.key,
                  })
                ).then((r) => {
                  dispatch(LOADING_END());
                  if (r.error) {
                    openNotif({
                      vertical: "top",
                      horizontal: "center",
                      msg: "مشکلی پیش آمده است!",
                      severity: "error",
                    });
                  } else {
                    dispatch(avicultureGetProfile());
                    dispatch(slaughterGetProfile());
                    dispatch(provinceGetProfile());
                    dispatch(cityGetProfile());
                    dispatch(slaughterHouseVetGetProfile());
                    dispatch(vatFarmGetProfile());
                    dispatch(
                      DRAWER({ right: false, bottom: false, content: null })
                    );
                    openNotif({
                      vertical: "top",
                      horizontal: "center",
                      msg: "عملیات با موفقیت انجام شد.",
                      severity: "success",
                    });
                  }
                });
              } else {
                dispatch(
                  changeBankForm({
                    name_of_bank_user: formik.values.accountHolder,
                    bank_name: formik.values.bankName,
                    card: formik.values.cardNumber,
                    shaba: formik.values.shabaNumber,
                    account: formik.values.accountNumber,
                    key: item.key ? item.key : null,
                  })
                ).then((r) => {
                  dispatch(LOADING_END());
                  if (r.error) {
                    openNotif({
                      vertical: "top",
                      horizontal: "center",
                      msg: "مشکلی پیش آمده است!",
                      severity: "error",
                    });
                  } else {
                    dispatch(avicultureGetProfile());
                    dispatch(slaughterGetProfile());
                    dispatch(provinceGetProfile());
                    dispatch(cityGetProfile());
                    dispatch(slaughterHouseVetGetProfile());
                    dispatch(vatFarmGetProfile());

                    dispatch(
                      DRAWER({ right: false, bottom: false, content: null })
                    );
                    openNotif({
                      vertical: "top",
                      horizontal: "center",
                      msg: "عملیات با موفقیت انجام شد.",
                      severity: "success",
                    });
                  }
                });
              }
            }}
            fullWidth
            size="large"
            variant="contained"
            startIcon={<SaveIcon />}
          >
            ذخیره تغییرات
          </Button>
        </Grid>
      </Grid>
    </Grid>
  );
};

ChangeBankForm.propTypes = {
  item: PropTypes.object,
};
