//import * from "dropDownClass.js";
var errorValidationMapObj;
class DynamicTabledata {
    //var DropDownsClassObj=new DropDownsClass();

    //    bindTableBody(jsondata, tableid) {
    //        /*Function used to convert the JSON array to Html Table*/
    //        var columns = bindTableHeader(jsondata, tableid); /*Gets all the column headings of Excel*/
    //        for (var index = 0; index < jsondata.length; index++) {
    //            var row$ = $('<tr/>');
    //            for (var colIndex = 0; colIndex < columns.length; colIndex++) {
    //                var cellValue = jsondata[index][columns[colIndex]];
    //                if (cellValue == null)
    //                    cellValue = "";
    //                //  switch
    //                row$.append($('<td/>').html(cellValue));
    //            }
    //            $(tableid + ' tbody').append(row$);
    //        }
    //
    //    }
    bindTableBody(jsonData) {
        // var rawDataArray = [];
        var tbodyRow = '';
        var duplicateKeyWord = '';

        var jsonArrayLenght = jsonData.length;
        for (var index = 0; index < jsonArrayLenght; index++) {
            var bagroundColor = '';
            errorValidationMapObj = new Map();
            errorValidationMapObj.set("rowIndex", index);
            if ((index + 1) < jsonArrayLenght) {// not to be out of bound
                if (jsonData[index].siteId != null && jsonData[index + 1].siteId != null) {// not to be empty
                    if (jsonData[index].siteId == jsonData[index + 1].siteId) {
                        jsonData[index].duplicate = "true";
                        jsonData[index + 1].duplicate = "true";
                    }
                }
            }
            if (jsonData[index].duplicate == "true") {
                bagroundColor = 'bg-warning';
                duplicateKeyWord='<br><span class="text-danger font-weight-bold">Dupliacte</span>';
            }
            tbodyRow += '<tr class="' + bagroundColor + '">' +
                '<td id="serialNumber' + index + '">' + (index + 1) + '</td>' +
                '<td>' + this.validateSiteId(jsonData[index].siteId, index, "siteId") + duplicateKeyWord+'</td>' +
                '<td>' + this.validateSiteName(jsonData[index].siteName, index, "siteName") + '</td>' +
                '<td>' + this.validateLatLng(jsonData[index], index, "LatLong") + '</td>' +
                '<td>' + this.getCustomerDropDown(jsonData[index].customerName, index, "cutomer") + '</td>' +
                '<td>' + this.getCircleDropDown(jsonData[index].circle, index, "circle") + '</td>' +
                '</tr>';

            /*    if(errorValidationMapObj.get("siteId")=="Error" || errorValidationMapObj.get("siteName")=="Error" || 
                  errorValidationMapObj.get("LatLong")=="Error" || errorValidationMapObj.get("cutomer")=="Error" ||
                  errorValidationMapObj.get("circle")=="Error"){
                   errorBucket.push(errorValidationMapObj);
                    }*/
            errorBucket.push(errorValidationMapObj);
            // $(tableid + ' tbody').append(tbodyRow);
            // rawDataArray.push(jsonData[index]); //storing raw data from excel to array formate for any changes

        }
        return tbodyRow;
    }

    bindTableHeader(jsonData) {
        /*Function used to get all column names from JSON and bind the html table header*/
        var columnSet = [];
        var theadRow = '<tr>';
        for (var i = 0; i < jsonData.length; i++) {
            var rowHash = jsonData[i];
            for (var key in rowHash) {
                if (rowHash.hasOwnProperty(key)) {
                    if ($.inArray(key, columnSet) == -1) {
                        /*Adding each unique column names to a variable array*/
                        columnSet.push(key);
                        if (key != 'latitude') {
                            if (key == 'longitude') {
                                key = 'latitude & longitude';
                            }
                            theadRow += '<th>' + key + '</th>';
                            //theadRow.append($('<th/>').html(key));    
                        }

                    }
                }
            }
        }
        theadRow += "<th></th></tr>";
        //$(tableid + ' thead').append(headerTr$);

        return theadRow;
    }

