#!/usr/bin/env python3
"""
__author__ = "Praveen Kumar Pendyala"
__email__ = "mail@pkp.io"
"""
import logging
import json
import fitbit
import httplib2
from oauth2client.file import Storage
from apiclient.discovery import build


class Helper(object):
	"""Helper methods to hide trivial methods"""

	def __init__(self, fitbitCredsFile, googleCredsFile):
		""" Intialize a helper object.

		fitbitCredsFile -- Fitbit credentials file
		googleCredsFile -- Google Fits credentials file
		"""
		self.fitbitCredsFile = fitbitCredsFile
		self.googleCredsFile = googleCredsFile

	def GetFitbitClient(self):
		"""Returns an authenticated fitbit client object"""
		logging.debug("Creating Fitbit client")
		credentials = json.load(open(self.fitbitCredsFile))  
		client = fitbit.Fitbit(**credentials)
		logging.debug("Fitbit client created")
		return client

	def GetGoogleClient(self):
		"""Returns an authenticated google fit client object"""
		logging.debug("Creating Google client")
		credentials = Storage(self.googleCredsFile).get()
		http = credentials.authorize(httplib2.Http())
		client = build('fitness', 'v1', http=http)
		logging.debug("Google client created")
		return client

	def UpdateFitbitCredentials(self, fitbitClient):
		"""Persists new fitbit credentials to local storage

		fitbitClient -- fitbit client object that contains the latest credentials
		"""
		credentials = json.load(open(self.fitbitCredsFile)) 
		for t in ('access_token', 'refresh_token'):
			credentials[t] = fitbitClient.client.token[t]
		json.dump(credentials, open(self.fitbitCredsFile, 'w'))