import React, { useState, useEffect, useRef } from 'react';
import Container from '../components/container';
import { useRoute } from '@react-navigation/native';
import {customStyles, GetPageTheme } from "../styles/Global";
import { AppState, StatusBar, Image, TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, Animated, KeyboardAvoidingView, Keyboard } from 'react-native';
import { connect } from 'react-redux';
import { mapStateToProps, mapDispatchToProps } from '../reducers/contextProvider';
import { notify } from '../components/notify';
import moment from 'moment';
import { getKPIFields, restore_ImageWithMetaData, validateNumber } from '../controller/functions';
import { get_item, set_item, clear_item } from '../components/localStorage';
import { db,ImageFolderPath, HierarchyTbls } from '../constants/constants';
import CustomHeader from '../components/customHeader';
import { AntDesign, Entypo, FontAwesome, Fontisto, Ionicons, MaterialCommunityIcons } from '../components/icons';
import CustomLoader from '../components/CustomLoader';
import LinearGradient from 'react-native-linear-gradient';
import { AppTables } from '../constants/tableConstants';
import * as RNFS from 'react-native-fs';
import GradientButton from '../components/gradientButton';
import CustomModal from '../components/CustomModal';
import { ConfirmSaveAlert } from '../components/alert';
import ModalSelector from 'react-native-modal-selector'
import {CustomPicker2 } from '../components/CustomPicker';
import CustomCamera from '../components/Camera';
import ImageViewer from 'react-native-image-zoom-viewer';
import DateTimePicker from '@react-native-community/datetimepicker';
import CheckBox from '@react-native-community/checkbox';
import CameraImg from '../assets/performics/camera_front_image.svg'
import MultiSelect from 'react-native-multiple-select';
import CameraImg3 from '../assets/performics/camera_tick.svg';
import CameraImg2 from '../assets/performics/camera_icon.svg';
import CameraImg5 from '../assets/image/astrickcamera.svg';
import AddIcon from '../assets/performics/add_image.svg'
import BinIcon from '../assets/performics/delete_icon_red.svg'

