import document from "document";
import clock from "clock";
import { preferences } from "user-settings";
import { HeartRateSensor } from "heart-rate";
import { vibration } from "haptics";
import { today } from "user-activity";
import { display } from "display";
import * as messaging from "messaging";
import * as fs from "fs";
import * as digits from "../common/digits";

let hrm = new HeartRateSensor;
let hrTimer;

let touchArea = document.getElementById('touchArea');

let settings = {
  colors: ['#843E86', '#00b0a0', 'white'],
  dateReverse: false // US date
};

var storedSettings;
var fileSuccess = true;
console.log('reading settings');
try {
  storedSettings = fs.readFileSync("settings.txt", "cbor");
}
catch(err) {
  fileSuccess = false;
  console.log('settings not found');
}
if (fileSuccess) {
  settings = storedSettings;
}

function updateClock() {
  let currDate = new Date();
  let hours = currDate.getHours();
  let displayHours = hours;
  let day = currDate.getDate();
  let month = currDate.getMonth()+1;
  
  if (preferences.clockDisplay === '12h') {
    displayHours = displayHours % 12;
    displayHours = displayHours ? displayHours : 12;
  }
  
  let minutes = currDate.getMinutes();
  
  let newDigits = [
    Math.floor(displayHours/10),
    displayHours%10,
    Math.floor(minutes/10),
    minutes%10
  ];
  newDigits = [1, 2, 5, 7];
  let dateString;
  if (settings.dateReverse) {
    dateString = month+"/"+day;
  } else {
    dateString = day+"/"+month;
  }
  digits.setSmallDigits('date', dateString, true);
  digits.setDigits([newDigits[0], newDigits[1], newDigits[2], newDigits[3]], settings.colors);
}

hrm.onreading = () => {
  if (display.on) {
    let heartRate = (hrm.heartRate || null);
    digits.setSmallDigits('hr', heartRate, false);
  }
  clearTimeout(hrTimer);
  hrTimer = setTimeout(() => {
    digits.setSmallDigits('hr', null, false);
  }, 5000);
  hrm.stop();
}

function updateSteps() {
  if (display.on) {
    let steps = (today.adjusted.steps || null);
    digits.setSmallDigits('steps', steps, true);
  }
}

function updateHealthDisplay() {
  hrm.start();
  updateSteps();
}

clock.granularity = "minutes";
clock.ontick = () => updateClock();

setInterval(() => {
  updateHealthDisplay();
}, 2000);

updateHealthDisplay();

messaging.peerSocket.onmessage = e => {
  console.log("Message received -> "+e.data.key+": "+e.data.newValue);
  display.poke();
  vibration.start("bump");
  switch (e.data.key) {
    case 'hrcolor':
      settings.colors[0] = e.data.newValue;
      break;
    case 'mincolor':
      settings.colors[1] = e.data.newValue;
      break;
    case 'date':
      settings.dateReverse = e.data.newValue;
      break;
  };
  updateClock();
  
  fs.writeFileSync("settings.txt", settings, "cbor");
}

messaging.peerSocket.onopen = () => {
  console.log("Clockface opened socket");
};

messaging.peerSocket.close = () => {
  console.log("Clockface closed socket");
};

messaging.peerSocket.onerror = (err) => {
  console.log("Clockface socket error: " + err.code + " - " + err.message);
}