    validateSiteId(data, index, keyValue) {
        if (data) {
            errorValidationMapObj.set(keyValue, "noErrorFound");
            return data;
        } else {
            console.log("index" + index);
            errorValidationMapObj.set(keyValue, "Error");
            return "<span class='text-danger font-weight-bold'>Required</span>";

        }
    }
    validateSiteName(data, index, keyValue) {
        if (data) {
            errorValidationMapObj.set(keyValue, "noErrorFound");
            return data;
        } else {
            console.log("index" + index);
            errorValidationMapObj.set(keyValue, "Error");
            return "<span class='text-danger font-weight-bold'>Required</span>";

        }
    }
    validateLatLng(rowData, index, keyValue) {
        var latitude = rowData.latitude;
        var longitude = rowData.longitude;

        const latLongPattern = /^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/;
        if (latitude && longitude) {
            if (latLongPattern.test(latitude + ", " + longitude)) {
                errorValidationMapObj.set(keyValue, "noErrorFound");
                return latitude + "," + longitude;
            } else {
                /*errorBucket.push(index);
                var mapObj=new Map();
                mapObj.set("index",index);*/
                errorValidationMapObj.set(keyValue, "Error");
                return "<span class='text-danger font-weight-bold'>invalid LAT-LONG<br><span class='text-dark'>(" + latitude + ", " + longitude + ")</span></span>";
                //errorBucket[index]="invalid LAT-LONG at S.no:"+index;

            }
        } else {
            rowData.latitude = 0;
            rowData.longitude = 0
            return rowData.latitude + "," + rowData.longitude;
        }
    }

    getDynamicTableContent(jsonData) {
        var tableHeadContent = this.bindTableHeader(jsonData);
        var tableBodyContent = this.bindTableBody(jsonData);

        return "<thead>" + tableHeadContent + "</thead>" + "<tbody>" + tableBodyContent + "</tbody>";
    }


    getCustomerDropDown(customerValue, indexValue, keyValue) {
        var warningMessage;
        //errorBucket[indexValue]="select Customer Name from Dropdown List at S.No:"+indexValue;
        var error = true;
        var dropDownArray = getCustomerDropDownList();
        var openSelectTag = '<select class="customerNameDropDown form-control" data-rowIndex="' + indexValue + '" data-colIndex="3" required>';
        var closedSelectTag = '</select>';
        var optionTags = '<option value="" disabled selected>Select CustomerName</option>';
        dropDownArray.forEach(function (customerNameInArray) {
            // console.log(customerNameInArray);
            if (customerNameInArray == customerValue) {
                optionTags += '<option value="' + customerNameInArray + '" selected>' + customerNameInArray + '</option>';
                error = false;
                // errorBucket[indexValue]='';
            } else {
                optionTags += '<option value="' + customerNameInArray + '">' + customerNameInArray + '</option>';
            }
        });
        if (customerValue) {
            if (error) {
                warningMessage = '<span class="text-danger font-weight-bold"> value <span class="text-dark">(' + customerValue + ')</span> is not in dropdown list</span>';
                errorValidationMapObj.set(keyValue, "Error");
            } else {
                errorValidationMapObj.set(keyValue, "noErrorFound");
                warningMessage = '';
            }
        } else { // if empty
            errorValidationMapObj.set(keyValue, "Error");
            warningMessage = '<span class="text-danger font-weight-bold">please select customer from dropdown list</span>';
        }

        return openSelectTag + optionTags + closedSelectTag + warningMessage;
    }
    getCircleDropDown(circleValue, indexValue, keyValue) {
        var warningMessage;
        var error = true;
        // errorBucket[indexValue]="select Circle Name from Dropdown List at S.No:"+indexValue;
        var dropDownArray = getCircleDropDownList();
        var openSelectTag = '<select class="circleDropDown form-control"  data-rowIndex="' + indexValue + '" data-colIndex="4"  required>';
        var closedSelectTag = '</select>';
        var optionTags = '<option class="bg-dark" selected="true" disabled="disabled" value="">Select Circle</option>';
        for (var loopCount = 0; loopCount < dropDownArray.length; loopCount++) {
            if (circleValue == dropDownArray[loopCount]) {
                optionTags += '<option value="' + dropDownArray[loopCount] + '" selected>' + dropDownArray[loopCount] + '</option>';
                error = false;
            } else {
                optionTags += '<option value="' + dropDownArray[loopCount] + '">' + dropDownArray[loopCount] + '</option>';
            }
        }
        if (circleValue) {
            if (error) {
                errorValidationMapObj.set(keyValue, "Error");
                warningMessage = '<span class="text-danger font-weight-bold"> value <span class="text-dark">(' + circleValue + ')</span> is not in dropdown list</span>';
            } else {
                errorValidationMapObj.set(keyValue, "noErrorFound");
                warningMessage = '';
            }
        } else {
            errorValidationMapObj.set(keyValue, "Error");
            warningMessage = '<span class="text-danger font-weight-bold">please select circle from dropdown list</span>';
        }
        return openSelectTag + optionTags + closedSelectTag + warningMessage;
    }


}


// ;;