function PaidVisibilityOneApp(props) {
    const route = useRoute();
    const ST = props.StaticText || {};
    // get all theme styles acc to current theme set 
    const PageTheme = GetPageTheme(props.DarkMode, route.name);
    const customStyle = customStyles(props.DarkMode, route.name);
    const animatedChoice = useRef(new Animated.Value(0)).current;

    const [processing, setProcessing] = useState(true);
    const [loaderTitle, setLoaderTitle] = useState();
    const [isAdhocScreen, setIsAdhocScreen] = useState(false);
    const [storeData, setStoreData] = useState({});
    const [StoreCameraAllow, setStoreCameraAllow] = useState(true);
    const [currentMenu, setCurrentMenu] = useState({});
    const [rerenderdata, setrerenderdata] = useState(0);
    const [rerenderdata2, setrerenderdata2] = useState(0);
    const [rerenderdata3, setrerenderdata3] = useState(0);
    const [rerenderdata4, setrerenderdata4] = useState(0);

    const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false);

    const [WindowData, setWindowData] = useState([]);
    const [reasons_list, setReasons_list] = useState([]);
    const [Windows, setWindows] = useState([]);
    const [show_zoomImage, setShow_zoomImage] = useState(false);
    const Show_zoomImageRef = useRef(false);
    const [refImageIndex, setrefImageIndex] = useState(0);
    const [zoomImageIndex, setzoomImageIndex] = useState(0);
    const [showAlert, setShowAlert] = useState(false);
    const [showAlert1, setShowAlert1] = useState(false);

    const [zoomImageUrl, setZoomImageUrl] = useState([]);
    const [showCamera, setShowCamera] = useState(false);
    const [showQRCamera, setShowQRCamera] = useState(false);
    const [getImageProps, setGetImageProps] = useState({});
    const zoomView = useRef(null);
    const [showRating, setShowRating] = useState(false);
    const [RatingQtn, setRatingQtn] = useState({});
    const [RatingWindow, setRatingWindow] = useState({});
    const [RatingOrder, setRatingOrder] = useState([]);
    const [searchedItem, setSearchedItem] = useState('');
    const [globalWindows, setGlobalWindows] = useState([]);
    const [KPIFields, setKPIFields] = useState([]);
    const [showSwitchCamera, setShowSwitchCamera] = useState(false);
    const [GridValue, setGridValue] = useState(false);
    const [QREnable, setQREnable] = useState(false);
    const [DataCleanModal, setDataCleanModal] = useState(false);
    const [DataCleanAnim, setDataCleanAnim] = useState("");
    const [DataCleanItem, setDataCleanItem] = useState({});
    const [isPresentClean, setIsPresentClean] = useState(0);
    const [InputChange, setInputChange] = useState([]);
    const [SelectedImg, setSelectedImg] = useState('');
    const [showModal, setShowModal] = useState(false);
    const [reCapImgModalObj, setReCapImgModalObj] = useState({});
    const [showImageSaveOp, setShowImageSaveOp] = useState(true);
    const [QRqtnData, setQRqtnData] = useState({});
    //for Partial save
    const [FilteredPromoValues, setFilteredPromoValues] = useState([]);
    const [ShowCatWise, setShowCatWise] = useState(false);
    const [CatData, setCatData] = useState(false);
    const [ColId, setColId] = useState("");
    const [ColName, setColName] = useState("");

    const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges);
    const WindowDataRef = React.useRef(WindowData);
    const StoreIdRef = React.useRef(null);
    const ScreenNameRef = React.useRef({});
    const PSGroupData = React.useRef(''); // Grouping data (Category/ SubCategory/ Brand ) for BG save fuunctionality with Partial Save Scenario
    const BGPSAllow = React.useRef(false);

    // error field states
    const [errorfield, setErrorField] = useState({});
    const [error, setError] = useState(false);

    const inputRefs = useRef({});

    const d1 = new Date();
    const d2 = moment(d1).format('MM/DD/YYYY');

    const [ItemsInView, setItemsInView] = useState([]);

    const onViewableItemsChanged = ({ viewableItems, }) => {
        // Do stuff
        setItemsInView(viewableItems);
    };


    const FlatLConfCallbackPairs = useRef([{ viewabilityConfig: { itemVisiblePercentThreshold: 50 }, onViewableItemsChanged }]);


    const [addImages, setAddImages] = useState([]);

    const handleAddImages = (WIndex) => {
        let NObj = { Image1Name: '', Image1: '', Image2Name: '', Image2: '', img1Required: false, img2Required: false, addImg: 1 }
        let objD = WindowData[WIndex]
        let WSplit = objD?.WindowSplits
        WSplit.push(NObj)
        objD.WindowSplits = WSplit || []
        WindowData[WIndex] = objD
        setrerenderdata(!rerenderdata)
    };

    const handleDelete = (splitItemIndex, WIndex) => {
        // setAddImages(prev => prev.filter((_, i) => i !== index));
        let objD = WindowData[WIndex]
        let WSplit = objD?.WindowSplits
        // WSplit.push(NObj)
        // WSplit.Images = WSplit?.Images?.filter((_, i) => i !== splitChildItemIndex);
        objD.WindowSplits = WSplit?.filter((_, i) => i !== splitItemIndex);
        WindowData[WIndex] = objD
        setrerenderdata(!rerenderdata)

    };



    useEffect(() => {
        setLoaderTitle(ST.Loading + '...')
        let params = props.route.params ? props.route.params : {};
        let storeData1 = params.storeData || {};
        let menu1 = params.menu || {};
        let ShowCatWise1 = params.ShowCatWise != null ? params.ShowCatWise : false;
        let CatData1 = params.CatData != null ? params.CatData : {};
        let isAdhoc = params.isAdhoc || false;

        setIsAdhocScreen(isAdhoc);
        setShowCatWise(ShowCatWise1);
        setCatData(CatData1);
        setStoreData(storeData1);
        setCurrentMenu(menu1);
        let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false;
        setStoreCameraAllow(cameraAllow);
        StoreIdRef.current = storeData1.StoreId
        ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId }
        getData(storeData1, menu1, CatData1, ShowCatWise1);
        const AppStateSubscription = AppState.addEventListener('change', (pro) => { _handleAppStateChange(pro) });
        const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove);
        return function cleanup() {
            AppStateSubscription.remove();
            return unsubscribe;
        };
    }, []);



    const _handleAppStateChange = async (nextAppState) => {
        if (nextAppState == 'background' && hasUnsavedChangesRef.current == true) {
            // windowQuestions: global.windowQuestions || [], // ✅ include this
            // console.log("Saving WindowDataRef:", WindowDataRef.current);
            let newData = {
                storeBGData: WindowDataRef.current,
                menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName,
                StoreId1: StoreIdRef.current,
                BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId,
                visiteDate: d2,
                BGPSAllow: BGPSAllow.current,
                PSGroupData: PSGroupData.current,
            }
            let WindowsStr = JSON.stringify(newData)
            await set_item('storeData', WindowsStr);
            // console.log("Store_json--", WindowData)
        }
    }



    useEffect(() => {
        const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove);
        return unsubscribe;
    }, [hasUnsavedChanges]);


    useEffect(() => {
        const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove);
        return unsubscribe;
    }, [showCamera]);

    useEffect(() => {
        const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove);
        return unsubscribe;
    }, [showQRCamera]);

    useEffect(() => {
        const unsubscribe = props.navigation.addListener('beforeRemove', onBeforeRemove);
        return unsubscribe;
    }, [show_zoomImage]);

    function onBeforeRemove(e) {

        if (showCamera == true || showQRCamera == true) {
            e.preventDefault();
            setShowCamera(false);
            setShowQRCamera(false)
        }
        else if (Show_zoomImageRef.current == true) {
            e.preventDefault();
            UpdateShow_zoomImageRef(false);
        }
        else {
            if (hasUnsavedChanges == true) {
                e.preventDefault(); // Prevent default behavior of leaving the screen
                onRemoveScreen(e);
            }
            else {
                return;
            }
        }
    }

    function BgUnsavedChanges(val) {
        hasUnsavedChangesRef.current = val
        setHasUnsavedChanges(val);
    }

    function BgWindowData(val) {
        WindowDataRef.current = val
        setWindowData(val);
    }

    function UpdateShow_zoomImageRef(val) {
        Show_zoomImageRef.current = val
        setShow_zoomImage(val);
    }

    function onRemoveScreen(e) {
        Alert.alert(
            "",
            ST.Doyoureallywanttoexitthescreen,
            [
                {
                    text: ST.Cancel,
                    onPress: () => { },
                    style: "cancel"
                },
                {
                    text: ST.OK, onPress: async () => {
                        // setHasUnsavedChanges(false);
                        BgUnsavedChanges(false)
                        await clear_item('storeData')
                        props.navigation.dispatch(e.data.action);
                    }
                }
            ]
        );
    }


    function _OpenCaptureImage_Modal(img) {

        const isImageCap = (img != '' || img != null) ? true : false;
        let { window, splitItem, splitItemIndex, cameraType } = reCapImgModalObj
        let camera2Label = (window && window.PromoImage2Lable) || '';
        return (
            <CustomModal
                style={customStyle.PromoImgModal}
                title={currentMenu.MenuName}
                message={camera2Label}
                titleStyle={customStyle.PromoImgModal_title}
                messageStyle={customStyle.PromoImgModal_subtitle}
                showModal={showModal}
            >
                {
                    isImageCap &&
                    <View style={customStyle.PromoImgModalCon}>
                        <View style={customStyle.PromoImgModal_ImgWrap}>

                            <Image style={[customStyle.PromoImgModal_Img, (Platform.OS == 'ios' ? customStyle.android_flipIMageView : {})]} source={{ uri: SelectedImg }} />
                        </View>
                        <TouchableOpacity style={customStyle.PromoImgModal_CameraSmall} onPress={() => { openCamera(window, splitItem, splitItemIndex, cameraType) }}>
                            <MaterialCommunityIcons name='camera-retake' size={30} color={PageTheme.$primary_color} />
                        </TouchableOpacity>

                        {!showImageSaveOp &&
                            <TouchableOpacity style={customStyle.PromoImgModal_Cancel_btn} onPress={() => { cancelImage(false) }}>

                                <Text style={customStyle.PromoImgModal_Cancel_btnText}>{ST.Close}</Text>
                            </TouchableOpacity>
                        }
                    </View>
                }
            </CustomModal>
        )
    }


    async function getData(storeData1, menu1, CatData1 = {}, ShowCatWise1 = false) {
        try {
            let { StoreId } = storeData1;

            let AllKPIFields = await getKPIFields(menu1);
            setKPIFields(AllKPIFields);
            // set switch camera flag as defined in mapping menu flag (if exists)
            let SwitchingCameraI = AllKPIFields.findIndex(i => i.KPIFieldName == 'SwitchingCamera');
            let SwitchingCameraObj = SwitchingCameraI >= 0 ? AllKPIFields[SwitchingCameraI] : {};
            let SwitchingCamera = SwitchingCameraI >= 0 ? SwitchingCameraObj['KPIFieldEnable'] : false;
            setShowSwitchCamera(SwitchingCamera);

            let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping')
            let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {};
            let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false;

            let HidePresentYesNoIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo');
            let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? AllKPIFields[HidePresentYesNoIndex] : {};
            let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false;
            let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false;


            let { PSAllow, PSTableName } = menu1;
            PSTableName = PSTableName != null ? PSTableName : '';
            PSAllow = PSAllow != null ? PSAllow : false;
            let idCol = '', nameCol = '';
            if (PSTableName.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) {
                idCol = 'CategoryId', nameCol = 'CategoryName';
            }
            else if (PSTableName.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) {
                idCol = 'BrandId', nameCol = 'BrandName';
            }
            else {
                idCol = 'SubCategoryId', nameCol = 'SubCategoryName';
            }
            let IdVal = CatData1[idCol];
            let NameVal = CatData1[nameCol];
            let FilteredIds = [];
            if (ShowCatWise1) {
                FilteredIds = await getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1);
            }
            setFilteredPromoValues(FilteredIds);
            let inputChangeFlag = [], storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false;
            //storeBGData check
            let windData = await get_item('storeData')
            if (windData != null && windData != '') {
                let StoreJson = JSON.parse(windData)
                let { storeBGData, menuName, StoreId1, BgMenuID, visiteDate } = StoreJson
                if (storeBGData.length > 0 && menuName == menu1.ScreenName && StoreId1 == StoreId && menu1.MenuId == BgMenuID && visiteDate == d2) {
                    isBgDataExists = true;
                    storeBGData1 = storeBGData;
                    bgStoreJson = StoreJson
                    WindowDataRef.current = storeBGData
                    setWindowData(storeBGData);
                    BgUnsavedChanges(true)
                }
            }

            //  call this after storeBGData check
            if (PSAllow) {
                // if Partial save is allowed then add the currently active category or group in BG var 
                BGPSAllow.current = true;
                PSGroupData.current = CatData1;
            }

            await db.transaction(async function (txn) {
                let q3 = `Select Distinct VisibilityReasonId as ReasonId,VisibilityReason as Reason,IsRemarkTaken From Master_VisibilityReason WHERE (MenuId='${menu1.MenuId}' or MenuId= ${menu1.MenuId}) `;
                await txn.executeSql(q3, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            arr.push(data);
                            if (i == txnres2.rows.length - 1) {
                                setReasons_list(arr);
                            }
                        }
                    }
                }, function (txnE, txnerr) { console.log(txnerr); },);
                //get data from masters with saved data if any 
                let FilterIdsJoin = FilteredIds.length > 0 ? FilteredIds.join(',') : '';
                let selectlist2 = `Distinct s.StoreId,wd.PVIS_HEADER_ID as PVisHeaderId,w.VisibilityRefImagePopUp ,w.VisibilityDefinitionId,w.MenuId,w.VisibilityId,w.VisibilityName,w.VisibilityTable,w.VisibilityField,w.VisibilityValue,w.ChildName,w.VisibilityRefImage,w.AddImageAllow,w.AddImageMax,w.VisibilityElementCheckAssortment,w.VisibilityElementStockRequired,IFNULL(wd.IS_PRESENT,'') as IsPresent,w.VisibilityNotExistCamera,IFNULL(wd.PVIS_NA_IMAGE,'') as PVisNAImage,w.VisibilityExistReasonEnable,w.VisibilityNotExistReasonEnable,IFNULL(wd.REASON_ID,'') as ReasonId,IFNULL(wd.REASON,'') as Reason,w.NoOfSplit,w.VisibilityImage1,w.VisibilityImage2,w.VisibilityImage1Lable,w.VisibilityImage2Lable,w.VisibilityImage1CameraGrid,w.VisibilityImage2CameraGrid,w.StockQtyRequired`;
                let join3 = ` Left Outer Join ${AppTables.PAIDVIS_HDR_DATA} wd on w.VisibilityDefinitionId=wd.PVIS_DEFINITION_ID and wd.STORE_ID='${StoreId}' and wd.MENU_ID='${menu1.MenuId}' and wd.VISIT_DATE='${d2}'`;
                let join2 = ` inner join ${(isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility')} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId `;
                let q2 = ` Select ${selectlist2} from Master_VisibilityDefinition w  ${join2} ${join3} where s.StoreId=${StoreId} and w.MenuId=${menu1.MenuId}  `;
                if (ShowCatWise1 == true) {
                    q2 += ` and  w.VisibilityValue in (${FilterIdsJoin}) `;
                }
                q2 += `order by w.VisiDefSequence `;
                await txn.executeSql(q2, [], async function (txn2, txnres2) {
                    console.log('Paid Visi added count', txnres2.rows.length);
                    if (txnres2.rows.length > 0) {
                        let arr = []; let images = [], allWindowsData = [];
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            let isPresent = (HidePresentYesNoEnable ? 1 : 0);
                            if (isBgDataExists) {
                                let storeBgIndex = storeBGData1.findIndex(i => i.VisibilityId == data.VisibilityId && i.VisibilityDefinitionId == data.VisibilityDefinitionId)
                                let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {};
                                isPresent = HidePresentYesNoEnable ? 1 : (storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0);
                            } else {
                                isPresent = (HidePresentYesNoEnable ? 1 : (data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0));
                            }
                            let animatedChoice = new Animated.Value(isPresent);
                            let animatedHeight = new Animated.Value(450);
                            data.animatedChoice = animatedChoice;
                            data.animatedHeight = animatedHeight
                            data.NoOfSplit = parseInt(data.NoOfSplit);
                            let NoOfSplit = data.NoOfSplit;
                            let isStockReq = data.VisibilityElementStockRequired == 'true' || data.VisibilityElementStockRequired == 1 ? 1 : 0;
                            let imgObj = { imgIndex: (i + 1), url: data.VisibilityRefImage, props: {} }
                            images.push(imgObj);
                            let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1);
                            let WQr = await getWindowQuestions(data, storeData1, menu1, bgStoreJson, isBgDataExists);
                            let WindowQuestions = WQr['WindowQuestions'] || [];
                            let WindowQA = WQr['WindowQA'] || {};
                            let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, AllKPIFields) : { 'WStocks': [], 'WStocksData': [] };
                            let WStocks = WSd['WStocks'] || [];
                            let WStocksData = WSd['WStocksData'] || [];
                            let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0;

                            let isNAImageAvl = data.VisibilityNotExistCamera == 'true' || data.VisibilityNotExistCamera == 1 ? 1 : 0;
                            let NAImage1 = isNAImageAvl == 1 && data.PVisNAImage != null ? data.PVisNAImage : '';
                            let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : '';
                            let showRsnRemark = ((data.SHOW_RSN_REMARK == '1' || data.SHOW_RSN_REMARK == 1) ? true : false);

                            let windowDataObj = { 'VisibilityId': data.VisibilityId, 'VisibilityDefinitionId': data.VisibilityDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked, 'remark': (data.Remark != null ? data.Remark : ''), 'showOtherText': showRsnRemark, 'RemarkText': (data.REASON_REMARK || '') };
                            data['WindowQuestions'] = WindowQuestions;
                            data['WindowStocks'] = WStocks;
                            let changesFlag = { VisibilityId: data.VisibilityId, VisibilityDefinitionId: data.VisibilityDefinitionId, Flag: (data.PVisHeaderId != null ? true : false) }
                            inputChangeFlag.push(changesFlag)
                            arr.push(data);
                            allWindowsData.push(windowDataObj);
                            if (i == txnres2.rows.length - 1) {
                                if (!isBgDataExists) {
                                    BgWindowData(allWindowsData);
                                }
                                setInputChange(inputChangeFlag)
                                setWindows(arr);
                                setGlobalWindows(arr);
                                setZoomImageUrl(images);
                                setProcessing(false);
                            }
                        }
                    }
                    else {
                        setProcessing(false);
                        notify('No data found!')
                    }
                }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },);

            });
        } catch (err) {
            console.log(err);
        }
    }

    async function getWindowFilterIds(idCol, IdVal, storeData1, isSpecificMappingEnable, menu1 = {}) {
        let AllIds = [];
        let { StoreId } = storeData1
        let { MenuId } = menu1
        let tbname2 = isSpecificMappingEnable ? 'Mapping_StoreVisibilitySpecific' : 'Mapping_StoreVisibility';
        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                let join = ` inner join ${tbname2} s on w.VisibilityDefinitionId=s.VisibilityDefinitionId  `;
                let q = `Select Distinct w.* from Master_VisibilityDefinition w ${join} where s.StoreId=${StoreId} and w.MenuId=${MenuId} `;
                await txn.executeSql(q, [], async function (txn2, txnres) {
                    if (txnres.rows.length > 0) {
                        let Wind_data = txnres.rows.item(0);
                        let { VisibilityTable } = Wind_data;
                        VisibilityTable = VisibilityTable != null ? VisibilityTable : '';
                        let filterIdsCol = '', filterNamesCol = '';
                        if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Category.toLowerCase()) {
                            filterIdsCol = 'CategoryId', filterNamesCol = 'CategoryName';
                        }
                        else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Brand.toLowerCase()) {
                            filterIdsCol = 'BrandId', filterNamesCol = 'BrandName';
                        }
                        else if (VisibilityTable.toLowerCase() == HierarchyTbls.Master_Product.toLowerCase()) {
                            filterIdsCol = 'ProductId', filterNamesCol = 'ProductName';
                        }
                        else {
                            filterIdsCol = 'SubCategoryId', filterNamesCol = 'SubCategoryName';
                        }

                        let FIdsQ = `Select distinct p.${filterIdsCol},p.${filterNamesCol} from Product_Master p where (p.${idCol}='${IdVal}' or p.${idCol}=${IdVal}) `;
                        await txn.executeSql(FIdsQ, [], async function (txn2, txnres2) {
                            if (txnres.rows.length > 0) {
                                for (var i = 0; i < txnres2.rows.length; i++) {
                                    let data = txnres2.rows.item(i);
                                    let id_value = data[filterIdsCol];
                                    AllIds.push(id_value);
                                    if (i == txnres2.rows.length - 1) {
                                        resolve(AllIds)
                                    }
                                }
                            }
                            else {
                                resolve([]);
                            }
                        }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) });
                    }
                    else {
                        resolve(AllIds)
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve(AllIds) },);
            });
        }).then((val) => {
            return val
        }).catch((err) => {
            console.log(err);
            return AllIds;
        });
    }

    async function getWindowSplits(NoOfSplit, window, storeData1, menu1) {
        let WindowSplits_def = [];
        for (var s = 0; s < NoOfSplit; s++) {
            let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true };
            WindowSplits_def.push(obj);
        }
        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                let q = `select * from ${AppTables.PAIDVIS_IMAGES} where PVIS_HEADER_ID='${window.PVisHeaderId}' and  STORE_ID='${storeData1.StoreId}' `;
                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            console.log(data.PVIS_HEADER_ID)
                            let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0;
                            let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0;
                            let Image1 = isImage1 == 1 && data.IMAGE1 != null && data.IMAGE1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE1 : '';
                            let Image2 = isImage2 == 1 && data.IMAGE2 != null && data.IMAGE2 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + data.IMAGE2 : '';
                            let obj = { 'Image1Name': data.IMAGE1, 'Image1': Image1, 'Image2Name': data.IMAGE2, 'Image2': Image2, img1Required: data?.ADD_IMAGES == 1 ? false : true, img2Required: data?.ADD_IMAGES == 1 ? false : true, addImg: data?.ADD_IMAGES || 0 };
                            arr.push(obj);
                            if (i == txnres2.rows.length - 1) {
                                resolve(arr)
                            }
                        }
                    }
                    else {
                        resolve(WindowSplits_def)
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve(WindowSplits_def) },);
            });
        }).then((val) => {
            return val
        }).catch((err) => {
            console.log(err);
            return WindowSplits_def;
        });
    }

    ///jp fixed queation enable disable on app kill
    const getWindowQuestionsById = (bgJsonDta, visibilityId, VisibilityDefinitionId) => {
        const item = bgJsonDta?.storeBGData?.find(i => i.VisibilityId == visibilityId && i.VisibilityDefinitionId == VisibilityDefinitionId);
        return item?.WindowQuestions || []
    };

    async function getWindowQuestions(window, storeData1, menu1, bgStoreJson = {}, isBgDataExists = false) {
        let obj = { 'WindowQA': {}, 'WindowQuestions': [] }
        let questionsBg = []
        ///jp fixed queation enable disable on app kill
        if (isBgDataExists) {
            questionsBg = getWindowQuestionsById(bgStoreJson, window.VisibilityId, window.VisibilityDefinitionId);
            console.log("bgStoreJson_new", questionsBg);
        }

        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                var q = '', selectlist = '', join = '', join2 = '';
                selectlist = ` DISTINCT  wq.VisibilityQuestionId,wq.VisibilityQuestionCode,wq.VisibilityQuestionName,wq.QuestionType,wq.VQShowCamera,wq.VQCameraMandatory,wq.VQLengthValidationRequired,wq.VQMinimumChar,wq.VQMaximumChar,wq.VQDecimalPoint,wq.VQDateRangeMin,wq.VQDateRangeMax,wq.VQVoiceLengthInMinutes,wq.VQDefaultQuestionEnable,(CASE WHEN q.QUESTION_ID is not null THEN 1 ELSE 0 END) isInserted,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as VAShowCamera,q.IMAGE1 as Image1  `;
                join2 = ` Left Outer Join ${AppTables.PAIDVIS_CHILD_DATA} q on wq.VisibilityQuestionId=q.QUESTION_ID and q.STORE_ID='${storeData1.StoreId}' and q.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and q.PVIS_ID='${window.VisibilityId}' and q.VISIT_DATE='${d2}'`;
                join = ` inner join Mapping_VisibilityQuestion mq on mq.VisibilityQuestionId=wq.VisibilityQuestionId `;
                q = `select ${selectlist} from Master_VisibilityQuestion wq  ${join} ${join2} where mq.VisibilityDefinitionId=${window.VisibilityDefinitionId} order by wq.VisibilityQuestionSequence  `;


                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        let wqa_obj = {};
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            let { isInserted } = data;
                            let answers = [];
                            data.VQDefaultQuestionEnable = data.VQDefaultQuestionEnable == 1 || data.VQDefaultQuestionEnable == 'true' ? true : false;
                            if (isInserted) {
                                data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false;
                                if (isBgDataExists) {
                                    if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) {
                                        const isEnabled = questionsBg.some(q =>
                                            q.VisibilityQuestionId === data.VisibilityQuestionId && q.isDisabled === false
                                        );
                                        if (isEnabled) {
                                            data['isDisabled'] = false;
                                            console.log("Matched Question:", data.VisibilityQuestionId);
                                        } else {
                                            data['isDisabled'] = true;
                                        }
                                    }
                                }
                            }
                            ///jp fixed queation enable disable on app kill
                            else if (isBgDataExists) {
                                data['isDisabled'] = !data.VQDefaultQuestionEnable;
                                if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) {
                                    const isEnabled = questionsBg.some(q =>
                                        q.VisibilityQuestionId === data.VisibilityQuestionId && q.isDisabled === false
                                    );
                                    if (isEnabled) {
                                        data['isDisabled'] = false;
                                        console.log("Matched Question:", data.VisibilityQuestionId);
                                    } else {
                                        data['isDisabled'] = true;
                                    }
                                }
                            } else {
                                data['isDisabled'] = !data.VQDefaultQuestionEnable;
                            }

                            if (data.QuestionType == 'Multi choice list' || data.QuestionType == 'Single choice list' || data.QuestionType == 'Rating') {
                                answers = await getWindowAnswers(data);
                                if (data.QuestionType == 'Rating') {
                                    data.showRating = false;
                                }
                            }
                            else if (data.QuestionType == 'Date') {
                                data.showDatePicker = false;
                            }
                            data['Answers'] = answers;

                            let id_key = data.VisibilityQuestionId + '_AnswerId';
                            let ans_key = data.VisibilityQuestionId + '_Answer';
                            let multi_key = data.VisibilityQuestionId + '_MultiOption';
                            let date_key = data.VisibilityQuestionId + '_Date';
                            let img_key = data.VisibilityQuestionId + '_ImagePath1';
                            let imgname_key = data.VisibilityQuestionId + '_ImageName1';
                            let rating_key = data.VisibilityQuestionId + '_Rating';


                            let showImageTag = (data.VQShowCamera == 'true' || data.VQShowCamera == 1);

                            data.AnswerId != null ? wqa_obj[id_key] = data.AnswerId : '';
                            data.Answer != null ? wqa_obj[ans_key] = data.Answer : '';


                            let selansid = data.AnswerId != null ? data.AnswerId : '';

                            if (data.QuestionType == 'Multi choice list' && (selansid != '' || selansid === 0) && data.multi_op_ids != null) {
                                selansid = data.multi_op_ids ? data.multi_op_ids.split(',') : [];
                                wqa_obj[multi_key] = data.multi_op_ids;
                            }

                            if ((data.QuestionType == 'Single choice list' || data.QuestionType == 'Multi choice list') && selansid != '' && selansid != null) {
                                if (data.Answers && data.Answers.length > 0) {
                                    for (var k = 0; k < data.Answers.length; k++) {
                                        let ansss = data.Answers[k];
                                        let isandImgAl = (ansss.VAShowCamera == 1 || ansss.VAShowCamera == 'true');
                                        if (data.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) {
                                            showImageTag = true;
                                        }
                                        else if (data.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) {
                                            showImageTag = true;
                                        }
                                    }
                                }
                            }

                            if (showImageTag && data.Answer != null) {
                                let imgPath = (Platform.OS == 'ios' ? 'file://' : '') + ImageFolderPath + menu1.ScreenName + "/" + data.Image1;
                                wqa_obj[imgname_key] = data.Image1;
                                wqa_obj[img_key] = imgPath;
                            }



                            if (data.QuestionType == 'Date' && data.Answer != null) {
                                let dayonly = moment().format('DD');
                                let actual_date = data.Answer ? data.Answer.split('/') : [];
                                let month = actual_date[0], year = actual_date[1];
                                let fulldate = month + '/' + dayonly + '/' + year;
                                wqa_obj[date_key] = fulldate;

                            }

                            arr.push(data);
                            if (i == txnres2.rows.length - 1) {
                                obj['WindowQuestions'] = arr;
                                obj['WindowQA'] = wqa_obj;
                                resolve(obj)
                            }
                        }
                    }
                    else {
                        resolve(obj)
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },);
            });
        }).then((val) => {
            return val
        }).catch((err) => {
            console.log(err);
            return obj;
        });
    }

    async function getWindowAnswers(qtn) {

        return new Promise((resolve, reject) => {

            db.transaction(async function (txn) {
                var q = '', selectlist = '';
                selectlist = ` DISTINCT  VisibilityAnswerId as AnswerId,VisibilityAnswerName as Answer,VAShowCamera,VACameraMandatory,VAQuestionEnable,VAQuestionDisable `;
                q = `select ${selectlist} from  Master_VisibilityQuestion  where VisibilityQuestionId=${qtn.VisibilityQuestionId}  order by VASequence  `;

                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            arr.push(data);
                            if (i == txnres2.rows.length - 1) {
                                resolve(arr)
                            }
                        }
                    }
                    else {
                        resolve([])
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve([]) },);
            });
        }).then((val) => {
            return val
        }).catch((err) => {
            console.log(err);
            return [];
        });
    }

    async function getWindowStockData(window, storeData1, isInserted = false, AllKPIFields = []) {
        let obj = { 'WStocks': [], 'WStocksData': [], 'isAllChecked': 0 }
        let { StateId, ChainId, StoreTypeId, StoreId } = storeData1;

        let isSpecificMapIndex = AllKPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping')
        let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? AllKPIFields[isSpecificMapIndex] : {};
        let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false;

        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                let checkassrt = window.VisibilityElementCheckAssortment == 'true' || window.VisibilityElementCheckAssortment == 1 ? true : false;
                let join = '', join2 = '', selectlist2 = '', q2 = '';

                //get data from masters with saved data if any
                if (checkassrt) {
                    join2 = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.VisibilityStockValue and a.StoreId=${StoreId}`;
                }

                let join3 = '';
                if (isSpecificMappingEnable == true) {
                    join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `;
                    selectlist2 = ` Distinct '0' as VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityTable as VisibilityStockTable,s.VisibilityField as VisibilityStockField,s.VisibilityValue as VisibilityStockValue,'' as VisibilityStockMBQ,s.ChildName as ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `;
                    q2 = `select ${selectlist2} from  Mapping_StoreVisibilitySpecific s ${join2} ${join3} where s.VisibilityDefinitionId='${window.VisibilityDefinitionId}'  and s.StoreId='${StoreId}'   order by s.ChildName `;

                } else {
                    join3 = ` Left Outer Join ${AppTables.PAIDVIS_STOCK_DATA} ps on s.VisibilityStockDefinitionId=ps.PVIS_STOCK_DEFINITION_ID and s.VisibilityStockValue=ps.PVIS_STOCK_VALUE and ps.PVIS_DEFINITION_ID='${window.VisibilityDefinitionId}' and ps.STORE_ID='${storeData1.StoreId}' `;
                    selectlist2 = `  s.VisibilityStockDefinitionId, s.VisibilityDefinitionId,s.VisibilityStockTable,s.VisibilityStockField,s.VisibilityStockValue,s.VisibilityStockMBQ,s.ProductName, ps.STOCK as Stock,IFNULL(ps.IS_PVIS_PRESENT,'') as isPVisPresent `;
                    q2 = `select ${selectlist2} from  Master_VisibilityStockDefinition s ${join2} ${join3} where s.VisibilityDefinitionId=${window.VisibilityDefinitionId}   order by s.ProductName   `;
                }

                // console.log("isSpecificMappingEnable---",isSpecificMappingEnable,q2)
                await txn.executeSql(q2, [], async function (txn2, txnres2) {
                    console.log('Stock qty added:', txnres2.rows.length);
                    if (txnres2.rows.length > 0) {
                        let arr = [], WStocksData = [];
                        let isAllChecked = 1;
                        for (var i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            // use index for refId instead of VisibilityStockDefinitionId as the condition does not work in case of isSpecificMappingEnable is true ( because all VisibilityStockDefinitionId are 0) 
                            let refId = 'input1_' + data.VisibilityDefinitionId + "_" + i;

                            inputRefs.current[refId] = '';
                            if (data.Stock != null) {
                                let stockData_obj = { 'ProductId': data.VisibilityStockValue, 'Stock': data.Stock, 'isPVisPresent': (data.isPVisPresent != null ? data.isPVisPresent : 0) }
                                WStocksData.push(stockData_obj);
                            }
                            if (data.isPVisPresent == null || data.isPVisPresent == 0 || data.isPVisPresent == '0' || data.isPVisPresent == '') {
                                isAllChecked = 0;
                            }
                            arr.push(data);
                            if (i == txnres2.rows.length - 1) {
                                obj['WStocks'] = arr;
                                obj['WStocksData'] = WStocksData;
                                obj['isAllChecked'] = isAllChecked;
                                resolve(obj)
                            }
                        }
                    }
                    else {
                        resolve(obj)
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve(obj) },);
            });
        }).then((val) => {
            return val
        }).catch((err) => {
            console.log(err);
            return obj;
        });
    }

    async function focusToNext(WindowStocks, windowIndex, stockProd, index) {
        //console.log('focusToNext is call');
        //console.log('WindowStocks', index + 1)
        if (index == WindowStocks.length - 1) {
            return;
        }
        try {
            console.log('next 1 call', 'input1_' + WindowStocks[index + 1].VisibilityDefinitionId + '_' + (index + 1))
            let refIn2 = inputRefs.current['input1_' + WindowStocks[index + 1].VisibilityDefinitionId + '_' + (index + 1)];
            if (refIn2 != null) {
                refIn2.focus();
            }
        }
        catch (err) {
            console.log(err);
        }
    }

    ///optimize code for taking much time
    async function getImage(imgdata) {
        let type = getImageProps.type || '';
        let window = getImageProps.window || {};
        let splitItem = getImageProps.splitItem || {};
        let splitItemIndex = getImageProps.splitItemIndex || 0;
        let qtn = getImageProps.qtn || {};
        let cameraType = getImageProps.cameraType != null ? getImageProps.cameraType : '1';
        if (typeof imgdata == 'object' && imgdata.errorCode == 'camera_unavailable') {
            notify(ST.Cameraunavailable);
        }
        else if (typeof imgdata == 'object' && imgdata.uri != null) {
            const img = imgdata;
            const imgurl = img.uri, imgWidth = img.width, imgHeight = img.ExtendedHeight;
            let isImgFromGallery = img.fromGallery != null ? img.fromGallery : false;
            let picture_clickedd = isImgFromGallery == true ? img.datetime : new Date();
            ////change by jeevanp
            let picture_clicked_time = moment(picture_clickedd).format('MM-DD-YYYY HH:mm:ss')
            let picture_clicked_time_for_pic_name = moment(picture_clickedd).format('MMDDYYYY_HHmmss')
            console.log("time", picture_clicked_time);
            console.log("time1", picture_clicked_time_for_pic_name);
            ////change by jeevanp
            let calculate_tym_date_for_filename = picture_clicked_time_for_pic_name;
            let calculate_tym_date_over_img = picture_clicked_time;
            let filename = storeData.StoreId + '_' + window.VisibilityDefinitionId + '_' + window.VisibilityId + '_' + (props.UserId || '') + '_STImg-' + calculate_tym_date_for_filename + '.jpg';
            let allData = WindowData;
            let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
            const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
            let wind = wind_index >= 0 ? allData[wind_index] : defData;
            let camera1Label = window.VisibilityImage1Lable || '';
            let camera2Label = window.VisibilityImage2Lable || '';
            let extraLabel = '';

            if (cameraType == '2') {
                var QD = wind.WindowQA || {};
                var image_key = qtn.VisibilityQuestionId + '_ImageName1';
                var image_key_path = qtn.VisibilityQuestionId + '_ImagePath1';
                QD[image_key] = filename;
                extraLabel = 'Qtn Id: ' + qtn.VisibilityQuestionId;
            }
            else if (cameraType == '3') {
                var image_key = 'NAImage1';
                var image_key_path = 'NAImage1Path';
                wind[image_key] = filename;
                extraLabel = 'Not Exist';
            }
            else {
                var WindowSplits = wind.WindowSplits || [];
                var image_key = type == '1' ? 'Image1Name' : 'Image2Name';
                var image_key_path = type == '1' ? 'Image1' : 'Image2';
                splitItem[image_key] = filename;
                extraLabel = type == '1' ? camera1Label : camera2Label;
            }

            console.log("checkimgoffline--", calculate_tym_date_over_img, picture_clicked_time)
            const mark_text1 = calculate_tym_date_over_img;
            const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Visibility Name:' + window.VisibilityName + '(' + window.VisibilityDefinitionId + ')' + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img;

            let imagePath = `${ImageFolderPath + currentMenu.ScreenName}/${filename}`;
            RNFS.copyFile(imgurl, imagePath)
                .then(async (resn) => {
                    // render data with clicked image
                    let uri = 'file://' + imagePath;
                    console.log('image marker:', imgWidth, imgHeight, uri);

                    if (cameraType == '2') {
                        QD[image_key_path] = uri;
                        wind.WindowQA = QD;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        WindowDataRef.current = allData
                        setWindowData(allData);
                        // setHasUnsavedChanges(true);
                        BgUnsavedChanges(true)
                        setrerenderdata3(!rerenderdata3);
                    }
                    else if (cameraType == '3') {
                        wind[image_key_path] = uri;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        WindowDataRef.current = allData
                        setWindowData(allData);
                        // setHasUnsavedChanges(true);
                        BgUnsavedChanges(true)
                        setrerenderdata(!rerenderdata);
                    }
                    else {
                        console.log('split image updated');
                        splitItem[image_key_path] = uri;
                        splitItemIndex >= 0 ? WindowSplits[splitItemIndex] = splitItem : WindowSplits.push(splitItem);
                        wind.WindowSplits = WindowSplits;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        WindowDataRef.current = allData
                        setWindowData(allData);
                        // setHasUnsavedChanges(true);
                        BgUnsavedChanges(true)
                        setrerenderdata2(!rerenderdata2);
                    }

                    let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
                    let winArr = [...InputChange]
                    winArr[objIndex].Flag = true
                    setSelectedImg(uri)
                    setInputChange(winArr)

                    // add metdata then resize image and restored back to the imagePath
                    let restore_data = { "destFilePath": imagePath, "imgurl": imgurl, imgWidth, imgHeight, mark_text1, mark_text2 }
                    let is_restored = await restore_ImageWithMetaData(restore_data, imgdata);
                    console.log("image restored:", is_restored);

                })
                .catch(err => {
                    console.log('ERROR: image file write failed!!!');
                    console.log(err.message, err.code);
                });
        }

    }


    async function onQRScanned(imgdata) {
        let qtn = QRqtnData.qtn || {};
        let window = QRqtnData.window || {};
        let QR_withValidChars = imgdata != null && imgdata != '' ? imgdata.replace(/["']/g, '') : '';
        let value = QR_withValidChars;//imgdata && imgdata[0] && imgdata[0].displayValue ? imgdata[0].displayValue :""
        setTextValue(value, qtn, window)
    }


    function showQtnDatePicker(qtn, window, show = false) {
        let allQtns = window.WindowQuestions || [];
        let newqtnIndex = allQtns.findIndex(q => q.VisibilityQuestionId == qtn.VisibilityQuestionId);

        if (newqtnIndex >= 0) {
            let newqtn = allQtns[newqtnIndex];
            newqtn.showDatePicker = show;
            allQtns[newqtnIndex] = newqtn;
            window['WindowQuestions'] = allQtns;
            let allWindows = Windows;
            const winIndex = allWindows.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId) || {};
            allWindows[winIndex] = window;
            setWindows(allWindows);
            setGlobalWindows(allwindows);
            if (show == true) setrerenderdata(!rerenderdata);
        }
    }

    async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) {
        setErrorField({});
        setError(false);
        let GridAllow = false;
        if (type == '1') {
            GridAllow = cameraType == '1' ? (type === '1' ? (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid == true) : (window.VisibilityImage1CameraGrid === 'true' || window.VisibilityImage1CameraGrid == true)) : false
        } else {
            GridAllow = cameraType == '1' ? (type === '2' ? (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid == true) : (window.VisibilityImage2CameraGrid === 'true' || window.VisibilityImage2CameraGrid == true)) : false
        }
        setGridValue(GridAllow);
        setGetImageProps({ 'window': window, 'splitItem': splitItem, 'splitItemIndex': splitItemIndex, 'type': type, 'cameraType': cameraType, 'qtn': qtn });
        setShowCamera(true);
    }

    async function onSubmitData() {
        let isvalid = await validate();
        if (isvalid) {
            Keyboard.dismiss();
            setShowAlert(true);
        }
    }

    async function saveData() {
        // setHasUnsavedChanges(false);
        BgUnsavedChanges(false)
        setShowAlert(false);
        setLoaderTitle(ST.SavingData + '...');
        setProcessing(true);
        let d1n = new Date();
        let d3 = moment(d1n).format('MM/DD/YYYY');
        try {
            let { StoreId } = storeData;
            let isSpecificMapIndex = KPIFields.findIndex(i => i.KPIFieldName == 'SpecificMapping')
            let isSpecificMapKPIObj = isSpecificMapIndex >= 0 ? KPIFields[isSpecificMapIndex] : {};
            let isSpecificMappingEnable = isSpecificMapIndex >= 0 ? isSpecificMapKPIObj['KPIFieldEnable'] : false;
            //  remove old data
            let isDeleted = await removePreviousData();
            console.log("isDeleted:", isDeleted);
            await db.transaction(async function (txn) {
                // add data
                var values = '', childV = '', imageV = '', stockV = '';
                for (const wi in globalWindows) {
                    const window = globalWindows[wi];
                    let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0;
                    let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0;
                    let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0;
                    let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0;
                    let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0;
                    let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0;
                    let WindowQuestions = window.WindowQuestions || [];
                    let WindowStocks = window.WindowStocks || [];

                    const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
                    let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0';
                    let ReasonId = wind.ReasonId != null ? wind.ReasonId : 0;
                    let Reason = wind.Reason != null ? wind.Reason : '';
                    let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : '';
                    let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : '';
                    let remark = wind.remark != null ? wind.remark : '';
                    let WindowSplits = wind.WindowSplits || [];
                    let QD = wind.WindowQA || {};
                    let WStocksData = wind.WStocksData || [];

                    let PVIS_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1);
                    let { VisibilityDefinitionId, MenuId, VisibilityId, VisibilityName, VisibilityTable, VisibilityField, VisibilityValue, ChildName } = window;
                    let showOtherText = wind.showOtherText == true || wind.showOtherText == '1' ? 1 : 0;
                    let RemarkText = wind.RemarkText != null ? wind.RemarkText : '';
                    console.log('MenuId in savedata:', MenuId);
                    values += values != '' ? ' , ' : '';
                    values += ` ('${PVIS_HEADER_ID}','${MenuId}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityName}','${VisibilityTable}','${VisibilityField}','${VisibilityValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${(remark || '')}','${showOtherText}','${RemarkText}','1','${d3}','${isSpecificMappingEnable}') `;
                    if (isPresent == 1) {
                        for (const qtnIndex in WindowQuestions) {
                            const qtn = WindowQuestions[qtnIndex];

                            let selansid = '', selanswer = '', selimg = '', showImageTag = false;
                            let id_key = qtn.VisibilityQuestionId + '_AnswerId';
                            let ans_key = qtn.VisibilityQuestionId + '_Answer';
                            let multi_key = qtn.VisibilityQuestionId + '_MultiOption';
                            let date_key = qtn.VisibilityQuestionId + '_Date';
                            let img_key = qtn.VisibilityQuestionId + '_ImagePath1';
                            let imgname_key = qtn.VisibilityQuestionId + '_ImageName1';
                            let rating_key = qtn.VisibilityQuestionId + '_Rating';
                            let list_mcdata = [];
                            let isDisabled = qtn.isDisabled;

                            let { VisibilityQuestionId, VisibilityQuestionCode, QuestionType, VQShowCamera } = qtn
                            let answer = QD[ans_key] || 0;
                            let answerId = QD[id_key] === 0 ? 0 : (QD[id_key] || '');
                            let multi_options_ids = QD[multi_key] || '';

                            if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') {
                                showImageTag = (qtn.VQShowCamera == 1 || qtn.VQShowCamera == 'true');
                            }
                            else if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) {
                                if (qtn.Answers && qtn.Answers.length > 0) {
                                    for (var i = 0; i < qtn.Answers.length; i++) {
                                        let ansss = qtn.Answers[i];
                                        let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1);
                                        if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == answerId)) {
                                            showImageTag = true;
                                        }
                                        else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && answerId.indexOf(ansss.AnswerId) >= 0)) {
                                            showImageTag = true;
                                        }

                                    }
                                }
                            }

                            let Image1 = showImageTag == 1 ? QD[imgname_key] : '';


                            childV += childV != '' ? ' , ' : '';
                            childV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityQuestionId}','${VisibilityQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${showImageTag}','${d3}','${isDisabled}') `;
                        }
                        for (const splitItemIndex in WindowSplits) {
                            const splitItem = WindowSplits[splitItemIndex];
                            let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : '';
                            let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : '';
                            Image1Name = isImage1 == 1 ? Image1Name : '';
                            Image2Name = isImage2 == 1 ? Image2Name : '';

                            imageV += imageV != '' ? ' , ' : '';
                            imageV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${Image1Name}','${Image2Name}','${d3}',${splitItem?.addImg || 0}) `;
                        }
                        for (const stockProdIndex in WindowStocks) {
                            const stockProd = WindowStocks[stockProdIndex];
                            let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {};
                            let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : '');
                            let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0;
                            let { VisibilityStockDefinitionId, VisibilityDefinitionId, VisibilityStockTable, VisibilityStockField, VisibilityStockValue, VisibilityStockMBQ, ProductName } = stockProd
                            stockV += stockV != '' ? ' , ' : '';
                            stockV += ` ('${PVIS_HEADER_ID}','${StoreId}','${d3}','${VisibilityDefinitionId}','${VisibilityId}','${VisibilityStockDefinitionId}','${VisibilityStockTable}','${VisibilityStockField}','${VisibilityStockValue}','${VisibilityStockMBQ}','${ProductName}','${stock}','${isPVisPresent}','${d3}') `;
                        }

                    }
                }

                console.log('values:', values);


                let add_hdr_data = `INSERT INTO ${AppTables.PAIDVIS_HDR_DATA} (PVIS_HEADER_ID,MENU_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_NAME,PVIS_TABLE,PVIS_FIELD,PVIS_VALUE,CHILD_NAME,IS_PRESENT,PVIS_NA_IMAGE,REASON_ID,REASON,REMARK,SHOW_RSN_REMARK,REASON_REMARK,IS_UPDATED,ADDED_DATE, IS_STORE_SPECIFIC) VALUES ${values} `;
                let add_child_data = `INSERT INTO ${AppTables.PAIDVIS_CHILD_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,ADDED_DATE,IS_DISABLED) VALUES ${childV} `;
                let add_images_data = `INSERT INTO ${AppTables.PAIDVIS_IMAGES} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,IMAGE1,IMAGE2,ADDED_DATE,ADD_IMAGES) VALUES ${imageV} `;
                let add_stock_data = `INSERT INTO ${AppTables.PAIDVIS_STOCK_DATA} (PVIS_HEADER_ID,STORE_ID,VISIT_DATE,PVIS_DEFINITION_ID,PVIS_ID,PVIS_STOCK_DEFINITION_ID,PVIS_STOCK_TABLE,PVIS_STOCK_FIELD,PVIS_STOCK_VALUE,PVIS_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_PVIS_PRESENT,ADDED_DATE) VALUES ${stockV} `;


                await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) {
                    console.log('st header data added');
                    var isSplitImageAdded = true, isStockAdded = true, isChildAdded = true;
                    if (imageV != '') {
                        isSplitImageAdded = await executeQuery(add_images_data);
                    }
                    if (stockV != '') {
                        isStockAdded = await executeQuery(add_stock_data);
                    }
                    if (childV != '') {
                        isChildAdded = await executeQuery(add_child_data);
                    }

                    if (!isSplitImageAdded) {
                        setProcessing(false); notify('Cannot add paid visibility images');
                    }
                    else if (!isStockAdded) {
                        setProcessing(false); notify('Cannot add paid visibility stock data');
                    }
                    else if (!isChildAdded) {
                        setProcessing(false); notify('Cannot add paid visibility questions data');
                    }
                    else {
                        // clear store data in local storage to avoiding re-set data for the store  
                        clear_item('storeData')
                        setProcessing(false); notify('Paid visibility updated successfully');
                        props.navigation.goBack();
                    }


                }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); notify('Cannot add paid visibility data'); },);
            });
        } catch (err) {
            console.log(err);
        }
    }

    async function removePreviousData() {
        let { StoreId } = storeData;
        let { PSAllow } = currentMenu
        let deleteOnlyCatData = ShowCatWise && PSAllow && FilteredPromoValues.length > 0;
        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                let sq = `Select * FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `;
                if (deleteOnlyCatData) {
                    let FilterIdsJoin = FilteredPromoValues.join(',');
                    sq += ` and PVIS_VALUE in (${FilterIdsJoin})  `;
                }
                await txn.executeSql(sq, [], async function (txn2, txnres) {
                    if (txnres.rows.length > 0) {
                        let arr = [];
                        let isHdrDel = false, isQtnsDel = false, isImagesDel = false, isStockDel = false;
                        for (let i = 0; i < txnres.rows.length; i++) {
                            let data = txnres.rows.item(i);
                            let { PVIS_HEADER_ID } = data;
                            arr.push(PVIS_HEADER_ID);
                            if (i == txnres.rows.length - 1) {
                                let AllHdrIds = `'${arr.join("','")}'`;

                                await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_HDR_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}'  and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) {
                                    console.log('window hdr data deleted');
                                    isHdrDel = true;
                                    if (isHdrDel && isHdrDel && isImagesDel && isStockDel) {
                                        resolve(true);
                                    }
                                }, function (txnE, txnerr) { console.log(txnerr); },);
                                await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_CHILD_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) {
                                    console.log('window child data deleted');
                                    isQtnsDel = true;
                                    if (isHdrDel && isHdrDel && isImagesDel && isStockDel) {
                                        resolve(true);
                                    }
                                }, function (txnE, txnerr) { console.log(txnerr); },);
                                await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_IMAGES} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) {
                                    console.log('window images data deleted');
                                    isImagesDel = true;
                                    if (isHdrDel && isHdrDel && isImagesDel && isStockDel) {
                                        resolve(true);
                                    }
                                }, function (txnE, txnerr) { console.log(txnerr); },);
                                await txn.executeSql(`DELETE FROM ${AppTables.PAIDVIS_STOCK_DATA} WHERE STORE_ID='${StoreId}' and VISIT_DATE='${d2}' and PVIS_HEADER_ID in (${AllHdrIds}) `, [], async function (txn2, txnres) {
                                    console.log('window stock data deleted');
                                    isStockDel = true;
                                    if (isHdrDel && isHdrDel && isImagesDel && isStockDel) {
                                        resolve(true);
                                    }
                                }, function (txnE, txnerr) { console.log(txnerr); },);

                            }
                        }
                    }
                    else {
                        resolve(true);
                    }
                }, function (txnE, txnerr) { console.log(txnerr); resolve(false); },);


            });

        }).then((val) => {
            return val;
        }).catch((err) => {
            console.log('error:', err);
            return false;
        })
    }

    async function executeQuery(q) {
        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    resolve(true);
                }, function (Etxn, txnerr) { console.log(txnerr); resolve(false) });
            });
        }).then((val) => {
            return val;
        }).catch((err) => {
            console.log(err);
            return false;
        })
    }

    async function validate() {
        let isValid = true;
        let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox');
        let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {};
        let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true;
        function showError(obj, isErr) {
            setErrorField(obj);
            setError(isErr);
        }
        return new Promise((resolve, reject) => {
            for (const [index, window] of globalWindows.entries()) {
                console.log(globalWindows, "globalWindowsglobalWindows");
                console.log(window, "windowwindow", WindowData, "WindowDataWindowData");
                let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0;
                let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0;
                let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0;
                let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0;
                let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0;
                let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0;
                let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0;
                let WindowQuestions = window.WindowQuestions || [];
                console.log(WindowQuestions, 'WindowQuestionSSSS')
                let WindowStocks = window.WindowStocks || [];
                const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
                let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0';
                let ReasonId = wind.ReasonId != null ? wind.ReasonId : '';

                let Reason = wind.Reason != null ? wind.Reason : '';
                let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : '';
                let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : '';
                let remark = wind.remark != null ? wind.remark : '';
                let WindowSplits = wind.WindowSplits || [];
                let QD = wind.WindowQA || {};

                let WStocksData = wind.WStocksData || [];
                let showOtherText = wind.showOtherText != null ? wind.showOtherText : false;

                let errorobj = { 'EF_Window': window };

                if (isPresent == '1') {
                    if (isReasonEnable == true && ReasonId == '') {
                        errorobj['EF_NExistReason'] = "NExistReason";
                        showError(errorobj, true);
                        notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName} `, 'LONG');
                        resolve(false);
                        return;
                    } else {
                        if (StoreCameraAllow && window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) {
                            for (const splitItemIndex in WindowSplits) {
                                const splitItem = WindowSplits[splitItemIndex];
                                let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : '';
                                let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : '';
                                let addImg = splitItem['addImg'] != null && splitItem['addImg'] != '' ? splitItem['addImg'] : '';
                                let addImgFlag = true
                                console.log('Image2Name', Image2Name, isImage2);
                                if (addImg ? Image1Name == '' : (isImage1 == 1 && Image1Name == '')) {
                                    errorobj['EF_splitImage1'] = "splitImage1";
                                    errorobj['EF_splitItemIndex'] = splitItemIndex;
                                    showError(errorobj, true);
                                    notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`, 'LONG');
                                    resolve(false);
                                    addImgFlag = false
                                    return;
                                } else if ((addImg && !addImgFlag) ? (Image2Name == '') : (addImg ? false : (isImage2 == 1 && Image2Name == ''))) {
                                    console.log("tes---", addImg, !addImgFlag, (addImg && !addImgFlag) ? (Image2Name == '') : (addImg ? false : (isImage2 == 1 && Image2Name == '')))
                                    errorobj['EF_splitImage2'] = "splitImage2";
                                    errorobj['EF_splitItemIndex'] = splitItemIndex;
                                    showError(errorobj, true);
                                    notify(`${ST.Pleaseclickallimagesfor} ${window.VisibilityName}`, 'LONG');
                                    resolve(false);
                                    addImgFlag = false
                                    return;
                                }
                            }
                        }

                        if (isStockReq == 1) {
                            let isProductSelected = false;
                            for (const stockProdIndex in WindowStocks) {
                                const stockProd = WindowStocks[stockProdIndex];

                                let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {};
                                let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : '');
                                let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0;

                                if (isPVisPresent == 1) {
                                    isProductSelected = true;
                                }

                                if ((isListedSKUEnable == true && isPVisPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && stock !== 0 && (stock == null || stock == ''))) {
                                    errorobj['EF_stock'] = "input1_";
                                    errorobj['EF_stockProdIndex'] = stockProdIndex;
                                    let refIn1 = inputRefs.current['input1_' + window.VisibilityDefinitionId + '_' + stockProdIndex];
                                    if (refIn1 != null) {
                                        refIn1.focus();
                                    }
                                    showError(errorobj, true);
                                    notify(`${ST.Pleaseenterstockfor} ${window.VisibilityName} ( ${stockProd.ProductName} ) `, 'LONG');
                                    resolve(false);
                                    return;
                                }

                                if (isListedSKUEnable == true && stockProdIndex == WindowStocks.length - 1) {
                                    if (!isProductSelected) {
                                        errorobj['EF_isProductSelected'] = "isProductSelected";
                                        showError(errorobj, true);
                                        notify(`${ST.PleaseselectatleastoneSKUfor} ${window.VisibilityName} `, 'LONG');
                                        resolve(false);
                                        return;
                                    }
                                }
                            }
                        }

                        if (WindowQuestions.length > 0) {
                            for (const qtnIndex in WindowQuestions) {
                                const qtn = WindowQuestions[qtnIndex];

                                let selansid = '', selanswer = '', selimg = '', showImageTag = false;
                                let id_key = qtn.VisibilityQuestionId + '_AnswerId';
                                let ans_key = qtn.VisibilityQuestionId + '_Answer';
                                let multi_key = qtn.VisibilityQuestionId + '_MultiOption';
                                let date_key = qtn.VisibilityQuestionId + '_Date';
                                let img_key = qtn.VisibilityQuestionId + '_ImagePath1';
                                let imgname_key = qtn.VisibilityQuestionId + '_ImageName1';
                                let rating_key = qtn.VisibilityQuestionId + '_Rating';

                                let isDisabled = qtn.isDisabled;

                                if (!isDisabled) {
                                    let list_mcdata = [];
                                    errorobj['EF_qtn'] = qtn;

                                    let isImgAllowed = false;

                                    if (qtn.QuestionType == 'Single choice list') {
                                        selansid = QD[id_key];

                                        // Determine if image is allowed based on the selected answer
                                        for (let i = 0; i < qtn.Answers.length; i++) {
                                            if (qtn.Answers[i].AnswerId == selansid) {
                                                isImgAllowed = (qtn.Answers[i].VACameraMandatory == 'true' || qtn.Answers[i].VACameraMandatory == 1);
                                                break;
                                            }
                                        }

                                    } else if (qtn.QuestionType == 'Multi choice list') {
                                        selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : [];

                                        // Determine if image is allowed based on any selected answer
                                        for (let i = 0; i < qtn.Answers.length; i++) {
                                            if (selansid.indexOf(qtn.Answers[i].AnswerId.toString()) >= 0 && (qtn.Answers[i].VACameraMandatory == 'true' || qtn.Answers[i].VACameraMandatory == 1)) {
                                                isImgAllowed = true;
                                                break;
                                            }
                                        }
                                    }

                                    let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating' || qtn.QuestionType == 'QR');

                                    if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) {
                                        errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice';
                                        showError(errorobj, true);
                                        notify(`${ST.Pleaseselectoptionsfortherequiredfield} ${ST.In} ${window.VisibilityName}`, 'SHORT');
                                        resolve(false);
                                        return;
                                    } else if (checkForAnsKey && (Object.keys(QD).indexOf(ans_key) < 0 || (Object.keys(QD).indexOf(ans_key) >= 0 && QD[ans_key] === ''))) {
                                        errorobj['EF_Qtn_Date'] = 'Qtn_Date';
                                        showError(errorobj, true);
                                        let msg = (qtn.QuestionType == 'Date' ? `${ST.Pleasepickadatefortherequiredfield} ${ST.In} ${window.VisibilityName}` : (qtn.QuestionType == 'Rating' ? `${ST.Pleaseselectratingfortherequiredfield} ${ST.In} ${window.VisibilityName}` : `${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`));
                                        notify(msg, 'SHORT');
                                        resolve(false);
                                        return;
                                    } else if (Object.keys(QD).indexOf(id_key) < 0 || (Object.keys(QD).indexOf(id_key) >= 0 && (QD[id_key] === ''))) {
                                        errorobj['EF_Qtn_Input'] = 'Qtn_Input';
                                        showError(errorobj, true);
                                        notify(`${ST.Pleasefillalltherequiredfield} ${ST.In} ${window.VisibilityName}`, 'SHORT');
                                        resolve(false);
                                        return;
                                    } else if (isImgAllowed && StoreCameraAllow && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) {
                                        errorobj['EF_Qtn_Image'] = 'Qtn_Image';
                                        showError(errorobj, true);
                                        notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`, 'SHORT');
                                        resolve(false);
                                        return;
                                    } else {
                                        console.log('no condition found');
                                    }

                                    if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) {
                                        if (qtn.Answers && qtn.Answers.length > 0) {
                                            for (var j = 0; j < qtn.Answers.length; j++) {
                                                let ansss = qtn.Answers[j];
                                                let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1);
                                                if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) {
                                                    showImageTag = true;
                                                } else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) {
                                                    showImageTag = true;
                                                }
                                            }
                                        }
                                    }

                                    if (showImageTag && StoreCameraAllow && (Object.keys(QD).indexOf(img_key) < 0 || (Object.keys(QD).indexOf(img_key) >= 0 && QD[img_key] === ''))) {
                                        errorobj['EF_Qtn_Image'] = 'Qtn_Image';
                                        showError(errorobj, true);
                                        notify(`${ST.Pleaseaddimages} ${ST.In} ${window.VisibilityName}`, 'SHORT');
                                        resolve(false);
                                        return;
                                    }
                                }
                            }
                        }

                    }
                } else {
                    if (isNAReasonEnable == true && ReasonId == '') {
                        errorobj['EF_NExistReason'] = "NExistReason";
                        showError(errorobj, true);
                        notify(`${ST.Pleaseselectreasonfor} ${window.VisibilityName}`, 'LONG');
                        resolve(false);
                        return;
                    } else if (isNAReasonEnable == true && showOtherText == true && (wind.RemarkText == null || wind.RemarkText == '')) {
                        errorobj['EF_NExistRemark'] = "NExistRemark";
                        showError(errorobj, true);
                        notify(`${ST.PleaseEnterRemarkFor} ${window.VisibilityName} `, 'LONG');
                        resolve(false);
                        return;
                    } else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') {
                        errorobj['EF_NExistImage'] = "NExistImage";
                        showError(errorobj, true);
                        notify(`${ST.Pleaseclickimagefor} ${window.VisibilityName}`, 'LONG');
                        resolve(false);
                        return;
                    }
                }

                if (index === globalWindows?.length - 1) {
                    resolve(true);
                    return;
                }
            }
        }).then((val) => { return val })
            .catch((err) => { console.log(err); return false });
    }


    function onselectionChange3(option, keyLbl, keyVal, otherData) {
        setErrorField({});
        setError(false);
        let item = otherData.window;
        let allData = WindowData;
        let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId };
        const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        wind[keyVal] = option.value;
        wind[keyLbl] = option.label;

        if (keyLbl == 'Reason') {
            let rsn_Index = reasons_list.findIndex(i => i.ReasonId == option.value);

            if (rsn_Index >= 0) {
                let rsn = reasons_list[rsn_Index];
                let IsRemarkTaken = rsn.IsRemarkTaken == 1 || rsn.IsRemarkTaken == '1' ? true : false;

                if (IsRemarkTaken == true) {
                    wind['showOtherText'] = true;
                }
                else {
                    wind['showOtherText'] = false;
                }
            }
        }

        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);
        console.log('allData:', allData);
        let objIndex = InputChange.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        // console.log("setInputChange-",InputChange)
        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function onselectionChange(option, qtn, window) {
        setErrorField({});
        setError(false);
        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = wind_index >= 0 ? allData[wind_index] : defData;
        let data = wind.WindowQA || {};
        let id_key = qtn.VisibilityQuestionId + '_AnswerId';
        let ans_key = qtn.VisibilityQuestionId + '_Answer';
        data[id_key] = option.value;
        data[ans_key] = option.label;

        wind['WindowQA'] = data;
        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
        let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        WindowDataRef.current = allData
        setWindowData(allData);

        let aq_ans = qtn.Answers != null ? qtn.Answers : [];
        let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {};
        let EQtns = ans_obj.VAQuestionEnable != null && ans_obj.VAQuestionEnable != '' ? ans_obj.VAQuestionEnable.replace(' ', '').split(',') : [];
        let DQtns = ans_obj.VAQuestionDisable != null && ans_obj.VAQuestionDisable != '' ? ans_obj.VAQuestionDisable.replace(' ', '').split(',') : [];

        let sqtns = window.WindowQuestions || []

        if (EQtns.length > 0) {
            enableQtns(sqtns, EQtns, DQtns, data, wind, wind_index, allData, window)
        }
        else if (DQtns.length > 0) {
            disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window)
        }
        else {
            // setHasUnsavedChanges(true);
            BgUnsavedChanges(true)
            setrerenderdata(!rerenderdata);
        }
        BgUnsavedChanges(true)

    }

    async function disableQtns(sqtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) {

        if (DQtns.length > 0) {
            new Promise.all(
                DQtns.map((qid, q_index) => {
                    let s_qtnindex = sqtns.findIndex(i => i.VisibilityQuestionId == qid) || {};
                    let s_qtn = sqtns[s_qtnindex];
                    if (s_qtn != null) {
                        s_qtn['isDisabled'] = true
                        sqtns[s_qtnindex] = s_qtn;
                        let id_key = s_qtn.VisibilityQuestionId + '_AnswerId';
                        let ans_key = s_qtn.VisibilityQuestionId + '_Answer';
                        data[id_key] = 0;
                        data[ans_key] = '';

                        wind['WindowQA'] = data;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        return false
                    } else {
                        return false
                    }
                })
            ).then(async (val) => {
                ///jp fixed queation enable disable on app kill
                let allwindows = Windows;
                let windowIndex = allwindows.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId)
                let dataIndex = allData.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId);
                if (windowIndex >= 0) {
                    window['WindowQuestions'] = sqtns;
                    allwindows[windowIndex] = window;
                    // ✅ Update in allData too
                    if (dataIndex >= 0) {
                        allData[dataIndex]['WindowQuestions'] = sqtns;
                    }
                    // ✅ Set final updated refs and states
                    WindowDataRef.current = allData;
                    setWindowData(allData);
                    setWindows(allwindows);
                    BgUnsavedChanges(true)
                    setrerenderdata(!rerenderdata);
                }

            })
        }
    }

    async function enableQtns(sqtns, EQtns, DQtns, data, wind = {}, wind_index = -1, allData = [], window = {}) {
        new Promise.all(
            EQtns.map((qid, q_index) => {
                let s_qtnindex = sqtns.findIndex(i => i.VisibilityQuestionId == qid) || {};
                let s_qtn = sqtns[s_qtnindex];
                if (s_qtn != null) {
                    s_qtn['isDisabled'] = false
                    sqtns[s_qtnindex] = s_qtn;
                    return false
                }
                else {
                    return false
                }
            })
        ).then(async (val) => {
            if (DQtns.length > 0) {
                await disableQtns(sqtns, DQtns, data, wind, wind_index, allData, window)
            }
            else {
                ///jp fixed queation enable disable on app kill
                let allwindows = Windows;
                let windowIndex = allwindows.findIndex(i => i.VisibilityDefinitionId == window.VisibilityDefinitionId && i.VisibilityId == window.VisibilityId)
                let dataIndex = allData.findIndex(i =>
                    i.VisibilityDefinitionId == window.VisibilityDefinitionId &&
                    i.VisibilityId == window.VisibilityId
                );

                if (windowIndex >= 0) {
                    window['WindowQuestions'] = sqtns;
                    allwindows[windowIndex] = window;
                    // ✅ Update in allData too
                    if (dataIndex >= 0) {
                        allData[dataIndex]['WindowQuestions'] = sqtns;
                    }

                    // ✅ Set final updated refs and states
                    WindowDataRef.current = allData;
                    setWindows(allwindows);
                    BgUnsavedChanges(true)
                    setrerenderdata(!rerenderdata);
                }
            }
        })
    }

    async function setMultiSelectValue(selectedItems = [], qtn = {}, window = {}) {
        setErrorField({});
        setError(false);
        console.log('setMultiSelectValue', selectedItems);
        let id_key = qtn.VisibilityQuestionId + '_AnswerId';
        let ans_key = qtn.VisibilityQuestionId + '_Answer';
        let multi_key = qtn.VisibilityQuestionId + '_MultiOption';

        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = wind_index >= 0 ? allData[wind_index] : defData;
        let obj = wind.WindowQA || {};
        obj[id_key] = 0;
        obj[multi_key] = selectedItems.join(',');
        let anss = [];
        selectedItems.map((itemValue) => {
            let ans = qtn.Answers.find(c1 => c1.AnswerId == itemValue);
            if (ans.Answer) { anss.push(ans.Answer) }
        });
        obj[ans_key] = anss.join(',');
        console.log('obj:', obj);

        wind['WindowQA'] = obj;
        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);

        let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function setTextValue(value, qtn, window, type = "") {
        if (value != '') {
            let isValid = validateNumber(value, type);
            if (!isValid) {
                return;
            }
        }

        setErrorField({});
        setError(false);
        let id_key = qtn.VisibilityQuestionId + '_AnswerId';
        let ans_key = qtn.VisibilityQuestionId + '_Answer';

        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = wind_index >= 0 ? allData[wind_index] : defData;
        let obj = wind.WindowQA || {};

        if (qtn.QuestionType == 'Date') {
            let date_key = qtn.VisibilityQuestionId + '_Date';
            let d = value != null ? new Date(value) : new Date();
            let mfdate = moment(d).format('MM/YYYY');
            showQtnDatePicker(qtn, window, false);
            obj[id_key] = 0;
            obj[ans_key] = mfdate;
            obj[date_key] = moment(d).format('MM/DD/YYYY');
        }
        else {
            obj[id_key] = 0;
            obj[ans_key] = value;
        }

        console.log(value, obj);
        wind['WindowQA'] = obj;
        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);

        let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        console.log("tyeop-14")
        setrerenderdata(!rerenderdata);
    }

    function showQtnDatePicker(qtn, window, show = false) {
        let allQtns = window.WindowQuestions || [];
        let newqtnIndex = allQtns.findIndex(q => q.VisibilityQuestionId == qtn.VisibilityQuestionId);

        if (newqtnIndex >= 0) {
            let newqtn = allQtns[newqtnIndex];
            newqtn.showDatePicker = show;
            allQtns[newqtnIndex] = newqtn;
            window['WindowQuestions'] = allQtns;
            let allWindows = Windows;
            const winIndex = allWindows.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId) || {};
            allWindows[winIndex] = window;
            setWindows(allWindows);
            setGlobalWindows(allwindows);
            if (show == true) setrerenderdata(!rerenderdata);
        }
    }

    function setRatingValue(data) {
        setRatingOrder(data);
    }

    function onRatingCancel() {
        setShowRating(false);
    }

    function onRatingSave() {
        setShowRating(false);
        let qtn = RatingQtn;
        let window = RatingWindow;
        let id_key = qtn.VisibilityQuestionId + '_AnswerId';
        let ans_key = qtn.VisibilityQuestionId + '_Answer';
        let rating_key = qtn.VisibilityQuestionId + '_Rating';
        let ids = [], anss = [];
        RatingOrder.map((item, index) => {
            ids.push(item.AnswerId);
            anss.push(item.Answer);
        })

        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const wind_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = wind_index >= 0 ? allData[wind_index] : defData;
        let obj = wind.WindowQA || {};

        obj[rating_key] = ids.join(',');
        obj[id_key] = 0;
        obj[ans_key] = anss.join(',');

        wind['WindowQA'] = obj;
        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);

        let objIndex = InputChange.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }


    function onChoiceSelect(item, val, key, animatedChoice) {
        console.log("checkonchoice:", item, val, key, animatedChoice)
        let win_index = InputChange.find(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId)
        let changeValue = win_index.Flag;

        if (changeValue) {
            setIsPresentClean(val)
            setDataCleanAnim(animatedChoice)
            setDataCleanItem(item)
            setDataCleanModal(true)
            return
        }

        var val1 = 0;
        val == 1 ? val1 = 1 : '';

        if (animatedChoice != null) {
            Animated.timing(animatedChoice, {
                toValue: val1,
                duration: 400,
                useNativeDriver: false,
            }).start();
        }
        onWindowDataChange(item, val, key)
    }

    function onWindowDataChange(item, val, key) {
        let allData = WindowData;
        let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId };
        const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        wind[key] = val;

        if (key == 'ReasonId') {
            let rsn = reasons_list.find(r => r.ReasonId == val) || {};
            wind['Reason'] = rsn.Reason || '';
        }

        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);

        if (key != "isPresent") {
            let objIndex = InputChange.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId);
            let winArr = [...InputChange]
            winArr[objIndex].Flag = true
            setInputChange(winArr)
        }

        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }


    async function setWindowStockVal(val, window, stockProd, key, type = '') {
        setErrorField({});
        setError(false);
        if (type == 'numeric' && val != '') {
            const regex = new RegExp(/^\d+$/);
            let isNUmeric = regex.test(val);
            if (!isNUmeric) {
                notify(ST.Pleaseenterwholenumbersonly, 'SHORT');
                return;
            }
        }

        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        let WStocksData = wind['WStocksData'] || [];
        let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.VisibilityStockValue);
        let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.VisibilityStockValue, 'Stock': '' };
        sd[key] = val;
        sdIndex >= 0 ? WStocksData[sdIndex] = sd : WStocksData.push(sd);
        wind['WStocksData'] = WStocksData;
        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);
        if (key == 'isPVisPresent') {
            let isAllChecked = await verifyAllChecked(val, window, stockProd, key);
            wind['isAllSKUChecked'] = isAllChecked;
        }

        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata4(!rerenderdata4);
    }

    async function onCatTextChange(window, key, val) {
        setErrorField({});
        setError(false);
        let item = window;
        let allData = WindowData;
        let defData = { 'VisibilityId': item.VisibilityId, 'VisibilityDefinitionId': item.VisibilityDefinitionId };
        const win_index = allData.findIndex(i => i.VisibilityId == item.VisibilityId && i.VisibilityDefinitionId == item.VisibilityDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        wind[key] = val;

        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);

        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }


    async function verifyAllChecked(val, window, stockProd, key) {
        return await new Promise((resolve, reject) => {
            let WindowStocks = window.WindowStocks || [];
            let allData = WindowData;
            const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
            let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
            let WStocksData = wind['WStocksData'] || [];
            if (WindowStocks.length > 0) {
                let isAllChecked = 1;
                for (var i = 0; i < WindowStocks.length; i++) {
                    let stockProd = WindowStocks[i];

                    let sdIndex1 = WStocksData.findIndex(a => a.ProductId == stockProd.VisibilityStockValue);
                    let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {};
                    let isPVisPresent = sd1.isPVisPresent;
                    if (isPVisPresent == null || isPVisPresent == '' || isPVisPresent == 0 || isPVisPresent == '0') {
                        isAllChecked = 0
                    }

                    if (i == WindowStocks.length - 1) {
                        resolve(isAllChecked);
                    }
                }
            }
            else {
                resolve(0);
            }

        }).catch((err) => {
            console.log(err);
            return 0;
        });
    }

    function onWindowDataClean() {
        if (DataCleanAnim != null) {
            console.log("anim---")
            let anim = isPresentClean == 1 ? 1 : '';
            Animated.timing(DataCleanAnim, {
                toValue: anim,
                duration: 400,
                useNativeDriver: false,
            }).start();
        }
        let allData = WindowData;
        let WindowSplits = [];
        for (var s = 0; s < DataCleanItem.NoOfSplit; s++) {
            let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true };
            WindowSplits.push(obj);
        }

        let defData = { 'VisibilityId': DataCleanItem.VisibilityId, 'VisibilityDefinitionId': DataCleanItem.VisibilityDefinitionId, 'isAllSKUChecked': 0, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], isPresent: isPresentClean };
        const win_index = allData.findIndex(i => i.VisibilityId == DataCleanItem.VisibilityId && i.VisibilityDefinitionId == DataCleanItem.VisibilityDefinitionId);
        allData[win_index] = defData

        let objIndex = InputChange.findIndex((obj => obj.VisibilityId == DataCleanItem.VisibilityId && obj.VisibilityDefinitionId == DataCleanItem.VisibilityDefinitionId));
        let winArr = [...InputChange]
        winArr[objIndex].Flag = false

        setInputChange(winArr)
        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setDataCleanModal(false)
        setrerenderdata(!rerenderdata);
    }

    function checkAllSKUs(val, window) {
        let WindowStocks = window.WindowStocks || [];
        let allData = WindowData;
        let defData = { 'VisibilityId': window.VisibilityId, 'VisibilityDefinitionId': window.VisibilityDefinitionId };
        const win_index = allData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        let WStocksData = wind['WStocksData'] || [];
        console.log('WStocksData before:', WStocksData)
        for (var i = 0; i < WindowStocks.length; i++) {
            let stockProd = WindowStocks[i];

            let sdIndex = WStocksData.findIndex(a => a.ProductId == stockProd.VisibilityStockValue);
            let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.VisibilityStockValue, 'Stock': '' };
            let isPVisPresent = (val == 1 || val == '1') ? 1 : 0;
            sd['isPVisPresent'] = isPVisPresent;

            sdIndex >= 0 ? (WStocksData[sdIndex] = sd) : (WStocksData.push(sd));
        }


        wind['WStocksData'] = WStocksData;
        wind['isAllSKUChecked'] = val == 1 ? 1 : 0;
        console.log('wind updated');
        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);

        WindowDataRef.current = allData
        setWindowData(allData);
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function onSaveCancel() {
        setShowAlert(false);
    }



    function openImageRefView(windowIndex = 0) {
        setrefImageIndex(windowIndex);
        UpdateShow_zoomImageRef(true);
    }

    function FilterStores(searchedQry) {
        searchedQry = searchedQry.toLowerCase();
        console.log('searchedQry', searchedQry);
        let arr = [];
        let newWindows = [];
        if (searchedQry != null && searchedQry != '') {

            for (let i = 0; i < globalWindows.length; i++) {
                let item = globalWindows[i];
                let { VisibilityName } = item;
                if (VisibilityName.toLowerCase().includes(searchedQry)) {
                    newWindows.push(item);
                }

                if (i == globalWindows.length - 1) {
                    arr = newWindows;
                }
            }
        }
        else {
            arr = globalWindows;
        }

        setWindows(arr);
        setrerenderdata(!rerenderdata)
        setrerenderdata2(!rerenderdata2)
    }

    function renderRatingView() {
        let qtn = RatingQtn;
        let Answers = qtn.Answers;
        let id_key = qtn.VisibilityQuestionId + '_AnswerId';
        let ans_key = qtn.VisibilityQuestionId + '_Answer';
        let rating_key = qtn.VisibilityQuestionId + '_Rating';

        let newarr = RatingOrder;
        if (RatingOrder.length <= 0) {
            newarr = Answers;
        }

        return (
            <View style={customStyle.RatingModal}>
                <View style={customStyle.RatingModalCon}>
                    <Text style={customStyle.VRModalHeding}>{ST.DragItemsInOrder}</Text>
                    <Text style={customStyle.VRSubHeding}>{ST.Pressandholdtodrag}</Text>
                    <DraggableFlatList
                        data={newarr}
                        style={customStyle.RModal_list}
                        contentContainerStyle={customStyle.RModal_listInner}
                        onDragEnd={({ data }) => { setRatingValue(data) }}
                        keyExtractor={(item) => item.AnswerId}
                        renderItem={renderItem}
                    />
                    <View style={customStyle.RModal_Btns}>
                        <TouchableOpacity style={customStyle.RModal_BtnCancel} onPress={() => { onRatingCancel() }}>
                            <Text style={customStyle.RModal_BtnTextCancel}>{ST.Cancel}</Text>
                        </TouchableOpacity>
                        <TouchableOpacity style={customStyle.RModal_Btnsave} onPress={() => { onRatingSave() }}>
                            <Text style={customStyle.RModal_BtnTextsave}>{ST.Save}</Text>
                        </TouchableOpacity>
                    </View>
                </View>
            </View>
        )
    }

    function render_Picker(label_key, value_key, onChange = () => { }, selected_data = {}) {
        var data = [];
        let qtn = selected_data.qtn || {};
        let window = selected_data.window || {};
        let isQtnDisabled = qtn.isDisabled != null || qtn.isDisabled != '' ? false : true;
        let allAnswers = qtn.Answers || [];

        allAnswers.map((item, index) => {
            let obj = { key: index, label: item[label_key], value: item[value_key] };
            if (selected_data.value == item[label_key])
                obj['component'] = <View style={customStyle.addvis_selectedOpStyle}><Text style={customStyle.addvis_selectedOpTextStyle}>{item[label_key]}</Text></View>;
            data.push(obj);
        });

        return (
            <ModalSelector
                data={data}

                touchableActiveOpacity={0.8}

                style={customStyle.addVisPickerStyle}
                onChange={(option) => { onChange(option, qtn, window) }}
                overlayStyle={customStyle.addVisPickerOverlay}
                cancelContainerStyle={customStyle.addVisPicker_OptionContainerStyle}
                optionStyle={customStyle.addvis_opStyle}
                optionTextStyle={customStyle.addvis_opTextStyle}
                optionContainerStyle={customStyle.addVisPicker_OptionContainerStyle}
                selectedKey={'1'}
                disabled={isQtnDisabled}
            >
                <Text style={[customStyle.WQPicker_InputStyle, (isQtnDisabled ? customStyle.addVisPicker_Dis_InputStyle : {})]}>{(selected_data.value != null && selected_data.value != '' ? selected_data.value : '-' + ST.select + '-')}</Text>
            </ModalSelector>
        )
    }

    function renderDatePicker(qtn, window) {
        let qtnn = qtn;
        let DateRange = qtn.DateRange;
        let maxDate = moment().add(10, 'years').format('MM/DD/YYYY');
        let minDate = moment().subtract(10, 'years').format('MM/DD/YYYY');
        if (DateRange == 'RFD') {
            maxDate = moment().format('MM/DD/YYYY');
        }
        else if (DateRange == 'RPD') {
            minDate = moment().format('MM/DD/YYYY');
        }

        return (
            <DateTimePicker
                testID="dateTimePicker"
                value={(dateValue != null && dateValue != '' ? new Date(dateValue) : new Date())}
                mode={'date'}
                display="default"
                onChange={(event, selectedDate) => { setTextValue(selectedDate, qtnn, window) }}
                maximumDate={new Date(maxDate)}
                minimumDate={new Date(minDate)}
            />
        );
    }

    async function OpenImgModal(imgPath, window, splitItem, splitItemIndex, cameraType) {
        setSelectedImg(imgPath)
        setShowModal(true);
        if ((imgPath != '' && imgPath != null)) {
            setShowImageSaveOp(false);
        }
        else {
            setShowImageSaveOp(true);
        }
        setReCapImgModalObj({ window, splitItem, splitItemIndex, cameraType })
    }

    function cancelImage() {
        // setImage1('');
        setSelectedImg('');
        setReCapImgModalObj({})
        setShowModal(false);
    }

    function _renderWindow() {
        let RemarkEnableIndex = KPIFields.findIndex(i => i.KPIFieldName == 'RemarkEnable')
        let RemarkEnableKPIObj = RemarkEnableIndex >= 0 ? KPIFields[RemarkEnableIndex] : {};
        let RemarkEnable = RemarkEnableIndex >= 0 ? RemarkEnableKPIObj['KPIFieldEnable'] : false;

        let isListedSKUIndex = KPIFields.findIndex(i => i.KPIFieldName == 'ListedSKUCheckbox');
        let isListedSKUKPIObj = isListedSKUIndex >= 0 ? KPIFields[isListedSKUIndex] : {};
        let isListedSKUEnable = isListedSKUIndex >= 0 ? isListedSKUKPIObj['KPIFieldEnable'] : true;

        let HidePresentYesNoIndex = KPIFields.findIndex(i => i.KPIFieldName == 'HidePresentYesNo');
        let HidePresentYesNoObj = HidePresentYesNoIndex >= 0 ? KPIFields[HidePresentYesNoIndex] : {};
        let HidePresentYesNoEn = HidePresentYesNoIndex >= 0 ? HidePresentYesNoObj['KPIFieldEnable'] : false;
        let HidePresentYesNoEnable = HidePresentYesNoEn == 1 || HidePresentYesNoEn == "1" || HidePresentYesNoEn == true ? true : false;

        return (
            <KeyboardAvoidingView behavior="padding" enabled  >
                <FlatList
                    data={Windows}
                    extraData={rerenderdata}
                    contentContainerStyle={customStyle.Win_scroll}
                    initialNumToRender={5}
                    viewabilityConfigCallbackPairs={
                        FlatLConfCallbackPairs.current
                    }
                    listKey={(item, index) => `window_${index.toString()}`}
                    renderItem={({ item, index }) => {
                        const window = item;
                        const windowIndex = index;
                        let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId && isViewable))
                        let AddImageAllow = (window?.AddImageAllow ? true : false) || false
                        let AddImageMax = (window?.AddImageMax ? window?.AddImageMax : 0) || 0
                        let isImage1 = window.VisibilityImage1 == 'true' || window.VisibilityImage1 == 1 ? 1 : 0;
                        let isImage2 = window.VisibilityImage2 == 'true' || window.VisibilityImage2 == 1 ? 1 : 0;
                        let isNAImageAvl = window.VisibilityNotExistCamera == 'true' || window.VisibilityNotExistCamera == 1 ? 1 : 0;
                        let isNAReasonEnable = window.VisibilityNotExistReasonEnable == 'true' || window.VisibilityNotExistReasonEnable == 1 ? 1 : 0;
                        let VisibilityRefImagePopUp = window.VisibilityRefImagePopUp == 'true' || window.VisibilityRefImagePopUp == true ? true : false;
                        let isReasonEnable = window.VisibilityExistReasonEnable == 'true' || window.VisibilityExistReasonEnable == 1 ? 1 : 0;
                        let isStockReq = window.VisibilityElementStockRequired == 'true' || window.VisibilityElementStockRequired == 1 ? 1 : 0;
                        let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0;
                        let PromoTitleEnable = window.PromoDefinitionTitleEnable == 'true' || window.PromoDefinitionTitleEnable == 1 ? 1 : 0;
                        let PromoTitle = window.PromoDefinitionTitle != null && window.PromoDefinitionTitle != 'undefined' ? window.PromoDefinitionTitle : "";

                        let RefImage = window.VisibilityRefImage;
                        let camera1Label = window.VisibilityImage1Lable || '';
                        let camera2Label = window.VisibilityImage2Lable || '';
                        let WindowQuestions = window.WindowQuestions || [];
                        let WindowStocks = window.WindowStocks || [];

                        const wind = WindowData.find(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
                        const WIndex = WindowData.findIndex(i => i.VisibilityId == window.VisibilityId && i.VisibilityDefinitionId == window.VisibilityDefinitionId);
                        let isPresent = wind.isPresent != null && wind.isPresent != '' ? wind.isPresent : '0';
                        let ReasonId = wind.ReasonId != null ? wind.ReasonId : '';
                        let Reason = wind.Reason != null ? wind.Reason : '';
                        let NAImage1 = wind.NAImage1 != null ? wind.NAImage1 : '';
                        let NAImage1Path = wind.NAImage1Path != null ? wind.NAImage1Path : '';
                        let remark = wind.remark != null ? wind.remark : '';
                        let RemarkText = wind.RemarkText != null ? wind.RemarkText : '';
                        let showOtherText = wind.showOtherText != null ? wind.showOtherText : false;
                        let WindowSplits = wind.WindowSplits || [];
                        let QuestionsData = wind.WindowQA || {};
                        let WStocksData = wind.WStocksData || [];
                        let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1";


                        let tempDisable = WindowSplits?.some(item => (isImage1 == 1 && !item?.Image1) || (isImage2 == 1 && !item?.Image2));
                        let AddedMax = window?.AddImageMax <= WindowSplits.length
                        let AddDisable = tempDisable ? true : AddedMax && !tempDisable

                        // console.log("wind---",window?.AddImageMax, wind, WIndex);


                        var xpos = isPresent == '1' || isPresent == 1 ? -75 : 0;
                        if (window.animatedChoice != null) {
                            xpos = window.animatedChoice.interpolate({
                                inputRange: [0, 1],
                                outputRange: [0, -75],
                            });
                        }

                        if (isVisible && window.animatedHeight != null) {
                            setTimeout(() => {
                                Animated.timing(window.animatedHeight, {
                                    toValue: 0,
                                    duration: 800,
                                    useNativeDriver: false,
                                }).start();

                            }, (props.RefImagePopUpTime || 0) * 1000)
                        }



                        let EF_Window = errorfield.EF_Window != null ? errorfield.EF_Window : {};
                        let show_errorhere = error == true && EF_Window.VisibilityId == window.VisibilityId && EF_Window.VisibilityDefinitionId == window.VisibilityDefinitionId;

                        // if not Present fields

                        // this will show error field in red (if window is present and exist reason is enabled and not filled ) or (if window is not present and Not exist reason is enabled and not filled ) 
                        let EF_NExistReason = errorfield.EF_NExistReason || '';
                        let EStyle_NExistReason = show_errorhere && EF_NExistReason == 'NExistReason' ? customStyle.stk_inptSTyle_error : {};

                        let EF_NExistRemark = errorfield.EF_NExistRemark || '';
                        let EStyle_NExistRemark = show_errorhere && EF_NExistRemark == 'NExistRemark' ? customStyle.stk_inptSTyle_error : {};

                        let EF_NExistImage = errorfield.EF_NExistImage || '';
                        let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {};

                        return (
                            <View style={customStyle.WItem_wrap} key={'window_' + index}>
                                <View style={customStyle.WItem_Hdr}>
                                    <View style={customStyle.WItem_Hdrbg}>
                                        <Text style={customStyle.WItem_HdrText}>{window.VisibilityName}</Text>
                                        {
                                            window && window.ChildName != "" && <Text style={[customStyle.WItem_Hdrname2]}>{window.ChildName}</Text>
                                        }
                                        {(PromoTitleEnable == 1 && PromoTitle != null && PromoTitle != '') && <Text style={customStyle.WItem_HdrSubTitleText}>{PromoTitle}</Text>}
                                        <TouchableOpacity style={customStyle.WItem_RefImgBtn} onPress={() => { openImageRefView(index) }}>
                                            <Entypo name='image-inverted' size={24} color={PageTheme.$accent_color} />
                                        </TouchableOpacity>
                                    </View>
                                </View>
                                {VisibilityRefImagePopUp && <Animated.View
                                    style={[{
                                        backgroundColor: "#fff",
                                        width: "100%",
                                        // height: 300,
                                        height: window.animatedHeight,
                                        // borderRadius: 10,
                                        paddingBottom: 10,
                                        // shadowColor: "#000",
                                        // elevation: 5
                                    }]}
                                >
                                    <Image style={[{ width: "100%", height: '100%' }]} resizeMode='contain' source={{ uri: RefImage }} />

                                </Animated.View>}

                                <View style={customStyle.WForm}>
                                    <View style={[customStyle.openStk_prd_cols, customStyle.mt10]}>

                                        {!HidePresentYesNoEnable && <View style={[customStyle.openStk_prd_colflex, customStyle.mb10]}>
                                            <Text style={[customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel]}>{ST.IsPresent}</Text>
                                            <View style={customStyle.openStk_prd_choiceBoxCon}>
                                                <View style={customStyle.openStk_prd_choiceBox}>
                                                    <Animated.View style={[customStyle.openStkCh_absolutebg, customStyle.openStkCh_con_active, (isPresent == '1' || isPresent == 1 ? customStyle.openStkCh_con_green : customStyle.openStkCh_con_red),
                                                    { transform: [{ translateX: xpos }], }]}></Animated.View>
                                                    <TouchableOpacity style={customStyle.openStkCh_con1} onPress={() => { onChoiceSelect(window, 1, 'isPresent', window.animatedChoice) }}>
                                                        <Text style={[customStyle.openStkCh_text, (isPresent == '1' || isPresent == 1 ? customStyle.openStkCh_textactive : {})]}>{ST.Yes}</Text>
                                                    </TouchableOpacity>
                                                    <TouchableOpacity style={[customStyle.openStkCh_con1]} onPress={() => { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}>
                                                        <Text style={[customStyle.openStkCh_text, (isPresent == '0' || isPresent == 0 ? customStyle.openStkCh_textactive : {})]}>{ST.No}</Text>
                                                    </TouchableOpacity>
                                                </View>
                                            </View>
                                        </View>}

                                        {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) &&
                                            <View style={[customStyle.openStk_prd_colflex, (!HidePresentYesNoEnable ? customStyle.openStk_prd_borderT3 : {}), customStyle.mb10]}>
                                                <Text style={[customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel]}>{ST.SelectReason}</Text>
                                                {<CustomPicker2 {...props} Pickerdata={reasons_list} label_key={'Reason'} value_key={'ReasonId'} onchangeKeyLbl={'Reason'} onchangeKey={'ReasonId'} onChange={onselectionChange3} selected_data={{ value: Reason, otherData: { window: window } }} InputStyle={customStyle.PV_selectInputStyle} selectStyle={customStyle.PV_selectStyle} ErrorStyle={EStyle_NExistReason} ShowError={error} />}
                                            </View>
                                        }


                                        {(isPresent != '1' && isNAImageAvl == true) &&
                                            <View>
                                                <View style={[customStyle.openStk_prd_borderT, customStyle.pt10, customStyle.mb10]}>
                                                    <LinearGradient colors={[PageTheme.$secondary_color_light, PageTheme.$fourth_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={customStyle.windhdrTextCon}>
                                                        <Text style={customStyle.windhdrText}>{ST.CaptureImage}</Text>
                                                    </LinearGradient>
                                                    <View style={[customStyle.openStk_prdCameras, customStyle.WSCameraWrap]}>
                                                        <View style={[customStyle.openStkCameraCon, customStyle.WSCameraCon]}>
                                                            {(NAImage1Path == '' || NAImage1Path == null) &&
                                                                <TouchableOpacity style={[customStyle.osCat_action_openCam, customStyle.osCat_actn_margin, EStyle_NExistImage]} onPress={() => { openCamera(window, {}, 0, '1', '3') }}>
                                                                    <CameraImg width={80} height={80} />
                                                                </TouchableOpacity>
                                                            }
                                                            {(NAImage1Path != '' && NAImage1Path != null) &&
                                                                <View style={customStyle.osCatImageView}>
                                                                    <Image style={customStyle.osCatImage} source={{ uri: NAImage1Path }} />
                                                                    <TouchableOpacity style={[customStyle.osCat_action_reCap]} onPress={() => { openCamera(window, {}, 0, '1', '3') }}>
                                                                        <MaterialCommunityIcons name='camera-retake' size={20} color={PageTheme.$accent_color} />
                                                                    </TouchableOpacity>
                                                                </View>
                                                            }
                                                        </View>
                                                    </View>
                                                </View>

                                            </View>
                                        }


                                        {isPresent != '1' && showOtherText == true &&
                                            <View style={[customStyle.openStk_prd_colflex, customStyle.openStk_prd_borderT, customStyle.pt10]}>
                                                <Text style={[customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel]}>{ST.EnterRemark}</Text>
                                                <TextInput
                                                    style={[customStyle.openStk_prd_inputStyle, customStyle.openStk_prd_flex_inputStyle, EStyle_NExistRemark]}
                                                    placeholder=""
                                                    autoComplete='off'
                                                    placeholderTextColor={PageTheme.$placeholder_color}
                                                    value={RemarkText}
                                                    onChangeText={(val) => { onCatTextChange(window, 'RemarkText', val, 'text') }}
                                                />
                                            </View>
                                        }

                                        {(isPresent == '1') &&
                                            <View>

                                                {(isStockReq == true && WindowStocks.length > 0) &&
                                                    <View style={[(!HidePresentYesNoEnable ? customStyle.openStk_prd_borderT3 : {})]}>
                                                        <LinearGradient colors={[PageTheme.$secondary_color_light, PageTheme.$fourth_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={customStyle.windhdrTextCon}>
                                                            <Text style={customStyle.windhdrText}>{(isListedSKUEnable == true ? ST.SelectProducts : 'Enter Stocks')}</Text>
                                                        </LinearGradient>
                                                        {isListedSKUEnable == true &&
                                                            <View style={customStyle.windhdr_checkAllBtnCon}>
                                                                <TouchableOpacity style={customStyle.windhdr_checkAllBtn} onPress={() => { checkAllSKUs((isAllSKUChecked == 1 ? 0 : 1), window) }}>
                                                                    <CheckBox
                                                                        boxType='square'
                                                                        value={isAllSKUChecked}
                                                                        onValueChange={(val) => { let val1 = (val == true) ? 1 : 0; checkAllSKUs(val1, window) }}
                                                                        style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginLeft: 5 } : {})]}
                                                                        tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }}
                                                                    />
                                                                    <Text style={customStyle.windhdr_checkAllBtnText}>{ST.SelectAll}</Text>
                                                                </TouchableOpacity>
                                                            </View>}
                                                        <FlatList
                                                            data={WindowStocks}
                                                            extraData={rerenderdata4}
                                                            listKey={(item, index) => `wstock_${index.toString()}`}
                                                            renderItem={({ item, index }) => {
                                                                let stockProd = item;
                                                                let stockProdIndex = index;
                                                                let sd = WStocksData.find(i => i.ProductId == stockProd.VisibilityStockValue) || {};
                                                                let stock = sd.Stock != null ? sd.Stock : '';
                                                                let isPVisPresent = sd.isPVisPresent != null ? sd.isPVisPresent : 0;


                                                                // highlight prd errors 
                                                                let EF_stockProdIndex = errorfield.EF_stockProdIndex || '';
                                                                let showPrdErrHere = EF_stockProdIndex == stockProdIndex;

                                                                let EF_stock = errorfield.EF_stock || '';
                                                                let EStyle_StockInput = show_errorhere && showPrdErrHere && EF_stock == 'input1_' ? customStyle.stk_inptSTyle_error : {};


                                                                return (
                                                                    <View style={[customStyle.WStkWrap]} key={'WSTock+' + stockProdIndex}>


                                                                        <View style={{ flexDirection: 'row', justifyContent: 'space-between' }}>
                                                                            {isListedSKUEnable != true && <Text style={[customStyle.WStkHdrText3]}>{stockProd.ProductName}</Text>}
                                                                            {isListedSKUEnable != true && <Text style={[customStyle.WStkHdrTextMBQ]}>{"MBQ " + stockProd.VisibilityStockMBQ}</Text>}
                                                                        </View>

                                                                        {isListedSKUEnable == true &&
                                                                            <View style={customStyle.WStkHdr_checkboxWrap}>
                                                                                <View style={customStyle.WStkHdr_checkboxCon}>
                                                                                    <CheckBox
                                                                                        boxType='square'
                                                                                        value={(isPVisPresent == 1 || isPVisPresent == '1')}
                                                                                        onValueChange={(val) => { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isPVisPresent') }}
                                                                                        style={[customStyle.WStkHdr_checkbox, (Platform.OS == 'ios' ? { height: 20, width: 20, marginTop: 5, marginLeft: 5, } : {})]}
                                                                                        tintColors={{ true: PageTheme.$primary_color, false: PageTheme.$text_color_light }}
                                                                                    />
                                                                                </View>
                                                                                <Text style={[customStyle.WStkHdrText2, customStyle.WStkHdr_checkboxpName]}>{stockProd.ProductName}</Text>

                                                                            </View>}
                                                                        {((isListedSKUEnable == true && StockQtyRequired == 1 && isPVisPresent == 1) || isListedSKUEnable != true) &&

                                                                            <View style={[customStyle.openStk_prd_colflex, customStyle.WStkHdr_PrdcontentWrap]} >
                                                                                <View style={[customStyle.openStk_prd_col50, customStyle.openStk_prd_col50_1]}>
                                                                                    <Text style={customStyle.openStk_prd_flexlabel}>Stock</Text>
                                                                                </View>

                                                                                <View style={[customStyle.openStk_prd_col50, customStyle.openStk_prd_col50_2]}>
                                                                                    <TextInput
                                                                                        style={[customStyle.WStkInputStyle, EStyle_StockInput]}
                                                                                        ref={(reff) => { inputRefs.current['input1_' + stockProd.VisibilityDefinitionId + '_' + index] = reff; }}
                                                                                        placeholder=""
                                                                                        autoComplete='off'
                                                                                        placeholderTextColor={PageTheme.$placeholder_color}
                                                                                        keyboardType={'number-pad'}
                                                                                        returnKeyType={(Platform.OS === 'ios') ? 'done' : 'next'}
                                                                                        blurOnSubmit={false}
                                                                                        value={stock + ''}
                                                                                        onSubmitEditing={() => { focusToNext(WindowStocks, windowIndex, stockProd, index) }}
                                                                                        onChangeText={(val) => { setWindowStockVal(val, window, stockProd, 'Stock', 'numeric') }}
                                                                                    />
                                                                                </View>

                                                                            </View>
                                                                        }
                                                                    </View>
                                                                );
                                                            }}
                                                        />
                                                    </View>
                                                }
                                                {console.log("WIndex--", WIndex)}
                                                {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) &&
                                                    <View style={[((!HidePresentYesNoEnable || isStockReq == true) ? customStyle.openStk_prd_borderT3 : {}), customStyle.mb10]}>
                                                        <LinearGradient colors={[PageTheme.$secondary_color_light, PageTheme.$fourth_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', elevation: 5 }}>
                                                            <Text style={customStyle.windhdrText}>{currentMenu.MenuName + ' Images'}</Text>
                                                            {AddImageAllow &&
                                                                <TouchableOpacity disabled={AddDisable} onPress={() => handleAddImages(WIndex)} style={{ marginLeft: 20, opacity: AddDisable ? 0.4 : 1 }}>
                                                                    <AddIcon width={40} height={40} />
                                                                </TouchableOpacity>
                                                            }
                                                        </LinearGradient>

                                                        <FlatList
                                                            data={WindowSplits}
                                                            extraData={rerenderdata2}
                                                            listKey={(item, index) => `spliItem_${index.toString()}`}
                                                            renderItem={({ item, index }) => {
                                                                let splitItem = item;
                                                                let splitItemIndex = index;
                                                                let Image1Name = splitItem['Image1Name'] != null && splitItem['Image1Name'] != '' ? splitItem['Image1Name'] : '';
                                                                let Image2Name = splitItem['Image2Name'] != null && splitItem['Image2Name'] != '' ? splitItem['Image2Name'] : '';
                                                                let Image1 = splitItem['Image1'] != null && splitItem['Image1'] != '' ? splitItem['Image1'] : '';
                                                                let Image2 = splitItem['Image2'] != null && splitItem['Image2'] != '' ? splitItem['Image2'] : '';
                                                                let isImg1mad = splitItem['img1Required'] || false;
                                                                let isImg2mad = splitItem['img2Required'] || false;

                                                                // highlight slit image box 
                                                                let EF_splitItemIndex = errorfield.EF_splitItemIndex || '';
                                                                let showSplitItemErrHere = EF_splitItemIndex == splitItemIndex;

                                                                let EF_splitImage1 = errorfield.EF_splitImage1 || '';
                                                                let EStyle_splitImage1 = show_errorhere && showSplitItemErrHere && EF_splitImage1 == 'splitImage1' ? customStyle.error_CatImage2 : {};

                                                                let EF_splitImage2 = errorfield.EF_splitImage2 || '';
                                                                let EStyle_splitImage2 = show_errorhere && showSplitItemErrHere && EF_splitImage2 == 'splitImage2' ? customStyle.error_CatImage2 : {};


                                                                return (
                                                                    <View style={[customStyle.openStk_prdCameras, customStyle.WSCameraWrap]} key={'SplitItem+' + splitItemIndex}>
                                                                        {isImage1 == 1 &&
                                                                            <View style={[customStyle.openStkCameraCon, customStyle.WSCameraCon]}>

                                                                                {((Image1 == '' || Image1 == null) && isImg1mad) ?
                                                                                    <TouchableOpacity style={[EStyle_splitImage1]} onPress={() => { openCamera(window, splitItem, splitItemIndex, '1') }}>
                                                                                        <CameraImg5 width={50} height={50} />
                                                                                    </TouchableOpacity> : (Image1 == '' || Image1 == null) ?
                                                                                        <TouchableOpacity style={[EStyle_splitImage1]} onPress={() => { openCamera(window, splitItem, splitItemIndex, '1') }}>
                                                                                            <CameraImg2 width={50} height={50} />
                                                                                        </TouchableOpacity> : (Image1 != '' || Image1 != null) ?
                                                                                            <TouchableOpacity onPress={() => { OpenImgModal(Image1, window, splitItem, splitItemIndex, '1') }}>
                                                                                                <CameraImg3 width={50} height={50} />
                                                                                            </TouchableOpacity> : null
                                                                                }
                                                                                <Text style={customStyle.WSCameraLabel}>{camera1Label}</Text>
                                                                            </View>
                                                                        }
                                                                        {isImage2 == 1 &&
                                                                            <View style={customStyle.openStkCameraCon}>


                                                                                {((Image2 == '' || Image2 == null) && isImg2mad) ?
                                                                                    <TouchableOpacity style={[EStyle_splitImage2]} onPress={() => { openCamera(window, splitItem, splitItemIndex, '2') }}>
                                                                                        <CameraImg5 width={50} height={50} />
                                                                                    </TouchableOpacity> : (Image2 == '' || Image2 == null) ?
                                                                                        <TouchableOpacity style={[EStyle_splitImage2]} onPress={() => { openCamera(window, splitItem, splitItemIndex, '2') }}>
                                                                                            <CameraImg2 width={50} height={50} />
                                                                                        </TouchableOpacity> : (Image2 != '' || Image2 != null) ?
                                                                                            <TouchableOpacity onPress={() => { OpenImgModal(Image2, window, splitItem, splitItemIndex, '2') }}>
                                                                                                <CameraImg3 width={50} height={50} />
                                                                                            </TouchableOpacity> : null
                                                                                }
                                                                                <Text style={customStyle.WSCameraLabel}>{camera2Label}</Text>
                                                                            </View>
                                                                        }
                                                                        {splitItem?.addImg == 1 &&
                                                                            <TouchableOpacity
                                                                                // onPress={() => handleDelete(splitItemIndex, WIndex)}
                                                                                onPress={() => {
                                                                                    Alert.alert(
                                                                                        "Delete Image",
                                                                                        "Are you sure, you want to delete this image?",
                                                                                        [
                                                                                            {
                                                                                                text: "Cancel",
                                                                                                style: "cancel",
                                                                                            },
                                                                                            {
                                                                                                text: "Delete",
                                                                                                style: "destructive",
                                                                                                onPress: () => handleDelete(splitItemIndex, WIndex),
                                                                                            },
                                                                                        ],
                                                                                        { cancelable: true } // bahar tap karne se alert band ho jaye
                                                                                    );
                                                                                }}
                                                                                style={{ position: 'absolute', bottom: 30, right: 30, backgroundColor: '#fff', borderRadius: 12, }}
                                                                            >
                                                                                <BinIcon width={30} height={30} />
                                                                            </TouchableOpacity>
                                                                        }
                                                                    </View>
                                                                );
                                                            }}
                                                        />
                                                    </View>
                                                }

                                                {/* Add Image Section */}
                                                {/* <LinearGradient colors={[PageTheme.$secondary_color_light, PageTheme.$fourth_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', elevation: 5 }}>
                                                    <Text style={customStyle.windhdrText}>Add More Images</Text>
                                                    <TouchableOpacity onPress={handleAddImages} style={{ marginLeft: 20 }}>
                                                        <AddIcon width={40} height={40} />
                                                    </TouchableOpacity>
                                                </LinearGradient> */}

                                                {/* {addImages && addImages.length > 0 ? addImages.map((item, index) => (
                                                    <View style={{ marginBottom: 15 }}>

                                                        <View style={[customStyle.openStk_prdCameras, customStyle.WSCameraWrap]}>
                                                            <View style={customStyle.openStkCameraCon}>
                                                                <TouchableOpacity style={{}} >
                                                                    <CameraImg2 width={50} height={50} />
                                                                </TouchableOpacity>
                                                                <Text style={customStyle.WSCameraLabel}>{"Long Shot"}</Text>
                                                            </View>
                                                            <View style={customStyle.openStkCameraCon}>
                                                                <TouchableOpacity style={{}} >
                                                                    <CameraImg2 width={50} height={50} />
                                                                </TouchableOpacity>
                                                                <Text style={customStyle.WSCameraLabel}>{"Close Shot"}</Text>
                                                            </View>
                                                        </View>

                                                        <TouchableOpacity
                                                            onPress={() => handleDelete(index)}
                                                            style={{ position: 'absolute', bottom: 30, right: 30, backgroundColor: '#fff', borderRadius: 12, }}
                                                        >
                                                            <BinIcon width={30} height={30} />
                                                        </TouchableOpacity>

                                                    </View>
                                                )) : null
                                                } */}



                                                {(WindowQuestions.length > 0) &&
                                                    <View style={[((!HidePresentYesNoEnable || isStockReq == true || (window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1))) ? customStyle.openStk_prd_borderT3 : {}), customStyle.mb10]}>
                                                        {/* <View style={[customStyle.openStk_prd_borderT, customStyle.pt10, customStyle.mb10]}> */}
                                                        <LinearGradient colors={[PageTheme.$secondary_color_light, PageTheme.$fourth_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={customStyle.windhdrTextCon}>
                                                            <Text style={customStyle.windhdrText}>{currentMenu.MenuName + ' Questions'}</Text>
                                                        </LinearGradient>
                                                        {WindowQuestions.map((item, index) => {

                                                            let qtn = item;
                                                            let qtnIndex = index;
                                                            let selansid = '', selanswer = '', selimg = '', showImageTag = false;
                                                            let id_key = qtn.VisibilityQuestionId + '_AnswerId';
                                                            let ans_key = qtn.VisibilityQuestionId + '_Answer';
                                                            let multi_key = qtn.VisibilityQuestionId + '_MultiOption';
                                                            let date_key = qtn.VisibilityQuestionId + '_Date';
                                                            let img_key = qtn.VisibilityQuestionId + '_ImagePath1';
                                                            let imgname_key = qtn.VisibilityQuestionId + '_ImageName1';
                                                            let rating_key = qtn.VisibilityQuestionId + '_Rating';

                                                            let list_mcdata = [];
                                                            let VQDefaultQuestionEnable = qtn.VQDefaultQuestionEnable == 'true' || qtn.VQDefaultQuestionEnable == 1 || qtn.VQDefaultQuestionEnable == '1' ? true : false;
                                                            let isDisabled = qtn.isDisabled;
                                                            if (qtn.QuestionType == 'Single choice list') {
                                                                selansid = QuestionsData[id_key] != null ? QuestionsData[id_key] : '';
                                                                selanswer = QuestionsData[ans_key] != null ? QuestionsData[ans_key] : '';
                                                            }
                                                            else if (qtn.QuestionType == 'Multi choice list') {
                                                                if (qtn.Answers != null) {
                                                                    for (var i = 0; i < qtn.Answers.length; i++) {
                                                                        let obj = { 'AnswerId': parseInt(qtn.Answers[i].AnswerId), 'Answer': qtn.Answers[i].Answer };
                                                                        list_mcdata.push(obj);
                                                                    }
                                                                }
                                                                selansid = QuestionsData[multi_key] != null && QuestionsData[multi_key] != '' ? QuestionsData[multi_key].split(',') : [];
                                                                console.log("selansid--", selansid)
                                                                if (selansid != null && selansid.length > 0) {
                                                                    let arr = [];
                                                                    for (var i = 0; i < selansid.length; i++) {
                                                                        arr.push(parseInt(selansid[i]));
                                                                    }
                                                                    selansid = arr;
                                                                }

                                                            }
                                                            else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') {
                                                                selansid = QuestionsData[ans_key] != null && QuestionsData[ans_key] != undefined ? QuestionsData[ans_key] : "";
                                                                selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : '';
                                                                showImageTag = (qtn.VQShowCamera == 1 || qtn.VQShowCamera == 'true');
                                                            }
                                                            else if (qtn.QuestionType == 'Rating' || qtn.QuestionType == 'QR') {
                                                                selanswer = QuestionsData[ans_key] ? QuestionsData[ans_key] : '';
                                                            }


                                                            if ((qtn.QuestionType == 'Single choice list' || qtn.QuestionType == 'Multi choice list')) {
                                                                if (qtn.Answers && qtn.Answers.length > 0) {
                                                                    for (var i = 0; i < qtn.Answers.length; i++) {
                                                                        let ansss = qtn.Answers[i];
                                                                        let isandImgAl = (ansss.VAShowCamera == 'true' || ansss.VAShowCamera == 1);

                                                                        if (qtn.QuestionType == 'Single choice list' && (isandImgAl && ansss.AnswerId == selansid)) {
                                                                            showImageTag = true;
                                                                        }
                                                                        else if (qtn.QuestionType == 'Multi choice list' && (isandImgAl && selansid.indexOf(ansss.AnswerId) >= 0)) {
                                                                            showImageTag = true;
                                                                        }

                                                                    }
                                                                }
                                                            }

                                                            if (showImageTag) {
                                                                selimg = QuestionsData[img_key] != null && QuestionsData[img_key] != '' ? 'file://' + QuestionsData[img_key] : '';
                                                            }

                                                            let EF_qtn = errorfield.EF_qtn != null ? errorfield.EF_qtn : {};
                                                            let showQtnErrHere = EF_qtn.VisibilityQuestionId == qtn.VisibilityQuestionId;
                                                            //Qtn_MultiChoice
                                                            let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || '';
                                                            let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : {};


                                                            let EF_Qtn_Date = errorfield.EF_Qtn_Date || '';
                                                            let EStyle_Qtn_Date = show_errorhere && showQtnErrHere && EF_Qtn_Date == 'Qtn_Date' ? customStyle.stk_inptSTyle_error : {};

                                                            let EF_Qtn_Input = errorfield.EF_Qtn_Input || '';
                                                            let EStyle_Qtn_Input = show_errorhere && showQtnErrHere && EF_Qtn_Input == 'Qtn_Input' ? customStyle.stk_inptSTyle_error : {};

                                                            let EF_Qtn_Image = errorfield.EF_Qtn_Image || '';
                                                            let EStyle_Qtn_Image = show_errorhere && showQtnErrHere && EF_Qtn_Image == 'Qtn_Image' ? customStyle.stk_inptSTyle_error : {};


                                                            if (!isDisabled) {
                                                                return (
                                                                    <View style={[customStyle.sform_group2,]} key={'Qtn_' + qtnIndex} >
                                                                        <Text style={[customStyle.sform_label3]}>{qtn.VisibilityQuestionName}</Text>
                                                                        {qtn.QuestionType == 'Single choice list' && qtn.Answers &&
                                                                            render_Picker('Answer', 'AnswerId', onselectionChange, { value: selanswer, qtn: qtn, window: window })
                                                                        }
                                                                        {qtn.QuestionType == 'Multi choice list' && qtn.Answers &&
                                                                            <MultiSelect
                                                                                items={list_mcdata}
                                                                                uniqueKey="AnswerId"
                                                                                onSelectedItemsChange={(selectedItems) => { setMultiSelectValue(selectedItems, qtn, window) }} //setMultiSelectValue(selectedItems,qtn)
                                                                                selectedItems={selansid}
                                                                                selectText="Pick Items"
                                                                                searchInputPlaceholderText={ST.SearchItems + "..."}
                                                                                // onChangeInput={ (text)=> console.log(text)}
                                                                                tagRemoveIconColor={PageTheme.$primary_color}
                                                                                tagBorderColor={PageTheme.$primary_color}
                                                                                tagTextColor={PageTheme.$primary_color}
                                                                                selectedItemTextColor={PageTheme.$primary_color}
                                                                                selectedItemIconColor={PageTheme.$primary_color}
                                                                                itemTextColor={PageTheme.$text_color}
                                                                                displayKey="Answer"
                                                                                searchInputStyle={customStyle.wind_MultiSearchInputStyle}
                                                                                styleMainWrapper={EStyle_Qtn_MultiChoice}
                                                                                submitButtonColor={PageTheme.$primary_color}
                                                                                submitButtonText={ST.Submit}
                                                                            />
                                                                        }
                                                                        {(qtn.QuestionType == 'Number' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Text') &&
                                                                            <TextInput
                                                                                style={[customStyle.WQ_InputStyle, EStyle_Qtn_Input]}
                                                                                placeholder=""
                                                                                autoComplete='off'
                                                                                placeholderTextColor={PageTheme.$placeholder_color}
                                                                                // keyboardType={'ascii-capable'}
                                                                                keyboardType={(qtn.QuestionType == 'Decimal' ? 'decimal-pad' : (qtn.QuestionType == 'Text' ? 'default' : 'number-pad'))}
                                                                                value={(selansid + '')}
                                                                                onChange={(e) => console.log("onchangeVal--", e.value)}
                                                                                onChangeText={(val) => { setTextValue(val, qtn, window, (qtn.QuestionType == 'Decimal' ? 'decimal' : (qtn.QuestionType == 'Text' ? 'text' : 'numeric'))) }}
                                                                            />
                                                                        }
                                                                        {
                                                                            (qtn.QuestionType == 'Date') &&
                                                                            <View style={[customStyle.surveyQtn_datePicker_con, EStyle_Qtn_Date]}>
                                                                                <Text style={customStyle.WQ_datePicker_text}>{selansid != '' ? selansid : 'MM/YYYY'}</Text>
                                                                                <TouchableOpacity style={[customStyle.surveyQtn_datePicker]} onPress={() => { setDateValue(selanswer); showQtnDatePicker(qtn, window, true) }}>
                                                                                    <Fontisto size={20} color={PageTheme.$accent_color} name="date" />
                                                                                </TouchableOpacity>
                                                                            </View>
                                                                        }
                                                                        {
                                                                            (qtn.QuestionType == 'QR') &&
                                                                            <View style={customStyle.surveyQtn_datePicker_con}>
                                                                                <Text style={customStyle.WQ_datePicker_text}>{selanswer != '' ? selanswer : ''}</Text>
                                                                                <TouchableOpacity style={[customStyle.surveyQtn_datePicker]} onPress={() => { setQREnable(true); setQRqtnData({ qtn, window }); setShowQRCamera(true); }}>
                                                                                    {/* <Fontisto size={20} color={PageTheme.$accent_color} name="date"/> */}
                                                                                    <Ionicons name="camera" color={PageTheme.$accent_color} size={24} />
                                                                                </TouchableOpacity>
                                                                            </View>
                                                                        }
                                                                        {((qtn.showDatePicker == true || qtn.showDatePicker == 'true') && (qtn.QuestionType == 'Date')) &&
                                                                            renderDatePicker(qtn, window)
                                                                        }
                                                                        {
                                                                            (qtn.QuestionType == 'Rating') &&
                                                                            <View style={customStyle.surveyQtn_datePicker_con}>
                                                                                <Text style={customStyle.surveyQtn_datePicker_text}>{selanswer}</Text>
                                                                                <TouchableOpacity style={[customStyle.surveyQtnRatingIcon]} onPress={() => { setRatingQtn(qtn); setRatingWindow(window); setShowRating(true); }}>
                                                                                    <MaterialCommunityIcons size={25} color={PageTheme.$accent_color} name="drag" />
                                                                                </TouchableOpacity>
                                                                            </View>
                                                                        }


                                                                        {
                                                                            showImageTag &&
                                                                            <View style={[customStyle.store_audit_img_con, EStyle_Qtn_Image]}>
                                                                                <Image source={(selimg != '' && selimg != null) ? { uri: selimg } : require('../assets/image/greybg.jpg')} style={[customStyle.store_audit_image, ((selimg != '' && selimg != null) ? { resizeMode: 'contain' } : { width: 100, height: 150, resizeMode: 'stretch', alignSelf: 'center' })]} />
                                                                                <TouchableOpacity style={customStyle.store_audit_pickimg_btn} onPress={() => { openCamera(window, {}, 0, '1', '2', qtn) }}>
                                                                                    <Entypo name="camera" color={PageTheme.$text_color} size={28} />
                                                                                </TouchableOpacity>
                                                                            </View>
                                                                        }


                                                                    </View>
                                                                )
                                                            }
                                                            else {
                                                                return null;
                                                            }
                                                        })}
                                                    </View>
                                                }
                                                {RemarkEnable == true &&
                                                    <View style={[customStyle.openStk_prd_borderT, customStyle.pt10, customStyle.mb10]}>
                                                        <Text style={[customStyle.openStk_prd_label, customStyle.st_TextLbl]}>{ST.Remark}</Text>
                                                        <TextInput
                                                            style={[customStyle.WQ_InputStyle]}
                                                            value={remark}
                                                            autoComplete='off'
                                                            onChangeText={(val) => { onCatTextChange(window, 'remark', val) }}
                                                        />
                                                    </View>
                                                }

                                            </View>
                                        }



                                    </View>
                                </View>
                            </View>
                        );
                    }}
                />

            </KeyboardAvoidingView>
        )
    }

    function _renderHeader(currentIndex) {
        return (
            <View style={customStyle.album_ZOOM_topBar}>
                <Text style={customStyle.album_ZOOM_indicator}>{`${(currentIndex + 1)}/${zoomImageUrl.length}`}</Text>
                <TouchableOpacity style={customStyle.album_ZOOM_backBtn} onPress={() => { UpdateShow_zoomImageRef(false) }}>
                    <Entypo name='chevron-left' color={'#fff'} size={24} />
                </TouchableOpacity>
            </View>
        )
    }

    const onCancelClean = () => {
        setDataCleanModal(false)
    }
    const onclear = () => {
        onWindowDataClean(DataCleanItem)
    }

    return (
        <Container {...props} pt={0} avoidSafeArea={(Platform.OS == 'ios' ? true : false)}>
            {processing && <CustomLoader fullHeight={true} title={loaderTitle} />}
            <View style={{ zIndex: 10 }}>
                <CustomHeader {...props} showaddstore={true} title={currentMenu.MenuName} projectCode={`${storeData.StoreId}: ${storeData.StoreName}`} />
            </View>
            {_OpenCaptureImage_Modal()}
            {ConfirmSaveAlert(props, showAlert, onSaveCancel, saveData)}
            {ConfirmSaveAlert(props, showAlert1, onSaveCancel, saveData)}
            {ConfirmSaveAlert(props, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)}
            <CustomCamera cameraType={'back'} QRCodeEnable={QREnable} onImageCaptured={(imgData) => { console.log("QRRec:", imgData); setShowQRCamera(false); onQRScanned(imgData) }} showCamera={showQRCamera} onHideCamera={() => { setShowQRCamera(false); }} />
            <CustomCamera cameraType={'back'} BottomText={'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | Image Type: ' + currentMenu.MenuName} enableCameraFlip={showSwitchCamera} gridEnable={GridValue} onImageCaptured={(imgData) => { setShowCamera(false); getImage(imgData) }} showCamera={showCamera} onHideCamera={() => { setShowCamera(false); }} />

            <LinearGradient colors={[PageTheme.$gradient1, PageTheme.$primary_color]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={[customStyle.roundScrollWrapper, customStyle.zIndex0]}>
                <View style={[customStyle.pageContentWrapper]}>
                    <View style={customStyle.storel_searchbar}>
                        <TextInput
                            style={[customStyle.storel_searchInput]}
                            placeholder={ST.Searchby + ' ' + currentMenu.MenuName}
                            placeholderTextColor={PageTheme.$placeholder_color}
                            value={searchedItem}
                            autoComplete='off'
                            onChangeText={(val) => { setSearchedItem(val); FilterStores(val) }}
                        />
                        <TouchableOpacity style={customStyle.storel_searchBtn} onPress={() => { FilterStores(searchedItem) }}>
                            <AntDesign style={customStyle.storel_searchBtnIcon} name='search1' size={20} color={PageTheme.$accent_color} />
                        </TouchableOpacity>
                    </View>
                    {Object.keys(storeData).length > 0 &&
                        <View style={customStyle.Windows_Wrap}>
                            {_renderWindow()}
                        </View>
                    }
                    <View style={[customStyle.opening_Stock_btnWrap, customStyle.pb10]}>
                        <GradientButton {...props} title={ST.Save} onPress={() => { onSubmitData() }} />
                    </View>
                </View>

            </LinearGradient>
            {showRating == true &&
                renderRatingView()
            }
            {show_zoomImage &&
                <View style={customStyle.album_ZOOM_wrap}>
                    <ImageViewer ref={zoomView} style={customStyle.album_ZOOM} imageUrls={zoomImageUrl} index={refImageIndex}
                        renderHeader={_renderHeader} renderIndicator={() => null}
                    />
                </View>
            }
        </Container>
    );
}


export default connect(mapStateToProps, mapDispatchToProps)(PaidVisibilityOneApp);