import '../../../../Styles/BookingScreen/Components/UtillComponents/BSNavBarComponents.scss';
import { useRef, useState, useEffect, useCallback } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import { IoCloseOutline, IoSearchOutline } from 'react-icons/io5';
import { BiBarcodeReader } from 'react-icons/bi';
import { isMobile } from 'react-device-detect';
import { debounce } from 'lodash';
import {
changeKisokSearchedData,
GlobalfocusStatusBalrec,
GlobalfocusStatusCustMouse,
ChangeSearchFocusPreOrder,
GlobalKisoksearchedData,
} from '../../../../Features/BookingScreen/BookingData/BookingData.js';
import { ArrowRightOutlined } from '@ant-design/icons';
import { DefaultModal } from '../../../../Components/Modal/DefaultModal.jsx';
import BarcodeScanner from './BarcodeScanner';
import { CiBarcode } from 'react-icons/ci';
import {
changeCardlistDate,
getCardlistDate,
globalCurrentKioskPageName,
} from '../../../../Features/Kiosk/kiosk.js';
import dayjs from 'dayjs';
import moment from 'moment';
import { DatePicker } from 'antd';
import {
changeSelfBookingCustomerDtls,
GlobalMembershipDetail,
GlobalSelfBookingCustomerDtls,
PostSelfBookingCustomer,
} from '../../../../Features/BookingScreen/BookingData/KioskBookingData.js';
import { Crown } from 'lucide-react';
import MemberShipCard from '../../../MemberShipSelfBooking/MemberShipCard.jsx';
import BSMembership from './BSMembership.jsx';
import { getSession } from '../../../../Services/Others.js';
import Buttons from '../../../../Components/Forms/Buttons.jsx';
import { Messages } from '../../../../../ownLib/my-ui-lib.js';
const BSKioskSearch = (props) => {
const selfBookingOption = sessionStorage.getItem('selfBookingOption');
const dispatch = useDispatch();
const searchInputRef = useRef(null);
const scannerRef = useRef();
const searchFocuStatus = useSelector(GlobalfocusStatusBalrec);
const mouseCustFocus = useSelector(GlobalfocusStatusCustMouse);
const CurrentPageName = useSelector(globalCurrentKioskPageName);
const selectedDate = useSelector(getCardlistDate);
const AppName = sessionStorage.getItem('AppName');
const AppId = getSession('AppId');
const CompId = getSession('CompId');
const BranchId = getSession('BranchId');
const MembershipDetail = useSelector(
GlobalMembershipDetail
)?.MembershipDetail;
const KisoksearchedData = useSelector(GlobalKisoksearchedData);
// Local States
const [messageType, setMessageType] = useState(null);
const [messageData, setMessageData] = useState(null);
const [memberShip, setSetmemberShip] = useState(false);
const [focused, setFocused] = useState(true);
const [screenWidth, setScreenWidth] = useState(window.innerWidth);
const [preFocus, setPreFocus] = useState(true);
const [openScanner, setOpenScanner] = useState(false);
const [searchInput, setSearchInput] = useState(null);
const [showSearch, setShowSearch] = useState(false);
const [showUserModal, setShowUserModal] = useState(false);
const [userNumber, setUserNumber] = useState('');
// Debounced dispatch
const debouncedDispatch = useCallback(
debounce((value) => {
dispatch(changeKisokSearchedData(value));
}, 400),
[]
);
const handleChange = (e) => {
setSearchInput(e?.target?.value);
debouncedDispatch(e.target.value);
};
useEffect(() => {
if (KisoksearchedData == null) {
setSearchInput('');
}
}, [KisoksearchedData]);
// Manage focus & blur states
useEffect(() => {
if (mouseCustFocus || searchFocuStatus || screenWidth < 768 || !preFocus) {
setFocused(false);
searchInputRef.current?.blur();
dispatch(ChangeSearchFocusPreOrder(false));
} else if (preFocus && screenWidth > 768) {
setFocused(true);
searchInputRef.current?.focus();
}
}, [mouseCustFocus, searchFocuStatus, screenWidth, preFocus]);
// Screen resize listener
useEffect(() => {
const handleResize = () => setScreenWidth(window.innerWidth);
window.addEventListener('resize', handleResize);
return () => window.removeEventListener('resize', handleResize);
}, []);
// Outside click handling
useEffect(() => {
const handleClickOutside = (event) => {
if (
searchInputRef.current &&
!searchInputRef.current.contains(event.target)
) {
setFocused(false);
}
};
document.addEventListener('mousedown', handleClickOutside);
return () => document.removeEventListener('mousedown', handleClickOutside);
}, []);
const handleBlur = () => {
if (preFocus && screenWidth > 768) setFocused(true);
};
// Scanner Handling
const stopScannerFromParent = () => {
scannerRef.current?.stopScanner();
};
const handleQrcode = () => {
setOpenScanner((prev) => !prev);
if (!openScanner) scannerRef.current?.reinitializeCamera();
};
const handleQrData = async (value, err) => {
if (err && err?.error) {
setMessageData(err?.error);
setMessageType('error');
}
dispatch(changeKisokSearchedData(value));
setOpenScanner(false);
stopScannerFromParent();
};
const handleToggleSearch = () => {
setShowSearch((prev) => !prev);
// Optional: focus input when opened
setTimeout(() => {
if (!showSearch && searchInputRef.current) {
searchInputRef.current.focus();
}
}, 0);
};
const disablePastDates = (current) => {
return current && current < moment().startOf('day');
};
const changeDateFunction = (date) => {
if (date) {
dispatch(changeCardlistDate(date));
console.log('Selected Date:', date.format('DD-MM-YYYY'));
} else {
dispatch(changeCardlistDate(null));
}
};
const handlePostCustnumber = async () => {
try {
let response = await dispatch(
PostSelfBookingCustomer({
CompId: CompId,
BranchId: BranchId,
AppId: AppId,
CustMobile: userNumber,
})
).unwrap();
if (response?.data?.statusCode == 1 || response?.data?.statusCode == 2) {
dispatch(
changeSelfBookingCustomerDtls(response?.data?.CustomerDetails?.[0])
);
setShowUserModal(false);
} else {
dispatch(changeSelfBookingCustomerDtls(null));
}
} catch (error) {
console.log(error);
}
};
const onComplete = useCallback(() => {
setMessageData(null);
setMessageType(null);
}, []);
return (
<>
Number must be 10 digits
)}