/**
 * Created by shadeeka on 12/4/15.
 */
// =========================================================================
// Spark Data Service
// =========================================================================
angular.module('app.services')
  .factory('sparkDataService', ['$log', '$timeout', '$q', '$http', 'dataPersistenceService', 'propertyCache', 'eventProtocol', '$rootScope', 'imgSync', function ($log, $timeout, $q, $http, dataPersistenceService, propertyCache, eventProtocol, $rootScope, imgSync) {

    this.cache;

    var currentDate = "";

    return {

      sendDataToServer: function (event) {

        if (propertyCache.factoryConfigs.count_track_mac_address != undefined && propertyCache.factoryConfigs.count_track_mac_address) {
          if (event.name == "ftt" || event.name == "defects" || event.name == "rwtogood" || event.name == "reject" || event.name == "styles" || event.name == "members" || event.name == "operations") {
            //setting up mac address
            event.data.macAddress = propertyCache.macAddress;
          }
        }


        var dataapipr = this.save(event);
        dataapipr.then(function (result) {
          console.log("Success Result ---> " + result);
          if (result.status != '201' && result.statusText != 'Created') {
            console.log("Inserted into Network Faliure even if Success ! " + result.status + " " + result.statusText);
            event.status = 'PENDING';
            dataPersistenceService.insertNetworkFailureData(event);

            var netdatapr = dataPersistenceService.selectNetworkFaliure();
            netdatapr.then(function (result) {
              console.log("Data Row Count ----> " + result.rows.length);
              /*for (var i = 0; i < result.rows.length; i++) {
               console.log(result.rows.item(i).Date + " " + result.rows.item(i).Type + " " + result.rows.item(i).Data);
               }*/

            })
          }
        }, function (result) {
          //console.log("Error Result---> " + result);
          //console.log("Inserted into Network Faliure When Result Failure !");
          event.status = 'PENDING';
          dataPersistenceService.insertNetworkFailureData(event);
          var netdatapr = dataPersistenceService.selectNetworkFaliure();
          netdatapr.then(function (result) {
            console.log("Data Row Count ----> " + result.rows.length);
            /*for (i = 0; i < result.rows.length; i++) {
             $log.debug(result.rows.item(i).Date + " " + result.rows.item(i).Type + " " + result.rows.item(i).Data);
             }*/

          })
        });
      },

      //send to server
      save: function (eventData) {
        var deferred = $q.defer();
        $log.debug("sparkDataService : save");
        var self = this;
        //$log.debug("Json data ---> " + eventData.data);
        //$log.debug("Cache ---> ", propertyCache.config);
        $http.post('http://' + propertyCache.config.dataIp + '/' + eventData.endPoint + '/' + eventData.name, eventData.data).then(function (resp) {
          // $log.debug('Success', resp);
          deferred.resolve(resp);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },

      //send to server
      syncSendRecords: function (eventData) {
        var deferred = $q.defer();
        $log.debug("sparkDataService : save");
        var self = this;
        //$log.debug("Cache ---> ", propertyCache.config);
        $http.post('http://' + propertyCache.config.dataIp + '/' + eventData.endPoint + '/' + eventData.name, eventData.data).then(function (resp) {
          //$log.debug('Success', resp);
          deferred.resolve(eventData);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(eventData);
        })

        return deferred.promise;
      },

      syncAuthentication: function () {
        var deferred = $q.defer();
        if (localStorage.getItem("isAuthenicationAvailable") == undefined) {
          localStorage.setItem("isAuthenicationAvailable", false)
        }
        if ((localStorage.getItem("isAuthenicationAvailable") == "false")) {


          $log.debug("sparkDataService : Sync Authentication");

          var self = this;

          $log.debug("Property cache --> ", propertyCache.config);

          $http.get('http://' + propertyCache.config.syncIp + '/dataman/getprofiles?role=qc-user&tenant=' + propertyCache.config.tenant + '&factory=' + propertyCache.config.factory).then(function (response) {
            $log.debug("Sync Auth response----> " + response);
            dataPersistenceService.removeAllAuthentication().then(function (result) {
              var dbUsers = response['data'];
              localStorage.setItem("isAuthenicationAvailable", true)
              angular.forEach(dbUsers, function (dbUser, key) {
                var user = new Object();
                user.username = dbUser['username'];
                user.password = dbUser['password'];
                dataPersistenceService.saveAuthentication(user);
              })
            });
            deferred.resolve(response);

          }, function (err) {
            $log.debug('ERR', err);
            deferred.reject(err);
          });

        }
        return deferred.promise;
      },

      getSessionPlans: function () {
        var deferred = $q.defer();

        $log.debug("sparkDataService : Sync Session Plans");

        var self = this;
        var line = "";
        if (propertyCache.config.lineWithOutStation != undefined && propertyCache.config.lineWithOutStation != "") {
          line = propertyCache.config.lineWithOutStation;
        } else {
          line = propertyCache.config.line;
        }
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/plannames?factory=' + propertyCache.config.factory + '&module=' + line + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          var home = response['data'];
          angular.forEach(home, function (object, key) {
            var plns = object.plans;
            for (var i = 0; i < plns.length; i++) {
              var data = new Object();
              data.name = plns[i];
              data.time = "";
              dataPersistenceService.saveSessionPlanNames(data).then(function (result) {
                dataPersistenceService.selectSessionPlanNames().then(function (res) {
                  self.sessionsPlans = [];
                  for (var i = 0; i < res.rows.length; i++) {
                    self.sessionsPlans.push(res.rows.item(i).Name);
                  }
                  propertyCache.plans.sessionsPlans = self.sessionsPlans;
                });
              });
            }
          })

          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })
        return deferred.promise;
      },

      tabChangeSync: function () {
        var _self = this;
        var deferred = $q.defer();
        this.syncDailyCounts().then(function (result) {
          deferred.resolve(result);
          $log.debug("Success Sync ", result);
        }, function (err) {
          deferred.reject(err);
          $log.debug("Err0r Sync ", err);
        });


        return deferred.promise;
      },

      syncDailyCounts: function () {
        $log.debug("calling the syncDailyCounts !");
        var self = this;

        var deferred = $q.defer();
        var macAdd = "";
        if (propertyCache.factoryConfigs.count_track_mac_address != undefined && propertyCache.factoryConfigs.count_track_mac_address) {
          macAdd = propertyCache.macAddress;
        }

        var url = "";
        if (propertyCache.factoryConfigs.show_style_info_bar == "true") {
          url = 'http://' + propertyCache.config.syncIp + '/dataman/synchronize?date=' + self.getFormattedDate() + '&factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant + '&macAddress=' + macAdd + '&stylewise=' + true;
        } else {
          url = 'http://' + propertyCache.config.syncIp + '/dataman/synchronize?date=' + self.getFormattedDate() + '&factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant + '&macAddress=' + macAdd + '&stylewise=' + false;
        }

        $http.get(url).then(function (response) {

          // have to refactor

          $log.debug("calling the sync !");

          var val = response['data'];

          if (propertyCache.factoryConfigs.show_style_info_bar == "true") {

            if (val.fttCount != null)
              for (var i = 0; i < val.fttCount.length; i++) {
                var obj = val.fttCount[i];

                var event = new Object();
                event.date = self.getFormattedDate();
                event.name = 'ftt';
                event.data = {};
                event.data.style = obj.style;
                event.data.so = obj.so;
                event.data.li = obj.li;
                event.data.value = obj.fttCount;
                event.count = obj.fttCount;
                dataPersistenceService.syncStyleSoLiWiseCountPreProcess(event);

              }

            if (val.defectCount != null)
              for (var i = 0; i < val.defectCount.length; i++) {
                var obj = val.defectCount[i];

                var event = new Object();
                event.date = self.getFormattedDate();
                event.name = 'defects';
                event.data = {};
                event.data.style = obj.style;
                event.data.so = obj.so;
                event.data.li = obj.li;
                event.data.value = obj.defectCount;
                event.count = obj.defectCount;
                dataPersistenceService.syncStyleSoLiWiseCountPreProcess(event);

              }

            if (val.reworkCount != null)
              for (var i = 0; i < val.reworkCount.length; i++) {
                var obj = val.reworkCount[i];

                var event = new Object();
                event.date = self.getFormattedDate();
                event.name = 'rwtogood';
                event.data = {};
                event.data.style = obj.style;
                event.data.so = obj.so;
                event.data.li = obj.li;
                event.data.value = obj.reworkCount;
                event.count = obj.reworkCount;
                dataPersistenceService.syncStyleSoLiWiseCountPreProcess(event);

              }

            if (val.rejectCount != null)
              for (var i = 0; i < val.rejectCount.length; i++) {
                var obj = val.rejectCount[i];

                var event = new Object();
                event.date = self.getFormattedDate();
                event.name = 'reject';
                event.data = {};
                event.data.style = obj.style;
                event.data.so = obj.so;
                event.data.li = obj.li;
                event.data.value = obj.rejectCount;
                event.count = obj.rejectCount;
                dataPersistenceService.syncStyleSoLiWiseCountPreProcess(event);

              }

            $rootScope.$broadcast("update-style-info");

          } else {

            var event = new Object();
            event.date = self.getFormattedDate();
            event.name = 'ftt';
            event.count = val['fttCount'];
            event.data = {};
            event.data.style = "";
            event.data.so = "";
            event.data.li = "";
            event.data.value = val['fttCount'];
            dataPersistenceService.syncCountPreProcess(data);

            var event = new Object();
            event.date = self.getFormattedDate();
            event.name = 'defects';
            event.count = val['defectCount'];
            event.data = {};
            event.data.style = "";
            event.data.so = "";
            event.data.li = "";
            event.data.value = val['defectCount'];
            dataPersistenceService.syncCountPreProcess(event);

            var event = new Object();
            event.name = 'rwtogood';
            event.date = self.getFormattedDate();
            event.count = val['reworkCount'];
            event.data = {};
            event.data.style = "";
            event.data.so = "";
            event.data.li = "";
            event.data.value = val['reworkCount'];
            dataPersistenceService.syncCountPreProcess(event);

            var event = new Object();
            event.name = 'reject';
            event.count = val['rejectCount'];
            event.date = self.getFormattedDate();
            event.data = {};
            event.data.style = "";
            event.data.so = "";
            event.data.li = "";
            event.data.value = val['rejectCount'];
            dataPersistenceService.syncCountPreProcess(event);

          }

          ///////// day start data synchronization /////////////////////////

          var data = new Object();
          data.key = 'sessionPlan';
          data.value = val['sessionplanname'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'style';
          data.value = val['style'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'members';
          data.value = val['members'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'key1';
          data.value = val['key1'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }


          var data = new Object();
          data.key = 'key2';
          data.value = val['key2'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'siluhoutteid';
          data.value = val['siluhoutteid'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'operators';
          data.value = val['operators'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'helpers';
          data.value = val['helpers'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'categoryId';
          data.value = val['categoryId'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'buyerId';
          data.value = val['buyerId'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          var data = new Object();
          data.key = 'sizeId';
          data.value = val['sizeId'];
          data.date = self.getFormattedDate();
          if (data.value != null) {
            dataPersistenceService.insertDayStart(data);
          }

          if (val['style'] != null && val['style'] != undefined) {
            propertyCache.updateDayStartStyle(val['style']);
          }

          //////////////////////////////////////////////////////////

          $rootScope.$broadcast("modelCountUpdate", {type: "sync"});

          deferred.resolve(response);
          //dataPersistenceService.saveAuthentication();
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })
        return deferred.promise;
      },

      unreworkedDefectSync: function () {
        var deferred = $q.defer();

        $log.debug("sparkDataService : Sync Session Plans");

        var self = this;

        var macAdd = "";
        if (propertyCache.factoryConfigs.count_track_mac_address != undefined && propertyCache.factoryConfigs.count_track_mac_address) {
          macAdd = propertyCache.macAddress;
        }

        var url = "";
        if (propertyCache.factoryConfigs.show_style_info_bar == "true") {
          url = 'http://' + propertyCache.config.syncIp + '/dataman/unrwkdefects?date=' + self.getFormattedDate() + '&factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant + '&macAddress=' + macAdd + '&stylewise=' + true;
        } else {
          url = 'http://' + propertyCache.config.syncIp + '/dataman/unrwkdefects?date=' + self.getFormattedDate() + '&factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant + '&macAddress=' + macAdd + '&stylewise=' + false;
        }


        $http.get(url).then(function (response) {
          //$log.debug("Sync Session Plans response----> "+ this.response);


          dataPersistenceService.removeAllDefectCategories().then(function (result) {
            var home = response['data'];


            if (propertyCache.factoryConfigs.show_style_info_bar == "true") {

              angular.forEach(home, function (object, key) {
                angular.forEach(object, function (ob, styleKey) {
                  var ar = [];
                  ar = styleKey.split("@");
                  var categoryData = new Object();
                  categoryData.date = self.getFormattedDate();
                  categoryData.style = ar[0];
                  categoryData.so = ar[1];
                  categoryData.li = ar[2];

                  for (var i = 0; i < ob.length; i++) {
                    var defects = [];
                    defects.push(ob[i]);
                    categoryData.defect = defects;
                    if (defects.length > 0) {
                      dataPersistenceService.insertDefectCategory(categoryData);
                    }
                  }

                })

              })

            } else {
              angular.forEach(home, function (object, key) {
                var categoryData = new Object();
                categoryData.date = self.getFormattedDate();
                var defects = [];
                for (var i = 0; i < object.length; i++) {
                  defects.push(object[i]);
                }
                categoryData.defect = defects;
                dataPersistenceService.insertDefectCategory(categoryData);
              })
            }


          });
          deferred.resolve(response);
          //dataPersistenceService.saveAuthentication();
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        });
        return deferred.promise;
      },


      getSiluhoutteNames: function () {
        var deferred = $q.defer();

        $log.debug("sparkDataService : Siluhoutte Names");

        var self = this;
        var line = "";
        if (propertyCache.config.lineWithOutStation != undefined && propertyCache.config.lineWithOutStation != "") {
          line = propertyCache.config.lineWithOutStation;
        } else {
          line = propertyCache.config.line;
        }

        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getsiluhouttes?factory=' + propertyCache.config.factory +
          '&line=' + line + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          $log.debug("Siluhouttes-----------------> ", response);
          var data = response['data'];
          if(data.length > 0){
            propertyCache.siluhouttes.silihoutteNames = data;
            $rootScope.$broadcast("silhoutte-update-popup");
          }
          dataPersistenceService.removeSiluhoutte().then(function (response) {
            for (var i = 0; i < data.length; i++) {
              dataPersistenceService.insertSiluhoutte(data[i]).then(function (result) {
                dataPersistenceService.selectSiluhouttes().then(function (result) {
                  self.siluhouttes = [];
                  for (var i = 0; i < result.rows.length; i++) {
                    self.siluhouttes.push(result.rows.item(i).Name);
                  }
                  propertyCache.siluhouttes.silihoutteNames = self.siluhouttes;
                  //$log.debug("Siluhouttes selected from db ------> ", propertyCache.siluhouttes.silihoutteNames);
                })
              })
            }
          }, function (err) {
            for (var i = 0; i < data.length; i++) {
              dataPersistenceService.insertSiluhoutte(data[i]).then(function (result) {
                dataPersistenceService.selectSiluhouttes().then(function (result) {
                  self.siluhouttes = [];
                  for (var i = 0; i < result.rows.length; i++) {
                    self.siluhouttes.push(result.rows.item(i).Name);
                  }
                  propertyCache.siluhouttes.silihoutteNames = self.siluhouttes;
                  //$log.debug("Siluhouttes selected from db ------> ", propertyCache.siluhouttes.silihoutteNames);
                })
              })
            }
          })
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },


      getStyles: function () {
        var deferred = $q.defer();

        $log.debug("sparkDataService : Style Names");

        var self = this;
        var line = "";
        if (propertyCache.config.lineWithOutStation != undefined && propertyCache.config.lineWithOutStation != "") {
          line = propertyCache.config.lineWithOutStation;
        } else {
          line = propertyCache.config.line;
        }

        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getstylenamesforfivedays?factory=' + propertyCache.config.factory + '&line=' + line +
          '&tenant=' + propertyCache.config.tenant + '&date=' + self.getFormattedCurrentDateDash()).then(function (response) {

          $log.debug("Styles-----------------> ", response);
          var data = [];
          data = response['data'];

          self.styles = [];
          self.pos = [];
          self.colours = [];

          if (data.length) {
            dataPersistenceService.removeStyles_Po_Colour().then(function (response) {
                for (var i = 0; i < data.length; i++) {
                  var list = data[i];
                  var event = new Object();
                  event.style = list[0];
                  event.po = list[1];
                  event.colour = list[2];

                  if($.inArray(list[0], self.styles) == -1){
                     self.styles.push(list[0]);
                  }

                  dataPersistenceService.addStyles_Po_Colour(event).then(function (result) {
                    //dataPersistenceService.selectAllFromStyles_po_colours().then(function (result) {
                    //  self.styles = [];
                    //  self.pos = [];
                    //  self.colours = [];
                    //  //$log.debug("Fetched item from the db ",result.rows);
                    //  for (var i = 0; i < result.rows.length; i++) {
                    //    if($.inArray(result.rows.item(i).Style, self.styles) == -1){
                    //      self.styles.push(result.rows.item(i).Style);
                    //    }
                    //
                    //    if($.inArray(result.rows.item(i).Po, self.pos) == -1){
                    //      self.pos.push(result.rows.item(i).Po);
                    //    }
                    //
                    //    if($.inArray(result.rows.item(i).Colour, self.colours) == -1){
                    //      self.colours.push(result.rows.item(i).Colour);
                    //    }
                    //  }
                    //  propertyCache.planedStyles.styleNames = self.styles;
                    //  propertyCache.pos.poNames = self.pos;
                    //  propertyCache.colours.colorCodes = self.colours;
                    //  $log.debug("Property cache set ---------> ", propertyCache.planedStyles.styleNames);
                    //  $log.debug("Property cache set ---------> ", propertyCache.planedStyles);
                    //
                    //})
                  })
                }

                propertyCache.planedStyles.styleNames = self.styles;
                propertyCache.pos.poNames = self.pos;
                propertyCache.colours.colorCodes = self.colours;

                $rootScope.$broadcast("update-popups");

                deferred.resolve(response);
              }, function (err) {
                for (var i = 0; i < data.length; i++) {
                  var list = data[i];
                  var event = new Object();
                  event.style = list[0];
                  event.po = list[1];
                  event.colour = list[2];

                  //self.styles.push(list[0]);
                  //self.pos.push(list[1]);
                  //self.colours.push(list[2]);


                  dataPersistenceService.addStyles_Po_Colour(event).then(function (result) {
                    //dataPersistenceService.selectAllFromStyles_po_colours().then(function (result) {
                    //  self.styles = [];
                    //  self.pos = [];
                    //  self.colours = [];
                    //  for (var i = 0; i < result.rows.length; i++) {
                    //    if($.inArray(result.rows.item(i).Style, self.styles) == -1){
                    //      self.styles.push(result.rows.item(i).Style);
                    //    }
                    //
                    //    if($.inArray(result.rows.item(i).Po, self.pos) == -1){
                    //      self.pos.push(result.rows.item(i).Po);
                    //    }
                    //
                    //    if($.inArray(result.rows.item(i).Colour, self.colours) == -1){
                    //      self.colours.push(result.rows.item(i).Colour);
                    //    }
                    //  }
                    //  propertyCache.planedStyles.styleNames = self.styles;
                    //  propertyCache.pos.poNames = self.pos;
                    //  propertyCache.colours.colorCodes = self.colours;
                    //})
                  })
                }
                deferred.resolve(err);
              }
            )
          }

        }, function (err) {
          $log.debug('Error in getting the Style names ', err);
          deferred.reject(err);
        })

        return deferred.promise;
      }, getLineQualityReport: function (line) {
        var self = this;
        console.log("calling getLineQualityReport ");
        var startDate = new Date();
        var deferred = $q.defer();
        var d = new Date();
        var month = '' + (d.getMonth() + 1);
        var day = '' + d.getDate();
        var year = d.getFullYear();
        if (month.length < 2)
          month = '0' + month;
        if (day.length < 2)
          day = '0' + day;
        var currentDate = year + "." + month + "." + day;
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getLineQualityReport?date=' + currentDate + '&factory='
          + propertyCache.config.factory + '&line=' + line + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          console.log("Sync Auth response----> " + response);
          dataPersistenceService.removeAllSummery().then(function (result) {
            var summeryData = response['data'];
            if (summeryData.length > 0) {
              for (var i = 0; i < summeryData.length; i++) {
                console.debug('summeryData', summeryData[i]);

                var eventToSendSummery = new Object();
                eventToSendSummery.line_id = summeryData[i].line_id;
                eventToSendSummery.style = summeryData[i].style;
                eventToSendSummery.po = summeryData[i].so;
                eventToSendSummery.color = summeryData[i].li;
                eventToSendSummery.station = summeryData[i].station;
                eventToSendSummery.hour = dataPersistenceService.getHourByEpoch(summeryData[i].datetime);
                eventToSendSummery.epoch = summeryData[i].datetime;
                if (summeryData[i].data_type == "ftt") {
                  eventToSendSummery.fttPcs = summeryData[i].value;
                  eventToSendSummery.defectPcs = 0;
                  eventToSendSummery.defectivePcs = 0;
                  eventToSendSummery.rectifiedPcs = 0;
                  eventToSendSummery.rejectPcs = 0;
                  eventToSendSummery.defectIssue = "";
                  eventToSendSummery.defectOperation = "";
                } else if (summeryData[i].data_type == "defects") {
                  eventToSendSummery.fttPcs = 0;
                  eventToSendSummery.defectPcs = summeryData[i].defects;
                  eventToSendSummery.defectivePcs = summeryData[i].value;
                  eventToSendSummery.rectifiedPcs = 0;
                  eventToSendSummery.rejectPcs = 0;
                  var issues = summeryData[i].issues;
                  var operation = summeryData[i].operation;
                  eventToSendSummery.defectIssue = JSON.stringify(issues);
                  eventToSendSummery.defectOperation = operation;
                } else if (summeryData[i].data_type == "rwtogood") {
                  eventToSendSummery.fttPcs = 0;
                  eventToSendSummery.defectPcs = 0;
                  eventToSendSummery.defectivePcs = 0;
                  eventToSendSummery.rectifiedPcs = summeryData[i].value;
                  eventToSendSummery.rejectPcs = 0;
                  eventToSendSummery.defectIssue = "";
                  eventToSendSummery.defectOperation = "";
                } else if (summeryData[i].data_type == "reject") {
                  eventToSendSummery.fttPcs = 0;
                  eventToSendSummery.defectPcs = 0;
                  eventToSendSummery.defectivePcs = 0;
                  eventToSendSummery.rectifiedPcs = 0;
                  eventToSendSummery.rejectPcs = summeryData[i].value;
                  eventToSendSummery.defectIssue = "";
                  eventToSendSummery.defectOperation = "";
                }
                dataPersistenceService.insertSummery(eventToSendSummery);
              }
            }
            deferred.resolve(response);
          });
        }, function (err) {
          console.error('ERR', err);
          deferred.reject(err);
        });
        return deferred.promise;
      },
      loadSessionDetail: function (sessionPlanName) {
        var deferred = $q.defer();
        $log.info("getting loadSessionDetail data from server  ");
        var factory = propertyCache.config.factory;
        var tenant = propertyCache.config.tenant;
        var url = 'http://' + propertyCache.config.syncIp +
          '/dataman/getsessiondetailsinfo?tenant=' + tenant + '&factory=' + factory + '&sessionPlanName=' + sessionPlanName;
        $http.get(url).then(function (response) {
          console.log("get plan data from server ----> " + response);
          deferred.resolve(response);
          var dataServer = response["data"];
          if (dataServer != "") {
            propertyCache.day_start["sessionPlanDetail"] = angular.extend(dataServer.sessionPlanDetail);
          }
        }, function (err) {
          console.log('ERR', err);
          deferred.reject(err);
        })
      },


      getOperationsForStyles: function (style) {
        var deferred = $q.defer();
        $log.debug("sparkDataService : Siluhoutte Names");

        var self = this;
        if (style == undefined) {
          style = propertyCache.day_start.style;
        }

        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getoperationslist?factory=' + propertyCache.config.factory + '&style=' + style + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          $log.debug("Operations List ", response);
          dataPersistenceService.removeStyleOperation().then(function (res) {
            $log.debug("Removed rows ------> " + res.rows.length);
            var data = response['data'];
            //$log.debug("OPerations Data ----------> ",data);
            for (var i = 0; i < data.length; i++) {
              var op = data[i];
              //$log.debug("OPerstion ----------> ",op);
              var style = "";
              for (var j = 0; j < op.length; j++) {

                if (op[j].style != null) {
                  //$log.debug("OPerstion ----------> ",op[j].style);
                  style = op[j].style;
                } else {
                  //$log.debug("OPerstion ----------> ",op[j]);
                  var eventToSend = new Object();
                  eventToSend.style = style;
                  eventToSend.operation = JSON.stringify(op[j]);

                  dataPersistenceService.insertStyleOperation(eventToSend);
                }
              }
            }
          }, function (err) {

            $log.debug("No OPerations to remove !");
          })
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },
      getIssuesList: function () {
        var deferred = $q.defer();
        $log.debug("sparkDataService : getIssuesList");
        var self = this;
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getissuelist?factory=' + propertyCache.config.factory + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          $log.debug("Issue List ", response);
          dataPersistenceService.removeIssueList().then(function (res) {
            $log.debug("Removed rows ------> " + res.rows.length);
            var data = response['data'];
            var eventToSend = new Object();
            eventToSend.issueName = JSON.stringify(data);
            dataPersistenceService.insertIssue(eventToSend);
          }, function (err) {
            $log.debug("No Issue list to remove !");
          })
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },
      getRejectList: function () {
        var deferred = $q.defer();
        $log.debug("sparkDataService : getRejectList");
        var self = this;
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getrejectlist?factory=' + propertyCache.config.factory + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          $log.debug("Issue List ", response);
          dataPersistenceService.removeRejectList().then(function (res) {
            $log.debug("Removed rows ------> " + res.rows.length);
            var data = response['data'];
            var eventToSend = new Object();
            eventToSend.rejectName = JSON.stringify(data);
            dataPersistenceService.insertReject(eventToSend);
          }, function (err) {
            $log.debug("No Reject list to remove !");
          })
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },

      getAppConfig: function () {
        var deferred = $q.defer();
        $log.debug("sparkDataService : get app config");
        var self = this;
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getlineconfig?factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        });
        return deferred.promise;
      },

      sendAppConfig: function (pcb, efficiency, quality, notification) {
        var deferred = $q.defer();
        $log.debug("sparkDataService : set app config");
        var self = this;
        $http.post('http://' + propertyCache.config.syncIp + '/dataman/updateconfigdata?factory=' + propertyCache.config.factory + '&line=' + propertyCache.config.line + '&tenant=' + propertyCache.config.tenant + '&pcb=' + pcb + '&efficiency=' + efficiency + '&quality=' + quality + '&notification=' + notification).then(function (response) {
          deferred.resolve(response);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        });
        return deferred.promise;
      },

      getBuyerWiseSizeList: function () {
        var deferred = $q.defer();
        $log.debug("sparkDataService : getBuyerWiseSizeList");
        var self = this;
        $http.get('http://' + propertyCache.config.syncIp + '/dataman/getsizelist?factory=' + propertyCache.config.factory + '&tenant=' + propertyCache.config.tenant).then(function (response) {
          console.log("getBuyerWiseSizeList ", response);
          dataPersistenceService.removeBuyerWiseSizeList().then(function (res) {
            console.log("Removed rows ------> " + res.rows.length);
            var data = response['data'];
            for (var i = 0; i < data.length; i++) {
              var eventToSend = new Object();
              eventToSend.SizeName = JSON.stringify(data[i]);
              dataPersistenceService.insertBuyerWiseSizeList(eventToSend);
            }
          }, function (err) {
            console.log("No getBuyerWiseSizeList to remove !");
          });
          deferred.resolve(response);
        }, function (err) {
          console.log('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },

      sendUpdateAcknowledgement: function () {
        var deferred = $q.defer();
        $log.debug("sparkDataService : sendUpdateAcknowledgement");

        $http.get('http://' + propertyCache.config.syncIp + '/deploy/ack?tenant=' + propertyCache.config.tenant + '&factory=' + propertyCache.config.factory + '&cluster=' + propertyCache.config.cluster + '&module_id=' + propertyCache.config.line + '&license=' + propertyCache.config.license + '&mac=' + propertyCache.macAddress + '&ipAddress=' + propertyCache.ipAddress + '&user=' + propertyCache.currentUser + '&version=' + configData.version + '&datetime=' + new Date().getTime() + "&appType=" + configData.appType).then(function (resp) {
          $log.debug('Ack Success !', resp);
          deferred.resolve(resp);
        }, function (err) {
          $log.debug('ERR', err);
          deferred.reject(err);
        })

        return deferred.promise;
      },

      //get data from server
      get: function (query) {
        $log.debug("sparkDataService : get", query);
      },

      getFormattedDate: function () {

        var d = new Date();
        var month = '' + (d.getMonth() + 1);
        var day = '' + d.getDate();
        var year = d.getFullYear();

        if (month.length < 2)
          month = '0' + month;
        if (day.length < 2)
          day = '0' + day;
        currentDate = [year, month, day].join('.');
        return [year, month, day].join('.');
      },
      getFormattedCurrentDate: function () {
        //
        //if (currentDate != "")
        //  return currentDate;

        var d = new Date();
        var month = '' + (d.getMonth() + 1);
        var day = '' + d.getDate();
        var year = d.getFullYear();

        if (month.length < 2)
          month = '0' + month;
        if (day.length < 2)
          day = '0' + day;
        currentDate = [year, month, day].join('.');
        return [year, month, day].join('.');
      },
      getFormattedCurrentDateDash: function () {
        //
        //if (currentDate != "")
        //  return currentDate;

        var d = new Date();
        var month = '' + (d.getMonth() + 1);
        var day = '' + d.getDate();
        var year = d.getFullYear();

        if (month.length < 2)
          month = '0' + month;
        if (day.length < 2)
          day = '0' + day;
        currentDate = [year, month, day].join('-');
        return [year, month, day].join('-');
      }


    };
  }]);
