import React, { useEffect, useState, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import moment from 'moment';
import { Tooltip, Badge, Popconfirm } from 'antd';
import { isMobile } from 'react-device-detect';
import BSNavbar1 from '../../Components/BSNavbar/BSNavbar1';
import BSNavbar2 from '../../Components/BSNavbar/BSNavbar2';
import CategoryHorizontal from '../../Components/BSCategories/BSCategoryHorizontal';
import SubCategoryHorizontal from '../../Components/BSSubCategories/BSSubCategoryHorizontal';
import BSItemCard from '../../Components/BSItemCards/BSItemCard';
import BSBillingTable1 from '../../Components/BSBillingTables/BSBillingTable1/BSBTOverall1';
import BSBillingTable2 from '../../Components/BSBillingTables/BSBillingTable2/BSBillingTable2';
import BSBillingTable3 from '../../Components/BSBillingTables/BSBillingTable3/BSBillingTable3overall';
import BSBillingTable4 from '../../Components/BSBillingTables/BSBillingTable4/BSBillingTable4Full';
import BSBillingTable5 from '../../Components/BSBillingTables/BSBillingTable5/BSBillingTable5';
import BSBillingTable6 from '../../Components/BSBillingTables/BSBillingTable6/BSBTOverall6';
import BSBillingTable7 from '../../Components/BSBillingTables/BSBillingTable7/BSBillingTable7Overall.jsx';
import { dynamicComponentProps } from '../DynamicComponentProps.js';
import {
  getTemplateData,
  GlobalPricingAppPricingName,
  SelectedGlobalBillingColorDetail,
  SelectedGlobalCardColorDetail,
  SelectedGlobalCatgColorDetail,
  SelectedGlobalLayoutColorDetail,
  SelectedGlobalSubCatgColorDetail,
  StoredSessionData,
} from '../../../../Features/ThemeChange/ThemeChange';
import { ArrowUpOutlined } from '@ant-design/icons';
import { settingDataSelector } from '../../../../Features/PreferenceMaster/PreferenceMaster.js';
import {
  GlobalSalesDetailData,
  getSalesDetailData,
  GlobalCombosearch,
  GlobalOrderCardDetails,
  PreferenceData,
  GlobalOrderStatus,
  GlobalAppExpDateData,
  GlobalBtoBQuickProductTransfer,
  GlobalOtherSevices,
} from '../../../../Features/BookingScreen/BookingData/BookingData.js';
import { getSession } from '../../../../Services/Others.js';
import BSKioskCounterPayment from '../../Components/UtillComponents/BSKioskCounterPayment.jsx';
import {
  getKioskDatas,
  globalKioskSalesCount,
} from '../../../../Features/Kiosk/kiosk.js';
import PozoKioskIcon from '../../Components/UtillComponents/Pozo retail icons/PozoKioskIcon.jsx';
import {
  GLobalSadminUserPin,
  putSadminUserExit,
  checkSession,
  ApplicationPreferences,
} from '../../../../Features/BrachLogin/BranchLogin';
import { Messages } from '../../../../Components/Notifications/Messages.jsx';
import SAdminUserNotification from '../../Components/BookingFunctionality/SAdminUserNotification.jsx';
import '../../../../Styles/BookingScreen/Template/BSLayout3/BSLayout3.scss';
import SalesCountComponent from '../SalesCountComponent.jsx';
import {
  getBookingStatus,
  GlobalBookingStatus,
} from '../../../../Features/Payment/PaymentReceivedRetail/PaymentReceivedRetail.js';
import TooltipWrapper from '../../../../Components/Tooltip/Tooltip.jsx';
import RetailBookingClosing from '../RetailBookingClose.jsx';
import { PutBookingClose } from '../../../../Features/BookingScreen/RetailBookingClose.js';
import BookingCloseIcon from '../../Components/UtillComponents/BookingCloseIcon.jsx';
import ListOfSalesInvoices from '../../Components/BSBillingTables/ListofInvoices/ListOfSalesInvoices.jsx';
import BSEwayBillicon from '../../Components/UtillComponents/BSEwayBillicon.jsx';
import BSComboItemCard from '../../Components/BSItemCards/BSComboItemCard.jsx';
import BranchTransferComponent from '../../Components/UtillComponents/BSQuickBranchToBranchTransferComponent.jsx';
import BSExpireProductsList from '../../Components/UtillComponents/BSExpireProductsList.jsx';
const subDirectory = import.meta.env.BASE_URL;
const commonDirectory = import.meta.env.COMMON_BASE_URL;
import BSOtherServiceItemCard from '../../Components/BSItemCards/BSOtherServiceItemCard.jsx';
import BSOtherServicesHorizontalcat from '../../Components/BSCategories/BSOtherServicesHorizontalcat';
import BSNavbar3 from '../../Components/BSNavbar/BSNavbar3.jsx';
import SalesCountForStandard from '../SalesCountForStandard.jsx';
import StandardTable from '../../Components/BSBillingTables/StandardTable/StandardTable.jsx';
import { CiShop } from 'react-icons/ci';
import BranchName from '../BranchName.jsx';
import ComboSalesBillTable from '../../Components/BSBillingTables/ComboSalesBillTable/ComboSalesBillTable.jsx';
import PlanExpireNotification from '../PlanExpireNotification.jsx';
const BSLayout3 = () => {
  const dispatch = useDispatch();
  const { action, selectedProducts } = useSelector(
    GlobalBtoBQuickProductTransfer
  );
  const SettingDataSelector = useSelector(PreferenceData);
  const BSLayout3Data = useSelector(getTemplateData);
  const GlobalLayoutColorDetail = useSelector(SelectedGlobalLayoutColorDetail);
  const GlobalsalesDetailData = useSelector(GlobalSalesDetailData);
  const SelectedCatgColor = useSelector(SelectedGlobalCatgColorDetail);
  const SelectedCardColor = useSelector(SelectedGlobalCardColorDetail);
  const SelectedSubCatgColor = useSelector(SelectedGlobalSubCatgColorDetail);
  const PricingAppPricingName = useSelector(GlobalPricingAppPricingName);
  const OtherServicesglobal = useSelector(GlobalOtherSevices);
  const Comboglobal = useSelector(GlobalCombosearch);
  const badgeCount = useSelector(globalKioskSalesCount);
  const OrderStatus = useSelector(GlobalOrderStatus);
  const SessionData = useSelector(StoredSessionData);
  const [messageType, setMessageType] = useState(null);
  const [messageData, setMessageData] = useState(null);
  const AppExpDate = useSelector(GlobalAppExpDateData);
  // const [AppExpDate, setAppExpDate] = useState(0);
  const [Kioskopen, setKioskopen] = useState(false);
  const BookingStatus = useSelector(GlobalBookingStatus);
  const appPreferences = useSelector(ApplicationPreferences);
  const commonModulePreference = appPreferences?.find(
    (preference) => preference?.PreferredCatName === "Common Module"
  )?.PreferenceCatDetails;
  const sportsAppPreference = commonModulePreference?.find(
    (preference) => preference?.PreferredSubCatName === "SportsApp" && preference?.PreferredStatus == 'Y'
  );
  const CheckBookingStatus =
    BookingStatus?.find((item) => item.ScreenType === 'Booking')
      ?.ScreenStatus ?? 'Open';
  const [BookingModalOpen, setBookingModalOpen] = useState(false);
  const [popOverOpen, setPopOverOpen] = useState(false);

  const SelectedBillColor = useSelector(SelectedGlobalBillingColorDetail);

  const BookingNavbar = BSLayout3Data?.BookingNavbar?.[0];
  const BookingCategory = BSLayout3Data?.BookingCategory;
  const BookingSubCategory = BSLayout3Data?.BookingSubCategory;
  const BookingCard = BSLayout3Data?.BookingCard;
  const BookingBilling = BSLayout3Data?.BookingBilling?.[0];
 
  const DineInAccess = SettingDataSelector?.[0]?.SettingDtlDetails.filter(
    (i) => i.SettingIdName === 'DineIn'
  )?.[0];
  const [ListOfInvoices, setListOfInvoices] = useState(false);
  const AppId = SessionData?.AppId;
  const CompId = SessionData?.CompId;
  const BranchId = SessionData?.BranchId;
  const UserId = SessionData?.UserId;
  const UserType = SessionData?.UserType;
  const currentDateValue = moment().format('YYYY-MM-DD HH:mm:ss');
  let containerHeight = isMobile
    ? AppExpDate?.RemainingDays <= 7 || AppExpDate?.PlanType?.toLowerCase() === 'extend'
      ? '576px'
      : '590px'
    : UserType != 'Super Admin' &&
      UserType != 'Super Admin User' &&
      AppExpDate?.RemainingDays <= 7 || AppExpDate?.PlanType?.toLowerCase() === 'extend'
      ? '95vh'
      : '99vh';
  const SAdminuserPin = useSelector(GLobalSadminUserPin);

  useEffect(() => {
    if (AppId && CompId && BranchId && UserId) {
      fetchBookingStatus();
    }
  }, [AppId, CompId, BranchId, UserId]);
  useEffect(() => {
    fetchAmount();
    if (
      SessionData?.FeatureAddonData?.FeatureDtls?.find(
        (item) => item?.FeatureAddonName?.toLowerCase() === 'kiosk sales'
      )
    ) {
      fetchKioskDatas();
    }
  }, [SessionData]);

 
  const fetchKioskDatas = async () => {
    let data = {
      CompId: CompId,
      BranchId: BranchId,
      AppId: AppId,
      UserId: 0,
    };
    await dispatch(getKioskDatas(data));
  };

  const fetchAmount = async () => {
    let data = {
      CompId: CompId,
      BranchId: BranchId,
      AppId: AppId,
      UserId: UserId,
      FromDate: currentDateValue,
      ToDate: currentDateValue,
    };

    await dispatch(getSalesDetailData(data)).unwrap();
  };
  const fetchBookingStatus = async () => {
    let data = {
      CompId: CompId,
      BranchId: BranchId,
      AppId: AppId,
      UserId: UserId,
    };
    await dispatch(getBookingStatus(data));
  };

  const openModalKiosk = () => {
    setKioskopen(true);
  };

  const closeModalKiosk = () => {
    setKioskopen(false);
  };
  const handlePopOverOpen = () => {
    setPopOverOpen(!popOverOpen);
  };
  const handleSupportUser = async () => {
    let response = await dispatch(
      putSadminUserExit({
        AppId: AppId,
        CompId: CompId,
        BranchId: BranchId,
        UserId: UserId,
        UpdatedBy: UserId,
      })
    ).unwrap();
    if (response?.data?.statusCode == 1) {
      setMessageData('success');
      setMessageType(response?.data?.data);
      setPopOverOpen(false);
      const UserId = getSession('UserId');
      const sessionId = getSession('SessionId');
      await dispatch(checkSession({ UserId, sessionId })).unwrap();
    } else {
      setMessageData('error');
      setMessageType(response?.data?.data);
    }
  };
  const onComplete = useCallback(() => {
    setMessageData(null);
    setMessageType(null);
  }, []);
  const BookingOpenFun = async (status) => {
    let Postdata = {
      AppId: AppId,
      CompId: CompId,
      BranchId: BranchId,
      UserId: UserId,
      ScreenType: 'Booking',
      ScreenStatus: status,
      CreatedBy: UserId,
      Date: new Date(),
    };
    let Postresponse = await dispatch(PutBookingClose(Postdata)).unwrap();
    if (Postresponse?.data?.statusCode === 1) {
      fetchBookingStatus();
    } else {
    }
  };
  const OpenBookingModal = () => {
    setBookingModalOpen(true);
  };
  const HandleBookingModalClose = () => {
    setBookingModalOpen(false);
  };
  const OpenListOfInvoices = () => {
    setListOfInvoices(true);
  };
  const handleInvoiceClose = () => {
    setListOfInvoices(false);
  };
  return (
    <>
      <Messages
        messageType={messageType}
        messageData={messageData}
        onComplete={onComplete}
      />
      {UserType != 'Super Admin' &&
        UserType != 'Super Admin User' &&
        (AppExpDate?.RemainingDays <= 7 || AppExpDate === 'undefined' || AppExpDate?.PlanType?.toLowerCase() === 'extend') && (
         <PlanExpireNotification />
        )}
      <div
        className="BSLayout3-Master"
        style={{ height: containerHeight, overflow: 'hidden' }}
      >
        <div className="BSLayout3-NavBar">
          {BookingNavbar == 'Navbar1' && <BSNavbar1 />}
          {BookingNavbar == 'Navbar2' && <BSNavbar2 />}
          {BookingNavbar == 'Navbar3' && <BSNavbar3 />}
        </div>
        <div
          className={BookingNavbar != 'Navbar3' ? "BSLayout3" : "BSLayout3Standard"}
          style={{
            backgroundColor: GlobalLayoutColorDetail?.OverallBackgroundColor,
          }}
        >
          {BookingNavbar != 'Navbar3' ? (
            <div className="Layout-bill-container" style={{ marginTop: '9px' }}>
              <div className="Layout-bill-Subcontainer" style={{ width: OtherServicesglobal ? "10%" : "100%" }}>
                {UserType !== 'Employee' &&
                  <div className="pricing-name-details">
                    {PricingAppPricingName?.[0]?.PricingName +
                      ' / ' +
                      PricingAppPricingName?.[0]?.Type}
                  </div>
                }
                {!OtherServicesglobal && <SalesCountComponent
                  DineInAccess={DineInAccess}
                  GlobalsalesDetailData={GlobalsalesDetailData}
                />}
                {!OtherServicesglobal && SessionData?.FeatureAddonData?.FeatureDtls?.find(
                  (item) =>
                    item?.FeatureAddonName?.toLowerCase() === 'kiosk sales'
                ) && !sportsAppPreference && (
                    <div
                      style={{
                        pointerEvents: OrderStatus > 0 ? 'none' : 'auto',
                        opacity: OrderStatus > 0 ? 0.5 : 1,
                      }}
                    >
                      <Tooltip title={'Kiosk Sales'}>
                        {''}
                        <Badge count={badgeCount} offset={[-10, 3]} size="small">
                          <PozoKioskIcon
                            onClick={() => openModalKiosk()}
                            style={{ cursor: 'pointer', fontSize: '1.5rem' }}
                            className="iconsize"
                          />
                        </Badge>
                      </Tooltip>
                    </div>
                  )}
                {!OtherServicesglobal && (
                  <TooltipWrapper title={'Low Stock Alerts'} isMobile={isMobile}>
                    {' '}
                    <BSExpireProductsList />
                  </TooltipWrapper>
                )}
                {!OtherServicesglobal && Kioskopen && (
                  <BSKioskCounterPayment
                    Kioskopen={Kioskopen}
                    closeKioskModal={closeModalKiosk}
                  />
                )}
                {SAdminuserPin?.length > 0 && UserType != 'Super Admin User' && (
                  <div>
                    <SAdminUserNotification
                      SAdminuserPin={SAdminuserPin}
                      popOverOpen={popOverOpen}
                      handleSupportUser={handleSupportUser}
                      handlePopOverOpen={handlePopOverOpen}
                    />
                  </div>
                )}

                {!OtherServicesglobal && <> {CheckBookingStatus == 'Open' ? (
                  <div style={{ marginLeft: "10px" }}>
                    <TooltipWrapper title={'Booking Close'} isMobile={isMobile}>
                      {' '}
                      <BookingCloseIcon
                        onClick={OpenBookingModal}
                        bgFill={'#52c41a'}
                        style={{
                          fontSize: '16px',
                          marginTop: '4px',
                          color: '#52c41a',
                          cursor: 'pointer',
                        }}
                      />
                      {/* <button className="BookingCloseButton"
                                                    onClick={OpenBookingModal}>Booking Close</button> */}
                    </TooltipWrapper>
                  </div>
                ) : (
                  <div style={{ marginLeft: "10px" }}>
                    <TooltipWrapper title="Booking Open" isMobile={isMobile}>
                      <Popconfirm
                        placement="leftTop"
                        title="Booking Open"
                        description="Are you sure you want to Open the sales?"
                        okText="Yes"
                        cancelText="No"
                        onConfirm={() => BookingOpenFun('Open')}
                      >
                        <span>
                          <BookingCloseIcon
                            bgFill="red"
                            style={{
                              fontSize: '16px',
                              marginTop: '4px',
                              color: '#52c41a',
                              cursor: 'pointer',
                            }}
                          />
                        </span>
                      </Popconfirm>

                    </TooltipWrapper>
                  </div>
                )} </>}
                {!OtherServicesglobal &&
                  <div style={{ marginLeft: "10px" }}>
                    <TooltipWrapper title={'E-way Bill'} isMobile={isMobile}>
                      {''}
                      <BSEwayBillicon
                        style={{ cursor: 'pointer', marginTop: '5px' }}
                        onClick={OpenListOfInvoices}
                      />
                    </TooltipWrapper>
                  </div>}
              </div>
            </div>
          ) :
            <SalesCountForStandard
              PricingAppPricingName={PricingAppPricingName}
              DineInAccess={DineInAccess}
              GlobalsalesDetailData={GlobalsalesDetailData}
            />
          }
          <div
            className="BsLayout3-ContentDiv"
            style={{
              backgroundColor: GlobalLayoutColorDetail?.OverallBackgroundColor,
            }}
          >
            <div className="BSCategory3-Contentcont">
              <div
                style={{
                  backgroundColor:
                    SelectedCatgColor?.['OverallBackgroundColor'],
                }}
              >
                {!OtherServicesglobal && (
                  <CategoryHorizontal
                    categoryFunction={dynamicComponentProps(
                      'Category',
                      BookingCategory?.[1],
                      BookingCategory?.[0]
                    )}
                  />
                )}
                {OtherServicesglobal && (
                  <BSOtherServicesHorizontalcat
                    categoryFunction={dynamicComponentProps(
                      'Category',
                      BookingCategory?.[1],
                      BookingCategory?.[0]
                    )}
                  />
                )}
              </div>

              <div
                style={{
                  backgroundColor:
                    SelectedSubCatgColor?.['OverallBackgroundColor'],
                }}
              >
                {!OtherServicesglobal && Comboglobal === false && (
                  <SubCategoryHorizontal
                    categoryFunction={dynamicComponentProps(
                      'SubCategory',
                      BookingSubCategory?.[1],
                      BookingSubCategory?.[0]
                    )}
                  />
                )}
              </div>

              <div
                className="BSCategory3-Cardcont"
                style={{
                  backgroundColor:
                    SelectedCardColor?.['OverallBackgroundColor'],
                  display: 'flex',
                }}
              >
                {!OtherServicesglobal && Comboglobal === false && (
                  <BSItemCard
                    cardFunctionality={dynamicComponentProps(
                      'Card',
                      BookingCard?.[1],
                      BookingCard?.[0]
                    )}
                  />
                )}
                {!OtherServicesglobal && Comboglobal === true && (
                  <BSComboItemCard
                    cardFunctionality={dynamicComponentProps(
                      'Card',
                      BookingCard?.[1],
                      BookingCard?.[0]
                    )}
                  />
                )}
                {OtherServicesglobal && (
                  <BSOtherServiceItemCard
                    screenHeight={window.innerHeight}
                    cardFunctionality={dynamicComponentProps(
                      'Card',
                      BookingCard?.[1],
                      BookingCard?.[0]
                    )}
                  />
                )}
              </div>
            </div>

            <div className="BSCategory3-tablecont">
              {action ? (
                <BranchTransferComponent />
              ) : (
                <>
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing1' && (
                    <BSBillingTable1 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing2' && (
                    <BSBillingTable2 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing3' && (
                    <BSBillingTable3 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing4' && (
                    <BSBillingTable4 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing5' && (
                    <BSBillingTable5 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing6' && (
                    <BSBillingTable6 />
                  )}
                  {BSLayout3Data?.BookingBilling?.[0] == 'Billing7' && (
                    <BSBillingTable7 />
                  )}
                  {BookingBilling == 'Billing8' && <ComboSalesBillTable />}
                  {BSLayout3Data?.BookingBilling?.[0] == 'StandardBilling' && (
                    <div className="BSCategory2New">
                      <StandardTable />
                    </div>
                  )}
                </>
              )}
              {/* <div className="salesStoreName"
                style={{
                  color: SelectedBillColor?.['FontColor'],
                  backgroundColor: SelectedBillColor?.['BackgroundColor'],
                }}>
                <BranchName/>
              </div> */}
            </div>
          </div>
        </div>
      </div>
      {BookingModalOpen && !OtherServicesglobal && (
        <RetailBookingClosing
          PaymentOpen={BookingModalOpen}
          PaymentClose={HandleBookingModalClose}
        />
      )}
      {ListOfInvoices && !OtherServicesglobal && (
        <ListOfSalesInvoices
          ListOfInvoicesOpen={ListOfInvoices}
          handleInvoiceClose={handleInvoiceClose}
        />
      )}
    </>
  );
};

export default BSLayout3;
