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


function switch_home(bool) {
  var response;
  sid="";
  console.log('---- authenticate');
  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());
    }
  }
 

}


// 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.');
}
  
});
/*
// Get Configuration page 
Pebble.addEventListener('showConfiguration', function() {
  var username=localStorage.getItem('username');
  var password=localStorage.getItem('password');
  var server=localStorage.getItem('server');
  var  url = 'https://jonget.fr/pebble/config_homeswitch.php?username='+username+'&password='+password+'&server='+server;
  
  Pebble.openURL(url);
});

Pebble.addEventListener('webviewclosed', function(e) {
  // Decode the user's preferences
  var configData = JSON.parse(decodeURIComponent(e.response));
  localStorage.setItem('username',configData.username);
  localStorage.setItem('password',configData.password);
  localStorage.setItem('server',configData.server);
  console.log('---- new username stored : '+localStorage.getItem('username'));
  console.log('---- new password stored : '+localStorage.getItem('password'));
  console.log('---- new server stored : '+localStorage.getItem('server'));
  var dict = {
    'username': configData.username,
    'password': configData.password,
    'server': configData.server
  };
            
  // Send the message
  Pebble.sendAppMessage(dict, function(e) {
    console.log('sent');
  }, function() {
    console.log('failed');
  }); 
});*/