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 { Image, TextInput, View, Text, TouchableOpacity, Platform, FlatList, Alert, Animated, AppState, 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 } from '../constants/constants';
import CustomHeader from '../components/customHeader';
import { Entypo, Fontisto, 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 CameraImg from '../assets/performics/camera_front_image.svg'
import MultiSelect from 'react-native-multiple-select';
import CheckBox from '@react-native-community/checkbox';
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 Window(props) {
    const route = useRoute();
    const ST = props.StaticText || {};

    const PageTheme = GetPageTheme(props.DarkMode, route.name);
    const customStyle = customStyles(props.DarkMode, route.name);
    const [processing, setProcessing] = useState(true);
    const [loaderTitle, setLoaderTitle] = useState('loading...');
    const [isAdhocScreen, setIsAdhocScreen] = useState(false);
    const [storeData, setStoreData] = useState({});
    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 [showAlert, setShowAlert] = useState(false);
    const [zoomImageUrl, setZoomImageUrl] = useState([]);
    const [showCamera, setShowCamera] = 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 [KPIFields, setKPIFields] = useState([]);
    const [showSwitchCamera, setShowSwitchCamera] = useState(false);

    const [GridValue, setGridValue] = 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 [ItemsInView, setItemsInView] = useState([]);

    const [SelectedImg, setSelectedImg] = useState('');
    const [showModal, setShowModal] = useState(false);
    const [reCapImgModalObj, setReCapImgModalObj] = useState({});
    const [showImageSaveOp, setShowImageSaveOp] = useState(true);
    const [StoreCameraAllow, setStoreCameraAllow] = useState(true);
    const isBgDataExistsRef = useRef(false);
    const [windData, setWindData] = useState(null);


    const hasUnsavedChangesRef = React.useRef(hasUnsavedChanges);
    const WindowDataRef = React.useRef(WindowData);
    const StoreIdRef = React.useRef(null);
    const ScreenNameRef = React.useRef('');

    const onViewableItemsChanged = ({ viewableItems, }) => {
        // Do stuff
        //console.log("onViewableItemsChanged called:")
        setItemsInView(viewableItems);
    };

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

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

    const inputRefs = useRef({});

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


    useEffect(() => {
        let params = props.route.params ? props.route.params : {};
        let storeData1 = params.storeData || {};
        let menu1 = params.menu || {};

        let cameraAllow = storeData1.CameraAllow == 'true' || storeData1.CameraAllow == 1 ? true : false;
        setStoreCameraAllow(cameraAllow);

        let isAdhoc = params.isAdhoc || false;
        setIsAdhocScreen(isAdhoc);
        setStoreData(storeData1);
        setCurrentMenu(menu1);

        StoreIdRef.current = storeData1.StoreId
        ScreenNameRef.current = { BgscreenName: menu1.ScreenName, BgMenuId: menu1.MenuId }
        getData(storeData1, menu1);

        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) {
            let newData = {
                storeBGData: WindowDataRef.current,
                menuName: ScreenNameRef.current && ScreenNameRef.current.BgscreenName,
                StoreId1: StoreIdRef.current,
                BgMenuID: ScreenNameRef.current && ScreenNameRef.current.BgMenuId,
                visiteDate: d2
            }
            let WindowsStr = JSON.stringify(newData)
            console.log("Saving WindowDataRef:", WindowsStr);
            await set_item('storeData', WindowsStr);
        }
    }

    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;
    }, [show_zoomImage]);


    function onBeforeRemove(e) {
        if (showCamera == true) {
            e.preventDefault();
            setShowCamera(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(
            "",
            "Do you really want to exit the screen?",
            [
                {
                    text: "Cancel",
                    onPress: () => { },
                    style: "cancel"
                },
                {
                    text: "OK", onPress: async () => {
                        // setHasUnsavedChanges(false);
                        BgUnsavedChanges(false)
                        await clear_item('storeData')
                        props.navigation.dispatch(e.data.action);
                    }
                }
            ]
        );
    }


    async function getData(storeData1, menu1) {
        try {
            let { StoreId, ChainId, StateId, StoreTypeId } = 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 storeBGData1 = [], bgStoreJson = {}, isBgDataExists = false;
            let windData = await get_item('storeData')
            console.log("backKillData", windData);
            if (windData != null && windData != '' && windData != undefined) {
                setWindData(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;
                    isBgDataExistsRef.current = true;

                    bgStoreJson = StoreJson
                    BgUnsavedChanges(true)
                    BgWindowData(storeBGData)
                }
            }

            await db.transaction(async function (txn) {
                let q3 = `Select distinct WindowReasonId as ReasonId,WindowReason as Reason From Master_WindowReason where 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); },);

                // check if data exists
                let selectlist = ` distinct w.STORE_ID as StoreId,w.WINDOW_HEADER_ID as windowHeaderId,wd.WindowDefinitionId,wd.WindowId,wd.WindowName,wd.AddImageAllow,wd.AddImageMax,wd.WindowTable,wd.WindowField,wd.WindowValue,wd.ChildName,wd.WindowRefImage,wd.WindowRefImagePopUp,wd.WindowElementCheckAssortment,wd.WindowElementStockRequired,w.IS_PRESENT as IsPresent,wd.WindowNotExistCamera,w.WINDOW_NA_IMAGE as WindowNAImage,wd.WindowExistReasonEnable,wd.WindowNotExistReasonEnable,w.REASON_ID as ReasonId,w.REASON as Reason,wd.NoOfSplit,wd.WindowImage1,wd.WindowImage2,wd.WindowImage1Lable,wd.WindowImage2Lable,wd.WindowImage1CameraGrid,wd.WindowImage2CameraGrid,wd.StockQtyRequired`;
                let join = ` inner join Master_WindowDefinition wd on w.WINDOW_DEFINITION_ID=wd.WindowDefinitionId `;
                let q = ` Select ${selectlist} from ${AppTables.WINDOW_HDR_DATA} w  ${join} where w.STORE_ID='${StoreId}' and w.MENU_ID='${menu1.MenuId}'   order by wd.WinDefSequence   `;

                // else pick data from masters
                let selectlist2 = ` distinct s.StoreId,w.WindowDefinitionId,w.WindowId,w.WindowName,w.WindowTable,w.WindowField,w.WindowValue,w.ChildName,w.AddImageAllow,w.AddImageMax,w.WindowRefImage,w.WindowRefImagePopUp,w.WindowElementCheckAssortment,w.WindowElementStockRequired,'' as IsPresent,w.WindowNotExistCamera,'' as WindowNAImage,w.WindowExistReasonEnable,w.WindowNotExistReasonEnable,'' as ReasonId,'' as Reason,w.NoOfSplit,w.WindowImage1,w.WindowImage2,w.WindowImage1Lable,w.WindowImage2Lable,w.WindowImage1CameraGrid,w.WindowImage2CameraGrid,w.StockQtyRequired`;
                let join2 = ` inner join Mapping_StoreWindow s on w.WindowDefinitionId=s.WindowDefinitionId  `;
                let q2 = ` Select ${selectlist2} from Master_WindowDefinition w  ${join2} where s.StoreId='${StoreId}' and w.MenuId='${menu1.MenuId}'  order by w.WinDefSequence  `;

                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    console.log("added count local:", txnres2.rows.length);
                    if (txnres2.rows.length > 0) {
                        let arr = []; let images = [], allWindowsData = [], inputChangeFlag = [];
                        for (let i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            let isPresent = data.IsPresent == '1' || data.IsPresent == 1 ? 1 : 0;
                            if (isBgDataExists) {
                                let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId)
                                let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {};
                                isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0;
                            }
                            let animatedChoice = new Animated.Value(isPresent);
                            let animatedHeight = new Animated.Value(450);
                            data.animatedHeight = animatedHeight
                            data.animatedChoice = animatedChoice;
                            data.NoOfSplit = parseInt(data.NoOfSplit);
                            let NoOfSplit = data.NoOfSplit;
                            let isStockReq = data.WindowElementStockRequired == 'true' || data.WindowElementStockRequired == 1 ? 1 : 0;

                            let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} }
                            images.push(imgObj);

                            let WindowSplits = await getWindowSplits(NoOfSplit, data, storeData1, menu1);
                            let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1, isBgDataExists, bgStoreJson);
                            console.log("called--", i, WQr);

                            let WindowQuestions = WQr['WindowQuestions'] || [];
                            let WindowQA = WQr['WindowQA'] || {};
                            let WSd = isStockReq == true ? await getWindowStockData(data, storeData1, isPresent, menu1) : { 'WStocks': [], 'WStocksData': [] };
                            let WStocks = WSd['WStocks'] || [];
                            let WStocksData = WSd['WStocksData'] || [];
                            let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0;

                            let isNAImageAvl = data.WindowNotExistCamera == 'true' || data.WindowNotExistCamera == 1 ? 1 : 0;
                            let NAImage1 = isNAImageAvl == 1 && data.WindowNAImage != null ? data.WindowNAImage : '';
                            let NAImage1Path = NAImage1 != '' ? 'file://' + ImageFolderPath + menu1.ScreenName + "/" + NAImage1 : '';

                            let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'NAImage1': NAImage1, 'NAImage1Path': NAImage1Path, 'ReasonId': data.ReasonId, 'Reason': data.Reason, 'isPresent': isPresent, 'isAllSKUChecked': isAllChecked };
                            data['WindowQuestions'] = WindowQuestions;
                            data['WindowStocks'] = WStocks;

                            let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: true }
                            inputChangeFlag.push(changesFlag)

                            arr.push(data);
                            allWindowsData.push(windowDataObj);
                            if (i == txnres2.rows.length - 1) {
                                let { menuName, StoreId1, BgMenuID } = bgStoreJson
                                if (!isBgDataExists) {
                                    BgWindowData(allWindowsData)
                                }
                                console.log("arrr_data---", JSON.stringify(allWindowsData));
                                setInputChange(inputChangeFlag)
                                setWindows(arr);
                                setZoomImageUrl(images);
                                setProcessing(false);
                            }
                        }
                    }
                    else {
                        await txn.executeSql(q2, [], async function (txn2, txnres2) {
                            console.log("load count:", txnres2.rows.length);
                            if (txnres2.rows.length > 0) {
                                let arr = [], images = [], allWindowsData = [], inputChangeFlag = [];
                                for (let i = 0; i < txnres2.rows.length; i++) {
                                    let data = txnres2.rows.item(i);
                                    let isPresent = 0;
                                    if (isBgDataExists) {
                                        let storeBgIndex = storeBGData1.findIndex(i => i.WindowId == data.WindowId && i.WindowDefinitionId == data.WindowDefinitionId)
                                        let storeBgObj = storeBgIndex >= 0 ? storeBGData1[storeBgIndex] : {};
                                        isPresent = storeBgObj.isPresent == '1' || storeBgObj.isPresent == 1 ? 1 : 0;
                                    }
                                    let animatedChoice = new Animated.Value(isPresent);
                                    let animatedHeight = new Animated.Value(450);
                                    data.animatedHeight = animatedHeight
                                    data.animatedChoice = animatedChoice;

                                    data.NoOfSplit = parseInt(data.NoOfSplit);

                                    let imgObj = { imgIndex: (i + 1), url: data.WindowRefImage, props: {} }
                                    images.push(imgObj);

                                    let WindowSplits = [];
                                    for (var s = 0; s < data.NoOfSplit; s++) {
                                        let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true };
                                        WindowSplits.push(obj);
                                    }
                                    let WQr = await getWindowQuestions(data, storeData1, isPresent, menu1, isBgDataExists, bgStoreJson);
                                    let WindowQuestions = WQr['WindowQuestions'] || [];
                                    let WindowQA = WQr['WindowQA'] || {};
                                    let WSd = await getWindowStockData(data, storeData1, false, menu1);
                                    let WStocks = WSd['WStocks'] || [];
                                    let WStocksData = WSd['WStocksData'] || [];
                                    let isAllChecked = WSd['isAllChecked'] != null ? WSd['isAllChecked'] : 0;


                                    let windowDataObj = { 'WindowId': data.WindowId, 'WindowDefinitionId': data.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': WindowQA, 'WStocksData': WStocksData, 'isAllSKUChecked': isAllChecked };
                                    data['WindowQuestions'] = WindowQuestions;
                                    data['WindowStocks'] = WStocks;

                                    let changesFlag = { WindowId: data.WindowId, WindowDefinitionId: data.WindowDefinitionId, Flag: false }
                                    inputChangeFlag.push(changesFlag)
                                    arr.push(data);
                                    allWindowsData.push(windowDataObj);
                                    if (i == txnres2.rows.length - 1) {
                                        let { menuName, StoreId1, BgMenuID, visiteDate } = bgStoreJson
                                        if (!isBgDataExists) {
                                            BgWindowData(allWindowsData)
                                        }
                                        console.log('arrr----:', JSON.stringify(allWindowsData));
                                        setInputChange(inputChangeFlag)
                                        setWindows(arr);
                                        setZoomImageUrl(images);
                                        setProcessing(false);
                                    }
                                }
                            }
                            else {
                                setProcessing(false);
                            }
                        }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },);
                    }
                }, function (txnE, txnerr) { console.log(txnerr); setProcessing(false); },);

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


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

    }

    async function getWindowSplits(NoOfSplit, window, storeData1, menu1) {
        let WindowSplits_def = [];
        for (let s = 0; s < NoOfSplit; s++) {
            let obj = { 'Image1Name': '', 'Image1': '', 'Image2Name': '', 'Image2': '', img1Required: true, img2Required: true, addImg: 0 };
            WindowSplits_def.push(obj);
        }
        return new Promise((resolve, reject) => {

            db.transaction(async function (txn) {

                let q = `select * from ${AppTables.WINDOW_IMAGES} where WINDOW_HEADER_ID='${window.windowHeaderId}' and  STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' `;

                await txn.executeSql(q, [], async function (txn2, txnres2) {

                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        for (let i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            // console.log(data.WINDOW_HEADER_ID)
                            let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0;
                            let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 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, WindowId, WindowDefinitionId) => {
        const item = bgJsonDta?.storeBGData?.find(i => i.WindowId == WindowId && i.WindowDefinitionId == WindowDefinitionId);
        return item?.WindowQuestions || []
    };

    ///jp fixed queation enable disable on app kill
    const getWindowQA = (bgJsonDta, WindowId, WindowDefinitionId) => {
        const item = bgJsonDta?.storeBGData?.find(i => i.WindowId == WindowId && i.WindowDefinitionId == WindowDefinitionId);
        return item?.WindowQA || null
    };

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

        if (isBgDataExists) {
            questionsBg = await getWindowQuestionsById(bgStoreJson, window?.WindowId, window?.WindowDefinitionId);
            console.log("bgStoreJson_new", questionsBg);
        }

        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                var q = '', selectlist = '', join = '', join2 = '';
                if ((isInserted == true || isInserted == 1) && !isBgDataExists) {
                    selectlist = ` DISTINCT  q.QUESTION_ID as WindowQuestionId,q.QUESTION_CODE as WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable,q.IS_DISABLED,q.ANSWER as Answer,q.ANSWER_ID as AnswerId,q.MULTI_OPTIONS_IDS as multi_op_ids,q.IMAGE_ALLOW1 as WAShowCamera,q.IMAGE1 as Image1  `;
                    join2 = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `;
                    join = ` inner join Master_WindowQuestion wq on wq.WindowQuestionId=q.QUESTION_ID `;
                    q = `select ${selectlist} from ${AppTables.WINDOW_CHILD_DATA} q ${join} ${join2} where q.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}' and q.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and q.WINDOW_ID='${window.WindowId}' order by wq.WindowQuestionSequence  `;
                }
                else {
                    selectlist = ` DISTINCT  wq.WindowQuestionId,wq.WindowQuestionCode,wq.WindowQuestionName,wq.QuestionType,wq.WQShowCamera,wq.WQCameraMandatory,wq.WQLengthValidationRequired,wq.WQMinimumChar,wq.WQMaximumChar,wq.WQDecimalPoint,wq.WQDateRangeMin,wq.WQDateRangeMax,wq.WQVoiceLengthInMinutes,wq.WQDefaultQuestionEnable `;
                    join = ` inner join Mapping_WindowQuestion mq on mq.WindowQuestionId=wq.WindowQuestionId `;
                    q = `select ${selectlist} from  Master_WindowQuestion wq  ${join} where mq.WindowDefinitionId='${window.WindowDefinitionId}' order by wq.WindowQuestionSequence  `;
                }

                console.log("qqqqqqqqqq------",);

                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        let wqa_obj = {};
                        for (let i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            let answers = [];
                            data.WQDefaultQuestionEnable = data.WQDefaultQuestionEnable == 1 || data.WQDefaultQuestionEnable == 'true' ? true : false;

                            if (isInserted == true || isInserted == 1) {
                                console.log("dataInserted---", data);
                                data['isDisabled'] = data.IS_DISABLED == true || data.IS_DISABLED == "true" ? true : false;
                                ///jp fixed queation enable disable on app kill
                                if (isBgDataExists && questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) {
                                    const isEnabled = questionsBg.some(q =>
                                        q.WindowQuestionId === data.WindowQuestionId && q.isDisabled === false
                                    );
                                    console.log("isEnabled", isEnabled);
                                    if (isEnabled) {
                                        data['isDisabled'] = false;
                                    } else {
                                        data['isDisabled'] = true;
                                    }
                                } else {
                                    data['isDisabled'] = !data.WQDefaultQuestionEnable;
                                }
                            }
                            ///jp fixed queation enable disable on app kill
                            else if (isBgDataExists) {
                                data['isDisabled'] = !data.WQDefaultQuestionEnable;
                                if (questionsBg != null && questionsBg != undefined && Array.isArray(questionsBg) && questionsBg.length > 0) {
                                    const isEnabled = questionsBg.some(q =>
                                        q.WindowQuestionId === data.WindowQuestionId && q.isDisabled === false
                                    );
                                    if (isEnabled) {
                                        data['isDisabled'] = false;
                                    } else {
                                        data['isDisabled'] = true;
                                    }
                                }
                            } else {
                                data['isDisabled'] = !data.WQDefaultQuestionEnable;
                            }

                            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.WindowQuestionId + '_AnswerId';
                            let ans_key = data.WindowQuestionId + '_Answer';
                            let multi_key = data.WindowQuestionId + '_MultiOption';
                            let date_key = data.WindowQuestionId + '_Date';
                            let img_key = data.WindowQuestionId + '_ImagePath1';
                            let imgname_key = data.WindowQuestionId + '_ImageName1';
                            let rating_key = data.WindowQuestionId + '_Rating';


                            let showImageTag = (data.WQShowCamera == 'true' || data.WQShowCamera == 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 != '' && 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.WAShowCamera == 1 || ansss.WAShowCamera == '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;
                                console.log("test--------", 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  WindowAnswerId as AnswerId,WindowAnswerName as Answer,WAShowCamera,WACameraMandatory,WAQuestionEnable,WAQuestionDisable `;
                q = `select ${selectlist} from  Master_WindowQuestion  where WindowQuestionId='${qtn.WindowQuestionId}'  order by WASequence  `;

                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [];
                        for (let 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, menu1 = {}) {
        let obj = { 'WStocks': [], 'WStocksData': [] }
        let { StoreId, StateId, ChainId, StoreTypeId, StoreClassId, StoreCategoryId } = storeData1;
        return new Promise((resolve, reject) => {
            db.transaction(async function (txn) {
                var q = '', selectlist = '', join = '';
                let checkassrt = window.WindowElementCheckAssortment == 'true' || window.WindowElementCheckAssortment == 1 ? true : false;

                if (isInserted == true) {
                    if (checkassrt) {
                        join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WINDOW_STOCK_VALUE and a.StoreId='${StoreId}'`;
                    }
                    selectlist = `  distinct s.WINDOW_STOCK_DEFINITION_ID as WindowStockDefinitionId, s.WINDOW_DEFINITION_ID as WindowDefinitionId,s.WINDOW_STOCK_TABLE as WindowStockTable,s.WINDOW_STOCK_FIELD as WindowStockField,s.WINDOW_STOCK_VALUE as WindowStockValue,s.WINDOW_STOCK_MBQ as WindowStockMBQ,s.PRODUCT_NAME as ProductName, s.STOCK as Stock,s.IS_WIND_PRESENT as isWindPresent `;
                    q = `select ${selectlist} from  ${AppTables.WINDOW_STOCK_DATA} s ${join} where s.WINDOW_DEFINITION_ID='${window.WindowDefinitionId}' and s.STORE_ID='${storeData1.StoreId}' and MENU_ID='${menu1.MenuId}'  `;
                } else {
                    if (checkassrt) {
                        join = ` inner join Mapping_ProductAssortmentStorewise a on a.ProductId=s.WindowStockValue and a.StoreId='${StoreId}' `;
                    }
                    selectlist = `  distinct s.WindowStockDefinitionId, s.WindowDefinitionId,s.WindowStockTable,s.WindowStockField,s.WindowStockValue,s.WindowStockMBQ,s.ProductName `;
                    q = `select ${selectlist} from  Master_WindowStockDefinition s ${join} where s.WindowDefinitionId='${window.WindowDefinitionId}'   `;
                }
                if (checkassrt) {
                    q += ` and a.StoreId='${storeData1.StoreId}' `;
                }
                q += isInserted ? ` order by s.PRODUCT_NAME ` : ` order by s.ProductName `;



                await txn.executeSql(q, [], async function (txn2, txnres2) {
                    if (txnres2.rows.length > 0) {
                        let arr = [], WStocksData = [];
                        let isAllChecked = 1;
                        for (let i = 0; i < txnres2.rows.length; i++) {
                            let data = txnres2.rows.item(i);
                            if (isInserted == true && data.Stock != null) {
                                inputRefs.current['input1_' + data.WindowDefinitionId + "_" + data.WindowStockDefinitionId] = '';
                                let stockData_obj = { 'ProductId': data.WindowStockValue, 'Stock': data.Stock, 'isWindPresent': (data.isWindPresent != null ? data.isWindPresent : 0) }
                                WStocksData.push(stockData_obj);
                            }
                            if (data.isWindPresent == null || data.isWindPresent == 0 || data.isWindPresent == '0' || data.isWindPresent == '') {
                                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 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('Camera unavailable');
        }
        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();

            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);
            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.WindowDefinitionId + '_' + window.WindowId + '_' + (props.UserId || '') + '_WindowImg-' + calculate_tym_date_for_filename + '.jpg';

            let allData = WindowData;
            let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
            const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
            let wind = wind_index >= 0 ? allData[wind_index] : defData;

            let camera1Label = window.WindowImage1Lable || '';
            let camera2Label = window.WindowImage2Lable || '';
            let extraLabel = '';

            if (cameraType == '2') {
                var QD = wind.WindowQA || {};
                var image_key = qtn.WindowQuestionId + '_ImageName1';
                var image_key_path = qtn.WindowQuestionId + '_ImagePath1';
                QD[image_key] = filename;
                extraLabel = 'Qtn Id: ' + qtn.WindowQuestionId;
            }
            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;
            }

            const mark_text1 = calculate_tym_date_over_img;
            const mark_text2 = 'Store Name:' + storeData.StoreName + ' | Store Id:' + storeData.StoreId + ' | User Id:' + storeData.EmpId + ' | WindowDef Id:' + window.WindowDefinitionId + (extraLabel != '' ? ' (' + extraLabel + ')' : '') + ' | Image Type: ' + currentMenu.MenuName + ' | Date:' + calculate_tym_date_over_img;

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

                    if (cameraType == '2') {
                        QD[image_key_path] = uri;
                        wind.WindowQA = QD;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        // setWindowData(allData);
                        BgWindowData(allData)
                        BgUnsavedChanges(true)
                        // setHasUnsavedChanges(true);
                        setrerenderdata3(!rerenderdata3);
                    }
                    else if (cameraType == '3') {
                        wind[image_key_path] = uri;
                        wind_index >= 0 ? allData[wind_index] = wind : allData.push(wind);
                        // setWindowData(allData);
                        BgWindowData(allData)
                        BgUnsavedChanges(true)
                        // setHasUnsavedChanges(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);
                        // setWindowData(allData);
                        BgWindowData(allData)
                        // setHasUnsavedChanges(true);
                        BgUnsavedChanges(true)
                        setrerenderdata2(!rerenderdata2);
                    }

                    let objIndex = InputChange.findIndex(obj => obj.WindowId == window.WindowId && obj.WindowDefinitionId == window.WindowDefinitionId);
                    let winArr = [...InputChange]
                    winArr[objIndex].Flag = true
                    // console.log("changeValue---------1", winArr)
                    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(err.message, err.code);
                });

        }
    }

    async function openCamera(window, splitItem, splitItemIndex, type = '1', cameraType = '1', qtn = {}) {
        setErrorField({});
        setError(false);
        let GridAllow = cameraType == '1' ? (type === '1' ? (window.WindowImage1CameraGrid === 'true' || window.WindowImage1CameraGrid == true) : (window.WindowImage2CameraGrid === 'true' || window.WindowImage2CameraGrid == 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('Saving Data...');
        setProcessing(true);
        let d1n = new Date();
        let d3 = moment(d1n).format('MM/DD/YYYY');
        try {
            let { StoreId, ChainId, StateId, StoreTypeId } = storeData;
            await db.transaction(async function (txn) {

                //  remove old data
                await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_HDR_DATA} WHERE STORE_ID='${StoreId}' and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) {
                    console.log('window hdr data deleted');
                }, function (txnE, txnerr) { console.log(txnerr); },);
                await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_CHILD_DATA} WHERE STORE_ID='${StoreId}'  and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) {
                    console.log('window child data deleted');
                }, function (txnE, txnerr) { console.log(txnerr); },);
                await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_IMAGES} WHERE STORE_ID='${StoreId}'  and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) {
                    console.log('window images data deleted');
                }, function (txnE, txnerr) { console.log(txnerr); },);
                await txn.executeSql(`DELETE FROM ${AppTables.WINDOW_STOCK_DATA} WHERE STORE_ID='${StoreId}'  and MENU_ID='${currentMenu.MenuId}' and VISIT_DATE='${d2}' `, [], async function (txn2, txnres) {
                    console.log('window stock data deleted');
                }, function (txnE, txnerr) { console.log(txnerr); },);

                // add data
                var values = '', childV = '', imageV = '', stockV = '';

                for (const wi in Windows) {
                    const window = Windows[wi];
                    let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0;
                    let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0;
                    let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0;
                    let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0;
                    let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0;
                    let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0;
                    let WindowQuestions = window.WindowQuestions || [];
                    let WindowStocks = window.WindowStocks || [];


                    const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
                    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 WindowSplits = wind.WindowSplits || [];
                    let QD = wind.WindowQA || {};
                    let WStocksData = wind.WStocksData || [];

                    let WINDOW_HEADER_ID = 'WIND' + wi + (Math.floor(Math.random() * 1000) + 1);
                    let { WindowDefinitionId, WindowId, WindowName, WindowTable, WindowField, WindowValue, ChildName } = window;


                    values += values != '' ? ' , ' : '';
                    values += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowName}','${WindowTable}','${WindowField}','${WindowValue}','${ChildName}','${isPresent}','${NAImage1}','${ReasonId}','${Reason}','${currentMenu.MenuId}','${d3}') `;

                    if (isPresent == 1) {
                        for (const qtnIndex in WindowQuestions) {
                            const qtn = WindowQuestions[qtnIndex];

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

                            let { WindowQuestionId, WindowQuestionCode, QuestionType, WAShowCamera } = qtn
                            let answer = QD[ans_key] || 0;
                            let answerId = QD[id_key] || '';
                            let multi_options_ids = QD[multi_key] || '';
                            let isImage1All = WAShowCamera == 'true' || WAShowCamera == 1 ? 1 : 0;
                            let Image1 = isImage1All == 1 ? QD[imgname_key] : '';
                            let isDisabled = qtn.isDisabled;

                            childV += childV != '' ? ' , ' : '';
                            childV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowQuestionId}','${WindowQuestionCode}','${QuestionType}','${answer}','${answerId}','${multi_options_ids}','${Image1}','${isImage1All}','${currentMenu.MenuId}','${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 += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${Image1Name}','${Image2Name}','${currentMenu.MenuId}','${d3}','${splitItem?.addImg || 0}') `;
                        }
                        for (const stockProdIndex in WindowStocks) {
                            const stockProd = WindowStocks[stockProdIndex];
                            let sd = WStocksData.find(i => i.ProductId == stockProd.WindowStockValue) || {};
                            let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : '');
                            let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0;
                            let { WindowStockDefinitionId, WindowDefinitionId, WindowStockTable, WindowStockField, WindowStockValue, WindowStockMBQ, ProductName } = stockProd
                            stockV += stockV != '' ? ' , ' : '';
                            stockV += ` ('${WINDOW_HEADER_ID}','${StoreId}','${d3}','${WindowDefinitionId}','${WindowId}','${WindowStockDefinitionId}','${WindowStockTable}','${WindowStockField}','${WindowStockValue}','${WindowStockMBQ}','${ProductName}','${stock}','${isWindPresent}','${currentMenu.MenuId}','${d3}') `;
                        }

                    }
                }

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


                let add_hdr_data = `INSERT INTO ${AppTables.WINDOW_HDR_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_NAME,WINDOW_TABLE,WINDOW_FIELD,WINDOW_VALUE,CHILD_NAME,IS_PRESENT,WINDOW_NA_IMAGE,REASON_ID,REASON,MENU_ID,ADDED_DATE) VALUES ${values} `;
                let add_child_data = `INSERT INTO ${AppTables.WINDOW_CHILD_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,QUESTION_ID,QUESTION_CODE,QUESTION_TYPE,ANSWER,ANSWER_ID,MULTI_OPTIONS_IDS,IMAGE1,IMAGE_ALLOW1,MENU_ID,ADDED_DATE,IS_DISABLED) VALUES ${childV} `;
                let add_images_data = `INSERT INTO ${AppTables.WINDOW_IMAGES} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,IMAGE1,IMAGE2,MENU_ID,ADDED_DATE,ADD_IMAGES) VALUES ${imageV} `;
                let add_stock_data = `INSERT INTO ${AppTables.WINDOW_STOCK_DATA} (WINDOW_HEADER_ID,STORE_ID,VISIT_DATE,WINDOW_DEFINITION_ID,WINDOW_ID,WINDOW_STOCK_DEFINITION_ID,WINDOW_STOCK_TABLE,WINDOW_STOCK_FIELD,WINDOW_STOCK_VALUE,WINDOW_STOCK_MBQ,PRODUCT_NAME,STOCK,IS_WIND_PRESENT,MENU_ID,ADDED_DATE) VALUES ${stockV} `;

                await txn.executeSql(add_hdr_data, [], async function (txn2, txnres) {
                    console.log('window 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 split window images');
                    }
                    else if (!isStockAdded) {
                        setProcessing(false); notify('Cannot add window stock data');
                    }
                    else if (!isChildAdded) {
                        setProcessing(false); notify('Cannot add window questions data');
                    }
                    else {
                        setProcessing(false); notify('Window data updated successfully');
                        // clear store data in local storage to avoiding re-set data for the store  
                        clear_item('storeData')
                        props.navigation.goBack();
                    }

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

    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 wi in Windows) {
                const window = Windows[wi];
                let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0;
                let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0;
                let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0;
                let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0;
                let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0;
                let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0;
                let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0;
                let WindowQuestions = window.WindowQuestions || [];
                let WindowStocks = window.WindowStocks || [];


                const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
                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 WindowSplits = wind.WindowSplits || [];
                let QD = wind.WindowQA || {};
                let WStocksData = wind.WStocksData || [];

                let errorobj = { 'EF_Window': window };

                if (isPresent == '1') {
                    if (isReasonEnable == true && ReasonId == '') {
                        errorobj['EF_NExistReason'] = "NExistReason";
                        showError(errorobj, true);
                        notify(`Please select reason for ${window.WindowName} `, 'LONG');
                        resolve(false); return;
                    }
                    else {
                        if (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'] : '';
                                // console.log('Image2Name', Image2Name, isImage2);
                                if (StoreCameraAllow && isImage1 == 1 && Image1Name == '') {
                                    errorobj['EF_splitImage1'] = "splitImage1";
                                    errorobj['EF_splitItemIndex'] = splitItemIndex;
                                    showError(errorobj, true);
                                    notify(`Please click all images for ${window.WindowName}`, 'LONG');
                                    resolve(false); return;
                                }
                                else if (StoreCameraAllow && isImage2 == 1 && Image2Name == '') {
                                    errorobj['EF_splitImage2'] = "splitImage2";
                                    errorobj['EF_splitItemIndex'] = splitItemIndex;
                                    showError(errorobj, true);
                                    notify(`Please click all images for ${window.WindowName}`, 'LONG');
                                    resolve(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.WindowStockValue) || {};
                                let stock = sd.Stock != null ? sd.Stock : (sd.Stock == 0 ? sd.Stock : '');
                                let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0;

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


                                if ((isListedSKUEnable == true && isWindPresent == 1 && StockQtyRequired == 1 && stock == '') || (isListedSKUEnable != true && (stock == null || stock == ''))) {
                                    errorobj['EF_stock'] = "input1_";
                                    errorobj['EF_stockProd'] = stockProd;
                                    let refIn1 = inputRefs.current['input1_' + window.WindowDefinitionId + '_' + stockProd.WindowStockDefinitionId];
                                    if (refIn1 != null) {
                                        refIn1.focus();
                                    }
                                    showError(errorobj, true);
                                    notify(`${ST.Pleaseenterstockfor} ${window.WindowName} ( ${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.WindowName} `, '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.WindowQuestionId + '_AnswerId';
                                let ans_key = qtn.WindowQuestionId + '_Answer';
                                let multi_key = qtn.WindowQuestionId + '_MultiOption';
                                let date_key = qtn.WindowQuestionId + '_Date';
                                let img_key = qtn.WindowQuestionId + '_ImagePath1';
                                let imgname_key = qtn.WindowQuestionId + '_ImageName1';
                                let rating_key = qtn.WindowQuestionId + '_Rating';
                                let list_mcdata = [];

                                let isImgAllowed = (qtn.WQShowCamera == 'true' || qtn.WQShowCamera == 1);
                                let checkForAnsKey = (qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Date' || qtn.QuestionType == 'Rating');
                                errorobj['EF_qtn'] = qtn;

                                if (qtn.QuestionType == 'Single choice list') {
                                    selansid = QD[id_key];
                                }
                                else if (qtn.QuestionType == 'Multi choice list') {
                                    selansid = QD[multi_key] != null && QD[multi_key] != '' ? QD[multi_key].split(',') : [];
                                }
                                let isDisabled = qtn.isDisabled;
                                if (!isDisabled) {
                                    if (qtn.QuestionType == 'Multi choice list' && selansid.length <= 0) {
                                        errorobj['EF_Qtn_MultiChoice'] = 'Qtn_MultiChoice';
                                        showError(errorobj, true);
                                        notify(`Please select options for the required field in ${window.WindowName}`, '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' ? `Please pick a date for the required field in ${window.WindowName}` : (qtn.QuestionType == 'Rating' ? `Please select rating for the required field in ${window.WindowName}` : `Please fill all the required field in ${window.WindowName}`));
                                        notify(msg, 'SHORT');
                                        resolve(false); return;
                                    }

                                    if (Object.keys(QD).indexOf(id_key) < 0 || (QD[id_key] === undefined)) {
                                        errorobj['EF_Qtn_Input'] = 'Qtn_Input';
                                        showError(errorobj, true);
                                        notify(`Please fill all the required field in ${window.WindowName}`, 'SHORT');
                                        resolve(false);
                                        return;
                                    }

                                    else if (isImgAllowed && (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(`Please add images in ${window.WindowName}`, '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.WAShowCamera == 'true' || ansss.WAShowCamera == 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;
                                                }
                                            }
                                        }
                                    }
                                }
                                else {
                                    console.log("qtn is Disabled")
                                }

                                if (showImageTag && (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(`Please add images in ${window.WindowName}`, 'SHORT');
                                    resolve(false); return;
                                }
                            }
                        }

                    }
                }
                else {
                    if (isNAReasonEnable == true && ReasonId == '') {
                        errorobj['EF_NExistReason'] = "NExistReason";
                        showError(errorobj, true);
                        notify(`Please select reason for ${window.WindowName} `, 'LONG');
                        resolve(false); return;
                    }
                    else if (StoreCameraAllow && isNAImageAvl == true && NAImage1 == '') {
                        errorobj['EF_NExistImage'] = "NExistImage";
                        showError(errorobj, true);
                        notify(`Please click image for ${window.WindowName}`, 'LONG');
                        resolve(false); return;
                    }
                }

                if (wi == (Windows.length - 1)) {
                    resolve(true); return;
                }

            }

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

    }


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

        win_index >= 0 ? allData[win_index] = wind : allData.push(wind);
        //console.log('allData:', allData);

        let objIndex = InputChange.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true
        // console.log("changeValue---------1", winArr)
        setInputChange(winArr)
        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function onselectionChange2(option, qtn, window) {
        setErrorField({});
        setError(false);
        let allData = WindowData;
        let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
        const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let wind = wind_index >= 0 ? allData[wind_index] : defData;
        let data = wind.WindowQA || {};
        let id_key = qtn.WindowQuestionId + '_AnswerId';
        let ans_key = qtn.WindowQuestionId + '_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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true
        //console.log("changeValue---------1", winArr)
        setInputChange(winArr)
        // setWindowData(allData);
        BgWindowData(allData)

        let aq_ans = qtn.Answers != null ? qtn.Answers : [];
        let ans_obj = aq_ans.find(i => i.AnswerId == option.value) || {};
        let EQtns = ans_obj.WAQuestionEnable != null && ans_obj.WAQuestionEnable != '' ? ans_obj.WAQuestionEnable.replace(' ', '').split(',') : [];
        let DQtns = ans_obj.WAQuestionDisable != null && ans_obj.WAQuestionDisable != '' ? ans_obj.WAQuestionDisable.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 {
            ///jp fixed queation enable disable on app kill
            let allwindows = Windows;
            let windowIndex = allwindows.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId)
            let dataIndex = allData.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId);

            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;
                BgWindowData(allData)
                setWindows(allwindows);
                console.log("allwindows", allwindows);


                BgUnsavedChanges(true)
                setrerenderdata(!rerenderdata);
            }
        }
    }

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

        if (DQtns.length > 0) {
            new Promise.all(
                DQtns.map((qid, q_index) => {
                    let s_qtnindex = sqtns.findIndex(i => i.WindowQuestionId == 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.WindowQuestionId + '_AnswerId';
                        let ans_key = s_qtn.WindowQuestionId + '_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.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId)
                let dataIndex = allData.findIndex(i => i.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId);

                if (windowIndex >= 0) {
                    window['WindowQuestions'] = sqtns;
                    allwindows[windowIndex] = window;
                    // ✅ Update in allData too
                    if (dataIndex >= 0) {
                        allData[dataIndex]['WindowQuestions'] = sqtns;
                    }
                    //clear images
                    const activeQuestions = wind?.WindowQuestions?.filter(q => q.isDisabled === false) || [];
                    const WindowQuestionId = activeQuestions?.map(q => q.WindowQuestionId);
                    if (WindowQuestionId != null && WindowQuestionId != undefined) {
                        let id_key = WindowQuestionId + '_ImageName1';
                        let id_key_path = WindowQuestionId + '_ImagePath1';
                        data[id_key] = '';
                        data[id_key_path] = '';
                    }
                    // ✅ Set final updated refs and states
                    WindowDataRef.current = allData;
                    BgWindowData(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.WindowQuestionId == 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) {
                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.WindowDefinitionId == window.WindowDefinitionId && i.WindowId == window.WindowId)
                let dataIndex = allData.findIndex(i =>
                    i.WindowDefinitionId == window.WindowDefinitionId &&
                    i.WindowId == window.WindowId
                );

                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.WindowQuestionId + '_AnswerId';
        let ans_key = qtn.WindowQuestionId + '_Answer';
        let multi_key = qtn.WindowQuestionId + '_MultiOption';

        let allData = WindowData;
        let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
        const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true

        setInputChange(winArr)
        BgWindowData(allData)
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function setTextValue(value, qtn, window, type = '') {
        setErrorField({});
        setError(false);
        if (value != '') {
            let isValid = validateNumber(value, type);
            if (!isValid) {
                return;
            }
        }
        let id_key = qtn.WindowQuestionId + '_AnswerId';
        let ans_key = qtn.WindowQuestionId + '_Answer';

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

        if (qtn.QuestionType == 'Date') {
            let date_key = qtn.WindowQuestionId + '_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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true
        //console.log("changeValue---------1", winArr)
        setInputChange(winArr)
        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

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

        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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId) || {};
            allWindows[winIndex] = window;
            setWindows(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.WindowQuestionId + '_AnswerId';
        let ans_key = qtn.WindowQuestionId + '_Answer';
        let rating_key = qtn.WindowQuestionId + '_Rating';
        let ids = [], anss = [];
        RatingOrder.map((item, index) => {
            ids.push(item.AnswerId);
            anss.push(item.Answer);
        })

        let allData = WindowData;
        let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
        const wind_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = true
        //console.log("changeValue---------7", winArr)

        setInputChange(winArr)
        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }


    function onChoiceSelect(item, val, key, animatedChoice) {
        console.log('onChoiceSelect---1', val, "---------" + key)
        let win_index = InputChange.find(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId)
        let changeValue = win_index.Flag;
        ///jp change for clear data when data in background state
        console.log("questionsBg--", isBgDataExistsRef.current, changeValue, "----" + windData);
        if (!changeValue && isBgDataExistsRef.current && windData != null && windData != '' && windData != undefined) {
            let StoreJson = JSON.parse(windData)
            let questionsBg = getWindowQA(StoreJson, item.WindowId, item.WindowDefinitionId)
            if (questionsBg != null && questionsBg != undefined && questionsBg != '') {
                setIsPresentClean(val)
                setDataCleanAnim(animatedChoice)
                setDataCleanItem(item)
                setDataCleanModal(true)
                isBgDataExistsRef.current = false;
                return
            }
        } else 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 = { 'WindowId': item.WindowId, 'WindowDefinitionId': item.WindowDefinitionId };
        const win_index = allData.findIndex(i => i.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId);
        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.WindowId == item.WindowId && i.WindowDefinitionId == item.WindowDefinitionId);
            let winArr = [...InputChange]
            winArr[objIndex].Flag = true
            setInputChange(winArr)
        }
        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true);
        setrerenderdata(!rerenderdata);
    }

    function onWindowDataClean() {

        if (DataCleanAnim != null) {
            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 = { 'WindowId': DataCleanItem.WindowId, 'WindowDefinitionId': DataCleanItem.WindowDefinitionId, 'WindowSplits': WindowSplits, 'WindowQA': {}, 'WStocksData': [], 'isAllSKUChecked': 0, isPresent: isPresentClean };
        const win_index = allData.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId);

        allData[win_index] = defData

        let objIndex = InputChange.findIndex(i => i.WindowId == DataCleanItem.WindowId && i.WindowDefinitionId == DataCleanItem.WindowDefinitionId);
        let winArr = [...InputChange]
        winArr[objIndex].Flag = false
        //console.log("changeValue---------7", winArr)
        setInputChange(winArr)
        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true);
        setDataCleanModal(false)
        setrerenderdata(!rerenderdata);
    }


    async function setWindowStockVal(val, window, stockProd, key, type = '') {
        setErrorField({});
        setError(false);
        if (val != '') {
            let isValid = validateNumber(val, type);
            if (!isValid) {
                return;
            }
        }

        let allData = WindowData;
        let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
        const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        let wind = win_index >= 0 ? (allData[win_index] || defData) : defData;
        let WStocksData = wind['WStocksData'] || [];
        let sdIndex = WStocksData.findIndex(i => i.ProductId == stockProd.WindowStockValue);
        let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, '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 == 'isWindPresent') {
            let isAllChecked = await verifyAllChecked(val, window, stockProd, key);
            wind['isAllSKUChecked'] = isAllChecked;
        }


        // setWindowData(allData);
        BgWindowData(allData)
        // setHasUnsavedChanges(true);
        BgUnsavedChanges(true)
        setrerenderdata4(!rerenderdata4);
    }

    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.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
            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.WindowStockValue);
                    let sd1 = sdIndex1 >= 0 ? WStocksData[sdIndex1] : {};
                    let isWindPresent = sd1.isWindPresent;
                    if (isWindPresent == null || isWindPresent == '' || isWindPresent == 0 || isWindPresent == '0') {
                        isAllChecked = 0
                    }

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

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

    function checkAllSKUs(val, window) {

        let WindowStocks = window.WindowStocks || [];
        let allData = WindowData;
        let defData = { 'WindowId': window.WindowId, 'WindowDefinitionId': window.WindowDefinitionId };
        const win_index = allData.findIndex(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
        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.WindowStockValue);
            let sd = sdIndex >= 0 ? WStocksData[sdIndex] : { 'ProductId': stockProd.WindowStockValue, 'Stock': '' };
            let isWindPresent = (val == 1 || val == '1') ? 1 : 0;
            sd['isWindPresent'] = isWindPresent;

            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);

        BgWindowData(allData)
        BgUnsavedChanges(true)
        setrerenderdata(!rerenderdata);
    }

    function onSaveCancel() {
        setShowAlert(false);
    }

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

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

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

        return (
            <View style={customStyle.RatingModal}>
                <View style={customStyle.RatingModalCon}>
                    <Text style={customStyle.VRModalHeding}>Drag Items In Order</Text>
                    <Text style={customStyle.VRSubHeding}>Press and hold to drag</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}>Cancel</Text>
                        </TouchableOpacity>
                        <TouchableOpacity style={customStyle.RModal_Btnsave} onPress={() => { onRatingSave() }}>
                            <Text style={customStyle.RModal_BtnTextsave}>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 : '-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)}
            />
        );
    }

    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 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);
    }

    // ADD IMAGE FUNCTIONALITY -----

    // const handleAddImages = (WIndex) => {
    //     console.log('handleAddImages WIndex----', WIndex);
    //     console.log('WindowData ----', WindowData);

    //     let NObj = {
    //         Image1Name: '',
    //         Image1: '',
    //         Image2Name: '',
    //         Image2: '',
    //         img1Required: false,
    //         img2Required: false,
    //         addImg: 1
    //     }

    //     let objD = WindowData[WIndex]
    //     console.log('objDobjDobjDobjDobjDobjDobjD', objD);

    //     let WSplit = objD?.WindowSplits || []

    //     WSplit.push(NObj)
    //     objD.WindowSplits = WSplit

    //     WindowData[WIndex] = objD
    //     setrerenderdata(!rerenderdata)
    // };


    const handleAddImages = (WIndex) => {
    let newData = [...WindowData]

    let objD = newData[WIndex]
    let WSplit = objD?.WindowSplits || []

    let NObj = {
        Image1Name: '',
        Image1: '',
        Image2Name: '',
        Image2: '',
        img1Required: false,
        img2Required: false,
        addImg: 1
    }

    objD.WindowSplits = [...WSplit, NObj]
    newData[WIndex] = objD

    setWindowData(newData)
}

   const handleDelete = (splitItemIndex, WIndex) => {
    let newData = [...WindowData]

    let objD = newData[WIndex]
    let WSplit = objD?.WindowSplits || []

    objD.WindowSplits = WSplit.filter((_, i) => i !== splitItemIndex)
    newData[WIndex] = objD

    setWindowData(newData)
}


    // -------------

    function _renderWindow() {

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

        return (
            <FlatList
                data={Windows}
                extraData={rerenderdata}
                contentContainerStyle={customStyle.Win_scroll}
                style={customStyle.Win_scrollO}
                viewabilityConfigCallbackPairs={
                    FlatLConfCallbackPairs.current
                }
                listKey={(item, index) => `window_${index.toString()}`}
                renderItem={({ item, index }) => {
                    const window = item;
                    let windowIndex = index;
                    console.log('window item =====>', windowIndex);


                    let AddImageAllow = (window?.AddImageAllow ? true : false) || false
                    let AddImageMax = (window?.AddImageMax ? window?.AddImageMax : 0) || 0

                    let isImage1 = window.WindowImage1 == 'true' || window.WindowImage1 == 1 ? 1 : 0;
                    let isImage2 = window.WindowImage2 == 'true' || window.WindowImage2 == 1 ? 1 : 0;
                    let isNAImageAvl = window.WindowNotExistCamera == 'true' || window.WindowNotExistCamera == 1 ? 1 : 0;
                    let isNAReasonEnable = window.WindowNotExistReasonEnable == 'true' || window.WindowNotExistReasonEnable == 1 ? 1 : 0;
                    let isReasonEnable = window.WindowExistReasonEnable == 'true' || window.WindowExistReasonEnable == 1 ? 1 : 0;
                    let isStockReq = window.WindowElementStockRequired == 'true' || window.WindowElementStockRequired == 1 ? 1 : 0;
                    let StockQtyRequired = window.StockQtyRequired == 'true' || window.StockQtyRequired == 1 ? 1 : 0;
                    let WindowRefImagePopUp = window.WindowRefImagePopUp == 'true' || window.WindowRefImagePopUp == true ? true : false;

                    let isVisible = Boolean(ItemsInView.find(({ item: i, isViewable }) => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId && isViewable))

                    let RefImage = window.WindowRefImage;
                    let camera1Label = window.WindowImage1Lable || '';
                    let camera2Label = window.WindowImage2Lable || '';
                    let WindowQuestions = window.WindowQuestions || [];
                    let WindowStocks = window.WindowStocks || [];

                    const wind = WindowData.find(i => i.WindowId == window.WindowId && i.WindowDefinitionId == window.WindowDefinitionId);
                    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 WindowSplits = wind.WindowSplits || [];
                    let QuestionsData = wind.WindowQA || {};
                    let WStocksData = wind.WStocksData || [];
                    let isAllSKUChecked = wind.isAllSKUChecked == 1 || wind.isAllSKUChecked == "1";


                    var xpos = 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.WindowId == window.WindowId && EF_Window.WindowDefinitionId == window.WindowDefinitionId;
                    // 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_NExistImage = errorfield.EF_NExistImage || '';
                    let EStyle_NExistImage = show_errorhere && EF_NExistImage == 'NExistImage' ? customStyle.error_CatImage2 : {};

                    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


                    return (
                        <View style={customStyle.WItem_wrap} key={'window_' + index}>
                            <View style={customStyle.WItem_Hdr}>
                                <LinearGradient colors={[PageTheme.$primary_color, PageTheme.$secondary_color_light]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 1 }} style={customStyle.WItem_Hdrbg}>
                                    <Text style={customStyle.WItem_HdrText}>{window.WindowName}</Text>
                                    <Text style={[customStyle.WItem_Hdrname2]}>{window.ChildName}</Text>

                                    <TouchableOpacity style={customStyle.WItem_RefImgBtn} onPress={() => { openImageRefView(index) }}>
                                        <Entypo name='image-inverted' size={24} color={'#1f7dbc'} />
                                    </TouchableOpacity>
                                </LinearGradient>
                            </View>
                            {WindowRefImagePopUp && <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]}>
                                    <View style={[customStyle.openStk_prd_colflex, customStyle.mb10]}>
                                        <Text style={[customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel]}>{'Is Present'}</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' ? 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' ? customStyle.openStkCh_textactive : {})]}>Yes</Text>
                                                </TouchableOpacity>
                                                <TouchableOpacity style={[customStyle.openStkCh_con1]} onPress={() => { onChoiceSelect(window, 0, 'isPresent', window.animatedChoice) }}>
                                                    <Text style={[customStyle.openStkCh_text, (isPresent == '0' ? customStyle.openStkCh_textactive : {})]}>No</Text>
                                                </TouchableOpacity>
                                            </View>
                                        </View>
                                    </View>
                                    {((isPresent != '1' && isNAReasonEnable == true) || (isPresent == '1' && isReasonEnable == true)) &&
                                        <View style={[customStyle.openStk_prd_colflex, customStyle.openStk_prd_borderT, customStyle.pt10, customStyle.mb10]}>
                                            <Text style={[customStyle.openStk_prd_label, customStyle.openStk_prd_flexlabel]}>Select Reason</Text>
                                            {<CustomPicker2 {...props} Pickerdata={reasons_list} label_key={'Reason'} value_key={'ReasonId'} onchangeKeyLbl={'Reason'} onchangeKey={'ReasonId'} onChange={onselectionChange} 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}>{'Capture Image'}</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') &&
                                        <View>

                                            {(isStockReq == true && WindowStocks.length > 0) &&
                                                <View style={[customStyle.openStk_prd_borderT, customStyle.pt10]}>
                                                    <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}>{'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.WindowStockValue) || {};
                                                            let stock = sd.Stock != null ? sd.Stock : '';
                                                            let isWindPresent = sd.isWindPresent != null ? sd.isWindPresent : 0;

                                                            // highlight prd errors 
                                                            let EF_stockProd = errorfield.EF_stockProd != null ? errorfield.EF_stockProd : {};
                                                            let showPrdErrHere = EF_stockProd.WindowStockDefinitionId == stockProd.WindowStockDefinitionId;

                                                            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}>
                                                                    {isListedSKUEnable != true && <Text style={[customStyle.WStkHdrText3]}>{stockProd.ProductName}</Text>}
                                                                    {isListedSKUEnable == true &&
                                                                        <View style={customStyle.WStkHdr_checkboxWrap}>
                                                                            <View style={customStyle.WStkHdr_checkboxCon}>
                                                                                <CheckBox
                                                                                    boxType='square'
                                                                                    value={(isWindPresent == 1 || isWindPresent == '1')}
                                                                                    onValueChange={(val) => { let val1 = (val == true) ? 1 : 0; setWindowStockVal(val1, window, stockProd, 'isWindPresent') }}
                                                                                    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 && isWindPresent == 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.WindowDefinitionId + '_' + stockProd.WindowStockDefinitionId] = 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>
                                            }
                                            {(window.NoOfSplit > 0 && WindowSplits.length > 0 && (isImage1 == 1 || isImage2 == 1)) &&
                                                <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={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', elevation: 5 }}>
                                                     
                                                        <Text style={customStyle.windhdrText}>{'Capture Window Images'}</Text>

                                                        {AddImageAllow &&
                                                            <TouchableOpacity disabled={AddDisable} onPress={() => handleAddImages(windowIndex)} 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 split 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
                                                                            }
                                                                            {/* {console.log('camera2Label 2:', camera2Label)} */}
                                                                            <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, windowIndex),
                                                                                        },
                                                                                    ],
                                                                                    { 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>
                                            }

                                            {(WindowQuestions.length > 0) &&
                                                <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}>{'Window Questions'}</Text>
                                                    </LinearGradient>
                                                    {WindowQuestions.map((item, index) => {

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

                                                        let list_mcdata = [];
                                                        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(',') : [];

                                                        }
                                                        else if (qtn.QuestionType == 'Number' || qtn.QuestionType == 'Text' || qtn.QuestionType == 'Decimal' || qtn.QuestionType == 'Date') {
                                                            selansid = QuestionsData[ans_key];
                                                            selanswer = (qtn.QuestionType == 'Date') ? (QuestionsData[date_key] || moment().format('MM/DD/YYYY')) : '';
                                                            showImageTag = (qtn.WQShowCamera == 1 || qtn.WQShowCamera == 'true');
                                                        }
                                                        else if (qtn.QuestionType == 'Rating') {
                                                            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.WAShowCamera == 'true' || ansss.WAShowCamera == 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.WindowQuestionId == qtn.WindowQuestionId;

                                                        let EF_Qtn_MultiChoice = errorfield.EF_Qtn_MultiChoice || '';
                                                        let EStyle_Qtn_MultiChoice = show_errorhere && showQtnErrHere && EF_Qtn_MultiChoice == 'Qtn_MultiChoice' ? customStyle.stk_MultiSSTyle_error : customStyle.wind_MultiSearchInputStyle;


                                                        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.WindowQuestionName}</Text>
                                                                    {qtn.QuestionType == 'Single choice list' && qtn.Answers &&
                                                                        render_Picker('Answer', 'AnswerId', onselectionChange2, { 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="Search Items..."
                                                                            // 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={EStyle_Qtn_MultiChoice}
                                                                            submitButtonColor={PageTheme.$primary_color}
                                                                            submitButtonText="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}
                                                                            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.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>
                                            }


                                        </View>
                                    }



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

    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, DataCleanModal, onCancelClean, onclear, 'Your data will be clean',)}
            <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]}>
                    {Object.keys(storeData).length > 0 &&
                        <View style={customStyle.Windows_Wrap}>
                            {_renderWindow()}
                        </View>
                    }
                    <View style={[customStyle.opening_Stock_btnWrap]}>
                        <GradientButton {...props} title={'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)(Window);