var Clay = require('pebble-clay');
var clayConfig = require('./config');
var clay = new Clay(clayConfig);

var sid;
var status;

function get_status() {
  var response;
  sid="";
  console.log('---- authenticate');
  if (localStorage.getItem('username')  && localStorage.getItem('password') && localStorage.getItem('server') ){
    var username=localStorage.getItem('username');
    var password=localStorage.getItem('password');
    var server=localStorage.getItem('server');
    var url = server + "/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account="+username+"&passwd="+password+"&session=SurveillanceStation&format=sid";
    var xhr = new XMLHttpRequest();
  
    xhr.open("GET", url,false);
    xhr.send();

    if(xhr.status == 200) {
      response = JSON.parse(xhr.responseText);
      if (response.success == true){
        sid = response.data.sid;
      }
    }else {
      console.log('------Request returned error code ' + xhr.status.toString());
    }
  
    if (sid != ""){
      status = "";
      console.log('---- get_status');
      url = server + "/webapi/entry.cgi?api=SYNO.SurveillanceStation.HomeMode&version=1&method=GetInfo&_sid="+sid;
      
      xhr.open("GET", url,false);
      xhr.send();
  
      if(xhr.status == 200) {
        response = JSON.parse(xhr.responseText);
        if (response.success == true){
          status=response.data.on;   
          var message;
          switch (status) {
            case true:
              message = "Your Home mode is ON";
              break;
            case false:
              message = "Your Home mode is OFF";
              break;
            default:
              message = "home mode is unknown !";
          }      
          // Build message
          var dict = {
            'status': message,
          };
        
          // Send the message
          Pebble.sendAppMessage(dict, function(e) {
            console.log('sent');
          }, function() {
            console.log('failed');
          });
        }
      }else {
        console.log('------Request returned error code ' + xhr.status.toString());
      }
    }
      
  }else{
    Pebble.showSimpleNotificationOnPebble("DSCam H-S", "You need to set your Synology account and server.");
  }
}


function switch_home(bool) {
  var response;
  sid="";
  console.log('---- authenticate');
  if (localStorage.getItem('username')  && localStorage.getItem('password') && localStorage.getItem('server') ){
    var username=localStorage.getItem('username');
    var password=localStorage.getItem('password');
    var server=localStorage.getItem('server');
    var url = server + "/webapi/auth.cgi?api=SYNO.API.Auth&method=Login&version=2&account="+username+"&passwd="+password+"&session=SurveillanceStation&format=sid";
    var xhr = new XMLHttpRequest();
  
    xhr.open("GET", url,false);
    xhr.send();
  
    if(xhr.status == 200) {
      response = JSON.parse(xhr.responseText);
      if (response.success == true){
        sid = response.data.sid;
        console.log('------ sid = '+sid);
      }
    }else {
      console.log('------Request returned error code ' + xhr.status.toString());
    }
  
    if (sid != ""){
      status = "";
      console.log('---- get_status');
      url = server + "/webapi/entry.cgi?api=SYNO.SurveillanceStation.HomeMode&version=1&method=GetInfo&_sid="+sid;
      
      xhr.open("GET", url,false);
      xhr.send();
  
      if(xhr.status == 200) {
        response = JSON.parse(xhr.responseText);
        if (response.success == true){
          status=response.data.on;   
          console.log('------ status:'+status);
          var message;
          var dict;
          if ( status != bool){
            console.log('---- switching home mode to '+ bool);
            url = server + "/webapi/entry.cgi?api=SYNO.SurveillanceStation.HomeMode&version=1&method=Switch&on="+bool+"&_sid="+sid;
            
            xhr.open("GET", url,false);
            xhr.send();
        
            if(xhr.status == 200) {
              response = JSON.parse(xhr.responseText);
              if (response.success == true){
                status=bool;
                switch (status) {
                  case true:
                    message = "You just set Home mode ON";
                    break;
                  case false:
                    message = "You just set Home mode OFF";
                    break;
                  default:
                    message = "something happened, try again !";
                }      
                // Build message
                dict = {
                  'status': message,
                };
              
                // Send the message
                Pebble.sendAppMessage(dict, function(e) {
                  console.log('sent');
                }, function() {
                  console.log('failed');
                });
              }
            }else {
              console.log('------Request returned error code ' + xhr.status.toString());
            }
          }else{
            console.log('---- nothign to do, status already '+status);
            switch (status) {
              case true:
                message = "Your Home Mode is already ON";
                break;
              case false:
                message = "Your Home Mode is already OFF";
                break;
              default:
                message = "something happened, try again !";
            }       
            // Build message
            dict = {
              'status': message,
            };
  
            // Send the message
            Pebble.sendAppMessage(dict, function(e) {
              console.log('sent');
            }, function() {
              console.log('failed');
            }); 
          }
        }
      }else {
        console.log('------Request returned error code ' + xhr.status.toString());
      }
    }
   }else{
    Pebble.showSimpleNotificationOnPebble("DSCam H-S", "You need to set your Synology account and server.");
  }

}

// Get JS readiness events
Pebble.addEventListener('ready',function(e){
  console.log('PebbleKit JS is ready');
  // Update Watch on this
  Pebble.sendAppMessage({'JSReady':1});
});

// Get AppMessage events
Pebble.addEventListener('appmessage', function(e) {
  // Get the dictionary from the message
  var dict = e.payload;
  
  switch (dict[0]) {
    case 'get':
      get_status();
      break;
    case 'home_on':
      switch_home(true);
      break;
    case 'home_off':
      switch_home(false);
      break;
    default:
      console.log('Sorry.');
}
  
});