#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import time
import urllib
import logging
from util import json
import os
        
class CampcasterApiClient():

    def __init__(self, config):
        self.config = config
        #self.api_auth = api_auth

    def check_version(self):
        version = self.get_campcaster_version()
        if (version == 0):
            print 'Unable to get Campcaster version number.'
            print
            sys.exit()     
        elif (version[0:4] != "1.6."): 
            print 'Campcaster version: ' + str(version)
            print 'pypo not compatible with this version of Campcaster'
            print
            sys.exit()     
        else:
            print 'Campcaster version: ' + str(version)
            print 'pypo is compatible with this version of OBP'
            print

	def get_campcaster_version(self):
		logger = logging.getLogger("ApiClient.get_campcaster_version")
		url = self.config["base_url"] + self.config["api_base"] + self.config["version_url"]
		url = url.replace("%%api_key%%", self.config["api_key"])

		try:
			logger.debug("Trying to contact %s", url)
			response = urllib.urlopen(url)
			data = response.read()
			response_json = json.read(data)
			version = response_json['version']
			logger.debug("Campcaster Version %s detected", version)    
		except Exception, e:
			try:
				if e[1] == 401:
					print '#####################################'
					print '# YOUR API KEY SEEMS TO BE INVALID:'
					print '# ' + self.config["api_key"]
					print '#####################################'
					sys.exit()
			except Exception, e:
				pass

			try:
				if e[1] == 404:
					print '#####################################'
					print '# Unable to contact the OBP-API'
					print '# ' + url
					print '#####################################'
					sys.exit()
			except Exception, e:
				pass

			version = 0
			logger.error("Unable to detect Campcaster Version - %s", e)

        return version


    def update_scheduled_item(self, item_id, value):
        logger = logging.getLogger("ApiClient.update_scheduled_item")
        url = self.api_url + 'schedule/schedule.php?item_id=' + str(item_id) + '&played=' + str(value)
        
        try:
            response = urllib.urlopen(url, self.api_auth)
            response = json.read(response.read())
            logger.info("API-Status %s", response['status'])
            logger.info("API-Message %s", response['message'])
    
        except Exception, e:
            print e
            api_status = False
            logger.critical("Unable to connect - %s", e)
    
        return response


    def update_start_playing(self, playlist_type, export_source, media_id, playlist_id, transmission_id):
        logger = logging.getLogger("ApiClient.update_scheduled_item")
    
        url = self.api_url + 'schedule/update_start_playing.php' \
        + '?playlist_type=' + str(playlist_type) \
        + '&export_source=' + str(export_source) \
        + '&export_source=' + str(export_source) \
        + '&media_id=' + str(media_id) \
        + '&playlist_id=' + str(playlist_id) \
        + '&transmission_id=' + str(transmission_id)
        
        print url
        
        try:
            response = urllib.urlopen(url, self.api_auth)
            response = json.read(response.read())
            logger.info("API-Status %s", response['status'])
            logger.info("API-Message %s", response['message'])
            logger.info("TXT %s", response['str_dls'])
    
        except Exception, e:
            print e
            api_status = False
            logger.critical("Unable to connect - %s", e)
    
        return response
    
    
    def generate_range_dp(self):
        logger = logging.getLogger("ApiClient.generate_range_dp")
    
        url = self.api_url + 'schedule/generate_range_dp.php'
        
        try:
            response = urllib.urlopen(url, self.api_auth)
            response = json.read(response.read())
            logger.debug("Trying to contact %s", url)
            logger.info("API-Status %s", response['status'])
            logger.info("API-Message %s", response['message'])
    
        except Exception, e:
            print e
            api_status = False
            logger.critical("Unable to handle the request - %s", e)
            
        return response