import { Button, InputAdornment, TextField } from "@mui/material";
import { DatePicker } from "@mui/x-date-pickers";
import { SPACING } from "../../../../data/spacing";
import { useFormik } from "formik";
import moment from "moment";
import { Yup } from "../../../../lib/yup/yup";
import { useDispatch } from "react-redux";

import { provinceGetPricing } from "../../services/province-get-pricing";
import { provinceNewPricing } from "../../services/province-new-pricing";
import { useEffect } from "react";
import {
  DRAWER,
  LOADING_END,
  LOADING_START,
} from "../../../../lib/redux/slices/appSlice";
import { Grid } from "../../../../components/grid/Grid";
import { useContext } from "react";
import { AppContext } from "../../../../contexts/AppContext";
import { NumberInput } from "../../../../components/number-format-custom/NumberFormatCustom";

export const ProvinceSubmitPricing = () => {
  const [openNotif] = useContext(AppContext);
  //   const ProvincePrices = [];
  const dispatch = useDispatch();

  const formik = useFormik({
    initialValues: {
      date: moment(Date()).format("YYYY-MM-DD hh:mm:ss"),
      price: "",
      // slaughtedprice: "",
      // priceforseller: "",
      floorprice: "",
      ceilingprice: "",
    },
    validationSchema: Yup.object({
      price: Yup.number()
        .required("این فیلد اجباری است!")
        .typeError("لطفا عدد وارد کنید!"),
      // slaughtedprice: Yup.number()
      //   .required("این فیلد اجباری است!")
      //   .typeError("لطفا عدد وارد کنید!"),
      // priceforseller: Yup.number()
      //   .required("این فیلد اجباری است!")
      //   .typeError("لطفا عدد وارد کنید!"),
      // floorprice: Yup.number()
      //   .required("این فیلد اجباری است!")
      //   .typeError("لطفا عدد وارد کنید!"),
      // ceilingprice: Yup.number()
      //   .required("این فیلد اجباری است!")
      //   .typeError("لطفا عدد وارد کنید!"),
    }),
  });

  useEffect(() => {
    formik.validateForm();
  }, []);

  return (
    <Grid
      container
      gap={SPACING.SMALL}
      direction="column"
      height="100%"
      justifyContent="space-between"
    >
      <Grid>
        <DatePicker
          fullWidth
          label="تاریخ"
          id="date"
          renderInput={(params) => <TextField {...params} />}
          value={formik.values.date}
          error={formik.touched.date ? Boolean(formik.errors.date) : null}
          onChange={(e) => {
            formik.setFieldValue(
              "date",
              moment(e).format("YYYY-MM-DD hh:mm:ss")
            );
          }}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.date && Boolean(formik.errors.date)
              ? formik.errors.date
              : null
          }
        />
      </Grid>
      <Grid>
        <NumberInput
          allowLeadingZeros
          thousandSeparator=","
          fullWidth
          id="price"
          label="قیمت هر کیلو مرغ زنده"
          variant="outlined"
          InputLabelProps={{
            shrink: true,
          }}
          InputProps={{
            endAdornment: (
              <InputAdornment position="start">ریال</InputAdornment>
            ),
          }}
          value={formik.values.price}
          error={formik.touched.price ? Boolean(formik.errors.price) : null}
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.price && Boolean(formik.errors.price)
              ? formik.errors.price
              : null
          }
        />
      </Grid>

      {/* <Grid>
        <TextField
          fullWidth
          id="slaughtedprice"
          label="قیمت هر کیلو مرغ کشتار شده درب کشتارگاه"
          variant="outlined"
          InputLabelProps={{
            shrink: true,
          }}
          InputProps={{
            endAdornment: (
              <InputAdornment position="start">ریال</InputAdornment>
            ),
          }}
          value={formik.values.slaughtedprice}
          error={
            formik.touched.slaughtedprice
              ? Boolean(formik.errors.slaughtedprice)
              : null
          }
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.slaughtedprice &&
            Boolean(formik.errors.slaughtedprice)
              ? formik.errors.slaughtedprice
              : null
          }
        />
      </Grid>
      <Grid>
        <TextField
          fullWidth
          id="priceforseller"
          label="قیمت هر کیلو گرم برای فروشنده مرغ عمده"
          variant="outlined"
          InputLabelProps={{
            shrink: true,
          }}
          InputProps={{
            endAdornment: (
              <InputAdornment position="start">ریال</InputAdornment>
            ),
          }}
          value={formik.values.priceforseller}
          error={
            formik.touched.priceforseller
              ? Boolean(formik.errors.priceforseller)
              : null
          }
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.priceforseller &&
            Boolean(formik.errors.priceforseller)
              ? formik.errors.priceforseller
              : null
          }
        />
      </Grid> */}

      <Grid>
        <NumberInput
          allowLeadingZeros
          thousandSeparator=","
          fullWidth
          id="floorprice"
          label="قیمت کف"
          variant="outlined"
          InputLabelProps={{
            shrink: true,
          }}
          InputProps={{
            endAdornment: (
              <InputAdornment position="start">ریال</InputAdornment>
            ),
          }}
          value={formik.values.floorprice}
          error={
            formik.touched.floorprice ? Boolean(formik.errors.floorprice) : null
          }
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.floorprice && Boolean(formik.errors.floorprice)
              ? formik.errors.floorprice
              : null
          }
        />
      </Grid>
      <Grid>
        <NumberInput
          allowLeadingZeros
          thousandSeparator=","
          fullWidth
          id="ceilingprice"
          label="قیمت سقف"
          variant="outlined"
          InputLabelProps={{
            shrink: true,
          }}
          InputProps={{
            endAdornment: (
              <InputAdornment position="start">ریال</InputAdornment>
            ),
          }}
          value={formik.values.ceilingprice}
          error={
            formik.touched.ceilingprice
              ? Boolean(formik.errors.ceilingprice)
              : null
          }
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          helperText={
            formik.touched.ceilingprice && Boolean(formik.errors.ceilingprice)
              ? formik.errors.ceilingprice
              : null
          }
        />
      </Grid>

      <Grid>
        <Button
          fullWidth
          variant="contained"
          component="label"
          disabled={!formik.isValid}
          size="large"
          onClick={() => {
            if (formik.values.floorprice > formik.values.ceilingprice) {
              openNotif({
                vertical: "top",
                horizontal: "center",
                msg: "قیمت گذاری غیر استاندارد است!",
                severity: "error",
              });
            } else {
              dispatch(LOADING_START());
              dispatch(
                provinceNewPricing({
                  date: formik.values.date,
                  // dead_chicken_price: formik.values.price,
                  live_chicken_price: formik.values.price,
                  // major_seller_price: formik.values.priceforseller,
                  floor_price: formik.values.floorprice
                    ? formik.values.floorprice
                    : 0,
                  ceiling_price: formik.values.ceilingprice
                    ? formik.values.ceilingprice
                    : 0,
                })
              ).then((r) => {
                if (r.error) {
                  dispatch(LOADING_END());

                  openNotif({
                    vertical: "top",
                    horizontal: "center",
                    msg: "مشکلی پیش آمده است!",
                    severity: "error",
                  });
                } else {
                  dispatch(provinceGetPricing()).then((r) => {
                    dispatch(LOADING_END());

                    openNotif({
                      vertical: "top",
                      horizontal: "center",
                      msg: "عملیات با موفقیت انجام شد.",
                      severity: "success",
                    });

                    dispatch(
                      DRAWER({ right: false, bottom: false, content: null })
                    );
                  });
                }
              });
            }
          }}
        >
          ثبت درخواست
        </Button>
      </Grid>
    </Grid>
  );
};
