import React, { useContext, useEffect, useState } from "react";
import { Grid } from "../../../../components/grid/Grid";
import { useDispatch, useSelector } from "react-redux";
import { provincePaymentByWeightGetKillHousesService } from "../../services/province-payment-by-weight-killhouse";
import ResponsiveTable from "../../../../components/responsive-table/ResponsiveTable";
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
import {
  Button,
  Checkbox,
  FormControlLabel,
  TextField,
  Tooltip,
} from "@mui/material";
import { RiFileExcel2Fill } from "react-icons/ri";
import { DatePicker } from "@mui/x-date-pickers";
import moment from "moment";
import axios from "axios";
import { AppContext } from "../../../../contexts/AppContext";
import { SPACING } from "../../../../data/spacing";
import { provincePaymentByWeightGetDashboard } from "../../services/province-payment-by-weight-dashboard";

export const ProvincePaymentByWeightKillhouses = () => {
  const [tableData, setTableData] = useState([]);
  const dispatch = useDispatch();
  const [withDate, setWithDate] = useState(false);

  const [, , selectedDate1, setSelectedDate1, selectedDate2, setSelectedDate2] =
    useContext(AppContext);

  useEffect(() => {
    const currentDate = moment(new Date()).format("YYYY-MM-DD");
    setSelectedDate1(currentDate);
    setSelectedDate2(currentDate);
  }, []);

  const [dashboardData, setDashboardData] = useState([]);

  useEffect(() => {
    dispatch(
      provincePaymentByWeightGetDashboard({
        selectedDate1,
        selectedDate2,
        withDate,
      })
    ).then((r) => {
      setDashboardData(r.payload.data);
    });
  }, [selectedDate1, selectedDate2, withDate]);

  const getData = () => {
    dispatch(
      provincePaymentByWeightGetKillHousesService({
        selectedDate1,
        selectedDate2,
        withDate,
      })
    ).then((r) => {
      let d = [];
      switch (getRoleFromUrl()) {
        case "AdminX":
          d = r.payload?.data?.map((item, i) => {
            return [
              i + 1,
              item?.info?.type,
              item?.info?.killHouseName,
              item?.info?.fullname,
              item?.info?.mobile,
              item?.info?.city,
              item?.info?.lenProvinceKillRequests?.toLocaleString(),
              item?.info?.totalKilledQuantity?.toLocaleString(),
              item?.info?.totalKilledWeight?.toLocaleString(),
              item?.info?.lenKillHouseRequests?.toLocaleString(),
              item?.info?.acceptedRealQuantity?.toLocaleString(),
              item?.info?.acceptedRealWeight?.toLocaleString(),
              item?.info?.lenSlaughterTransactions?.toLocaleString(),
              item?.info?.off?.toLocaleString(),
              item?.info?.totalWage?.toLocaleString(),
              item?.info?.companyTotalWage?.toLocaleString(),
              item?.info?.unionTotalWage?.toLocaleString(),
              item?.info?.guildsTotalWage?.toLocaleString(),
              item?.info?.otherTotalWage?.toLocaleString(),
              item?.info?.notPaied?.toLocaleString(),
              item?.info?.companyTotalUnpaidWage?.toLocaleString(),
              item?.info?.unionTotalUnpaidWage?.toLocaleString(),
              item?.info?.guildsTotalUnpaidWage?.toLocaleString(),
              item?.info?.otherTotalUnpaidWage?.toLocaleString(),
              item?.info?.totalPaidWage?.toLocaleString(),
              item?.info?.unionTotalPaidWage?.toLocaleString(),
              item?.info?.companyTotalPaidWage?.toLocaleString(),
              item?.info?.guildsTotalPaidWage?.toLocaleString(),
              item?.info?.otherTotalPaidWage?.toLocaleString(),
            ];
          });
          break;
        case "SuperAdmin":
          d = r.payload?.data?.map((item, i) => {
            return [
              i + 1,
              item?.info?.type,
              item?.info?.killHouseName,
              item?.info?.fullname,
              item?.info?.mobile,
              item?.info?.city,
              item?.info?.lenProvinceKillRequests?.toLocaleString(),
              item?.info?.totalKilledQuantity?.toLocaleString(),
              item?.info?.totalKilledWeight?.toLocaleString(),
              item?.info?.lenKillHouseRequests?.toLocaleString(),
              item?.info?.acceptedRealQuantity?.toLocaleString(),
              item?.info?.acceptedRealWeight?.toLocaleString(),
              item?.info?.lenSlaughterTransactions?.toLocaleString(),
              item?.info?.off?.toLocaleString(),
              item?.info?.totalWage?.toLocaleString(),
              item?.info?.companyTotalWage?.toLocaleString(),
              item?.info?.unionTotalWage?.toLocaleString(),
              item?.info?.guildsTotalWage?.toLocaleString(),
              item?.info?.notPaied?.toLocaleString(),
              item?.info?.companyTotalUnpaidWage?.toLocaleString(),
              item?.info?.unionTotalUnpaidWage?.toLocaleString(),
              item?.info?.guildsTotalUnpaidWage?.toLocaleString(),
              item?.info?.totalPaidWage?.toLocaleString(),
              item?.info?.unionTotalPaidWage?.toLocaleString(),
              item?.info?.companyTotalPaidWage?.toLocaleString(),
              item?.info?.guildsTotalPaidWage?.toLocaleString(),
            ];
          });
          break;
        case "ProvinceOperator":
          d = r.payload?.data?.map((item, i) => {
            return [
              i + 1,
              item?.info?.type,
              item?.info?.killHouseName,
              item?.info?.fullname,
              item?.info?.mobile,
              item?.info?.city,
              item?.info?.totalKilledQuantity?.toLocaleString(),
              item?.info?.totalKilledWeight?.toLocaleString(),
              item?.info?.lenKillHouseRequests?.toLocaleString(),
              item?.info?.acceptedRealQuantity?.toLocaleString(),
              item?.info?.acceptedRealWeight?.toLocaleString(),
              item?.info?.lenSlaughterTransactions?.toLocaleString(),
              item?.info?.unionTotalWage?.toLocaleString(),
              item?.info?.unionTotalUnpaidWage?.toLocaleString(),
              item?.info?.unionTotalPaidWage?.toLocaleString(),
            ];
          });
          break;
        default:
          d = r.payload?.data?.map((item, i) => {
            return [
              i + 1,
              item?.info?.type,
              item?.info?.killHouseName,
              item?.info?.fullname,
              item?.info?.mobile,
              item?.info?.city,
              item?.info?.lenProvinceKillRequests?.toLocaleString(),
              item?.info?.totalKilledQuantity?.toLocaleString(),
              item?.info?.totalKilledWeight?.toLocaleString(),
              item?.info?.lenKillHouseRequests?.toLocaleString(),
              item?.info?.acceptedRealQuantity?.toLocaleString(),
              item?.info?.acceptedRealWeight?.toLocaleString(),
              item?.info?.lenSlaughterTransactions?.toLocaleString(),
              item?.info?.unionTotalWage?.toLocaleString(),
              item?.info?.unionTotalUnpaidWage?.toLocaleString(),
              item?.info?.unionTotalPaidWage?.toLocaleString(),
            ];
          });
          break;
      }

      setTableData(d);
    });
  };

  const userKey = useSelector((state) => state.userSlice.userProfile.key);

  useEffect(() => {
    getData();
  }, []);

  return (
    <Grid
      container
      alignItems="center"
      justifyContent="space-between"
      gap={2}
      mb={1}
      width="100%"
    >
      <Grid
        container
        alignItems="center"
        justifyContent="center"
        gap={2}
        paddingTop={2}
        mb={1}
        width="100%"
      >
        <Grid
          container
          alignItems="center"
          gap={SPACING.SMALL}
          justifyContent="center"
        >
          <Grid
            container
            justifyContent="center"
            style={{
              borderStyle: "solid",
              borderWidth: "1px",
              padding: "10px",
              borderRadius: "15px",
              borderColor: "gray",
              justifyContent: "left",
            }}
          >
            <Grid>
              <FormControlLabel
                control={
                  <Checkbox
                    checked={withDate}
                    onChange={() => setWithDate(!withDate)}
                    color="primary"
                  />
                }
              />
            </Grid>
            <Grid>
              <DatePicker
                disabled={!withDate}
                label="از تاریخ"
                id="date"
                renderInput={(params) => (
                  <TextField
                    size="small"
                    style={{ width: "160px" }}
                    {...params}
                  />
                )}
                value={selectedDate1}
                onChange={(e) => {
                  setSelectedDate1(moment(e).format("YYYY-MM-DD"));
                }}
              />
            </Grid>
            <Grid>
              <DatePicker
                disabled={!withDate}
                label="تا تاریخ"
                id="date"
                renderInput={(params) => (
                  <TextField
                    size="small"
                    style={{ width: "160px" }}
                    {...params}
                  />
                )}
                value={selectedDate2}
                onChange={(e) => {
                  setSelectedDate2(moment(e).format("YYYY-MM-DD"));
                }}
              />
            </Grid>
          </Grid>

          <Button
            // disabled={!textValue}
            type="submit"
            onClick={() => {
              getData();
            }}
          >
            جستجو
          </Button>
          {(getRoleFromUrl() === "SuperAdmin" ||
            getRoleFromUrl() === "AdminX") && (
            <Tooltip title="خروجی اکسل" placement="top">
              <a
                href={`${
                  axios.defaults.baseURL
                }kill_house_total_transactions_wage_payid_super_admin_excel/?key=${userKey}${
                  withDate
                    ? `&date1=${selectedDate1}&date2=${selectedDate2}`
                    : ``
                }&role=${getRoleFromUrl()}`}
                rel="noreferrer"
              >
                <Button color="primary">
                  <RiFileExcel2Fill size={32} />
                </Button>
              </a>
            </Tooltip>
          )}
        </Grid>
      </Grid>

      <Grid container mt={2} mb={4} isDashboard xs={12}>
        <ResponsiveTable
          noPagination
          columns={
            getRoleFromUrl() === "AdminX"
              ? [
                  "تعداد تخصیص بدون بار",
                  "حجم تخصیص بدون بار",
                  "وزن تخصیص بدون بار",
                  "تعداد بار",
                  "حجم بار",
                  "وزن بار",
                  "تعداد تراکنش ",
                  "کل تعرفه (ریال)",
                  "سهم شرکت (ریال)",
                  "سهم اتحادیه (ریال)",
                  "سهم صنف (ریال)",
                  "سهم غیره (ریال)",
                  "تخفیف کل (ریال)",
                  "کل تعرفه پرداخت نشده (ریال)",
                  " سهم شرکت پرداخت نشده",
                  " سهم اتحادیه پرداخت نشده",
                  "سهم صنف پرداخت نشده",
                  "سهم غیره پرداخت نشده",
                  "کل تعرفه پرداخت شده (ریال)",
                  "سهم اتحادیه از واریزی(ریال)",
                  "سهم شرکت از واریزی(ریال)",
                  "سهم اصناف از واریزی(ریال)",
                  "سهم غیره از واریزی(ریال)",
                ]
              : getRoleFromUrl() === "SuperAdmin"
              ? [
                  "تعداد تخصیص بدون بار",
                  "حجم تخصیص بدون بار",
                  "وزن تخصیص بدون بار",
                  "تعداد بار",
                  "حجم بار",
                  "وزن بار",
                  "تعداد تراکنش ",
                  "کل تعرفه (ریال)",
                  "سهم شرکت (ریال)",
                  "سهم اتحادیه (ریال)",
                  "سهم صنف (ریال)",
                  "تخفیف کل (ریال)",
                  "کل تعرفه پرداخت نشده (ریال)",
                  " سهم شرکت پرداخت نشده",
                  " سهم اتحادیه پرداخت نشده",
                  "سهم صنف پرداخت نشده",
                  "کل تعرفه پرداخت شده (ریال)",
                  "سهم اتحادیه از واریزی(ریال)",
                  "سهم شرکت از واریزی(ریال)",
                  "سهم اصناف از واریزی(ریال)",
                ]
              : getRoleFromUrl() === "ProvinceOperator"
              ? [
                  "تعداد تخصیص بدون بار",
                  "حجم تخصیص بدون بار",
                  "وزن تخصیص بدون بار",
                  "تعداد بار",
                  "حجم بار",
                  "وزن بار",
                  "سهم اتحادیه (ریال)",
                  " سهم اتحادیه پرداخت نشده",
                  "سهم اتحادیه از واریزی(ریال)",
                ]
              : [
                  "تعداد تخصیص بدون بار",
                  "حجم تخصیص بدون بار",
                  "وزن تخصیص بدون بار",
                  "تعداد بار",
                  "حجم بار",
                  "وزن بار",
                  "تعداد تراکنش ",
                  "سهم اتحادیه (ریال)",
                  " سهم اتحادیه پرداخت نشده",
                  "سهم اتحادیه از واریزی(ریال)",
                ]
          }
          data={
            getRoleFromUrl() === "AdminX"
              ? [
                  [
                    dashboardData?.info?.lenProvinceKillRequests?.toLocaleString(),
                    dashboardData?.info?.totalKilledQuantity?.toLocaleString(),
                    dashboardData?.info?.totalKilledWeight?.toLocaleString(),
                    dashboardData?.info?.lenKillHouseRequests?.toLocaleString(),
                    dashboardData?.info?.acceptedRealQuantity?.toLocaleString(),
                    dashboardData?.info?.acceptedRealWeight?.toLocaleString(),
                    dashboardData?.info?.lenSlaughterTransactions?.toLocaleString(),
                    dashboardData?.info?.totalWage?.toLocaleString(),
                    dashboardData?.info?.companyTotalWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalWage?.toLocaleString(),
                    dashboardData?.info?.otherTotalWage?.toLocaleString(),
                    dashboardData?.info?.totalOff?.toLocaleString(),
                    dashboardData?.info?.notPaied?.toLocaleString(),
                    dashboardData?.info?.companyTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.otherTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.totalPaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalPaidWage?.toLocaleString(),
                    dashboardData?.info?.companyTotalPaidWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalPaidWage?.toLocaleString(),
                    dashboardData?.info?.otherTotalPaidWage?.toLocaleString(),
                  ],
                ]
              : getRoleFromUrl() === "SuperAdmin"
              ? [
                  [
                    dashboardData?.info?.lenProvinceKillRequests?.toLocaleString(),
                    dashboardData?.info?.totalKilledQuantity?.toLocaleString(),
                    dashboardData?.info?.totalKilledWeight?.toLocaleString(),
                    dashboardData?.info?.lenKillHouseRequests?.toLocaleString(),
                    dashboardData?.info?.acceptedRealQuantity?.toLocaleString(),
                    dashboardData?.info?.acceptedRealWeight?.toLocaleString(),
                    dashboardData?.info?.lenSlaughterTransactions?.toLocaleString(),
                    dashboardData?.info?.totalWage?.toLocaleString(),
                    dashboardData?.info?.companyTotalWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalWage?.toLocaleString(),
                    dashboardData?.info?.totalOff?.toLocaleString(),
                    dashboardData?.info?.notPaied?.toLocaleString(),
                    dashboardData?.info?.companyTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.totalPaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalPaidWage?.toLocaleString(),
                    dashboardData?.info?.companyTotalPaidWage?.toLocaleString(),
                    dashboardData?.info?.guildsTotalPaidWage?.toLocaleString(),
                  ],
                ]
              : getRoleFromUrl() === "ProvinceOperator"
              ? [
                  [
                    dashboardData?.info?.lenProvinceKillRequests?.toLocaleString(),
                    dashboardData?.info?.totalKilledQuantity?.toLocaleString(),
                    dashboardData?.info?.totalKilledWeight?.toLocaleString(),
                    dashboardData?.info?.acceptedRealQuantity?.toLocaleString(),
                    dashboardData?.info?.acceptedRealWeight?.toLocaleString(),
                    dashboardData?.info?.lenSlaughterTransactions?.toLocaleString(),
                    dashboardData?.info?.unionTotalWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalPaidWage?.toLocaleString(),
                  ],
                ]
              : [
                  [
                    dashboardData?.info?.lenProvinceKillRequests?.toLocaleString(),
                    dashboardData?.info?.totalKilledQuantity?.toLocaleString(),
                    dashboardData?.info?.totalKilledWeight?.toLocaleString(),
                    dashboardData?.info?.lenKillHouseRequests?.toLocaleString(),
                    dashboardData?.info?.acceptedRealQuantity?.toLocaleString(),
                    dashboardData?.info?.acceptedRealWeight?.toLocaleString(),
                    dashboardData?.info?.lenSlaughterTransactions?.toLocaleString(),
                    dashboardData?.info?.unionTotalWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalUnpaidWage?.toLocaleString(),
                    dashboardData?.info?.unionTotalPaidWage?.toLocaleString(),
                  ],
                ]
          }
          title={"خلاصه اطلاعات"}
          customColors={[
            { name: "تعداد تخصیص بدون بار", color: "yellow" },
            { name: "حجم تخصیص بدون بار", color: "yellow" },
            { name: "وزن تخصیص بدون بار", color: "yellow" },
            { name: "تعداد بار", color: "cyan" },
            { name: "حجم بار", color: "cyan" },
            { name: "وزن بار", color: "cyan" },
            { name: "تعداد تراکنش ", color: "orange" },
            { name: "کل تعرفه (ریال)", color: "green" },
            { name: "سهم شرکت (ریال)", color: "green" },
            { name: "سهم اتحادیه (ریال)", color: "green" },
            { name: "سهم صنف (ریال)", color: "green" },
            { name: "سهم غیره (ریال)", color: "green" },
            { name: "کل تعرفه پرداخت شده (ریال)", color: "red" },
            { name: "سهم اتحادیه از واریزی(ریال)", color: "red" },
            { name: "سهم شرکت از واریزی(ریال)", color: "red" },
            { name: "سهم اصناف از واریزی(ریال)", color: "red" },
            { name: "سهم غیره از واریزی(ریال)", color: "red" },
            { name: "تخفیف کل (ریال)", color: "pink" },
          ]}
        />
      </Grid>

      <ResponsiveTable
        paginated
        columns={
          getRoleFromUrl() === "AdminX"
            ? [
                "ردیف",
                "ماهیت",
                "خریدار",
                "نام و نام خانوادگی مالک",
                "تلفن مالک",
                "شهر",
                "تعداد تخصیص بدون بار",
                "حجم تخصیص بدون بار",
                "وزن تخصیص بدون بار",
                "تعداد بار",
                "حجم بار",
                "وزن بار",
                "تعداد تراکنش ",
                "تخفیف (ریال)",
                "کل تعرفه (ریال)",
                "سهم شرکت (ریال)",
                "سهم اتحادیه (ریال)",
                "سهم صنف (ریال)",
                "سهم غیره (ریال)",
                "کل تعرفه پرداخت نشده (ریال)",
                " سهم شرکت پرداخت نشده",
                " سهم اتحادیه پرداخت نشده",
                "سهم صنف پرداخت نشده",
                "سهم غیره پرداخت نشده",
                "کل تعرفه پرداخت شده (ریال)",
                "سهم اتحادیه از واریزی(ریال)",
                "سهم شرکت از واریزی(ریال)",
                "سهم اصناف از واریزی(ریال)",
                "سهم غیره از واریزی(ریال)",
              ]
            : getRoleFromUrl() === "SuperAdmin"
            ? [
                "ردیف",
                "ماهیت",
                "خریدار",
                "نام و نام خانوادگی مالک",
                "تلفن مالک",
                "شهر",
                "تعداد تخصیص بدون بار",
                "حجم تخصیص بدون بار",
                "وزن تخصیص بدون بار",
                "تعداد بار",
                "حجم بار",
                "وزن بار",
                "تعداد تراکنش ",
                "تخفیف (ریال)",
                "کل تعرفه (ریال)",
                "سهم شرکت (ریال)",
                "سهم اتحادیه (ریال)",
                "سهم صنف (ریال)",
                "کل تعرفه پرداخت نشده (ریال)",
                " سهم شرکت پرداخت نشده",
                " سهم اتحادیه پرداخت نشده",
                "سهم صنف پرداخت نشده",
                "کل تعرفه پرداخت شده (ریال)",
                "سهم اتحادیه از واریزی(ریال)",
                "سهم شرکت از واریزی(ریال)",
                "سهم اصناف از واریزی(ریال)",
              ]
            : getRoleFromUrl() === "ProvinceOperator"
            ? [
                "ردیف",
                "ماهیت",
                "خریدار",
                "نام و نام خانوادگی مالک",
                "تلفن مالک",
                "شهر",
                "تعداد تخصیص بدون بار",
                "حجم تخصیص بدون بار",
                "وزن تخصیص بدون بار",
                "تعداد بار",
                "حجم بار",
                "وزن بار",
                "سهم اتحادیه (ریال)",
                " سهم اتحادیه پرداخت نشده",
                "سهم اتحادیه از واریزی(ریال)",
              ]
            : [
                "ردیف",
                "ماهیت",
                "خریدار",
                "نام و نام خانوادگی مالک",
                "تلفن مالک",
                "شهر",
                "تعداد تخصیص بدون بار",
                "حجم تخصیص بدون بار",
                "وزن تخصیص بدون بار",
                "تعداد بار",
                "حجم بار",
                "وزن بار",
                "تعداد تراکنش ",
                "سهم اتحادیه (ریال)",
                " سهم اتحادیه پرداخت نشده",
                "سهم اتحادیه از واریزی(ریال)",
              ]
        }
        data={tableData}
        title={"پایش تعرفه ها"}
        customColors={[
          { name: "تعداد تخصیص بدون بار", color: "yellow" },
          { name: "حجم تخصیص بدون بار", color: "yellow" },
          { name: "وزن تخصیص بدون بار", color: "yellow" },
          { name: "تعداد بار", color: "cyan" },
          { name: "حجم بار", color: "cyan" },
          { name: "وزن بار", color: "cyan" },
          { name: "تعداد تراکنش ", color: "orange" },
          { name: "کل تعرفه (ریال)", color: "green" },
          { name: "سهم شرکت (ریال)", color: "green" },
          { name: "سهم اتحادیه (ریال)", color: "green" },
          { name: "سهم صنف (ریال)", color: "green" },
          { name: "سهم غیره (ریال)", color: "green" },
          { name: "کل تعرفه پرداخت شده (ریال)", color: "red" },
          { name: "سهم اتحادیه از واریزی(ریال)", color: "red" },
          { name: "سهم شرکت از واریزی(ریال)", color: "red" },
          { name: "سهم اصناف از واریزی(ریال)", color: "red" },
          { name: "سهم غیره از واریزی(ریال)", color: "red" },
        ]}
      />
    </Grid>
  );
};
