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

# Author: Pablo Abelenda
# Contact: pablo.abelenda@interoud.com
#
# Maintainer: Pablo Saavedra
# Contact: pablo.saavedra@interoud.com

import os
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

from httplib2 import Http
from urllib import urlencode
from optparse import OptionParser
import ConfigParser
import simplejson as json

def get_http_requester():
    try:
        h = Http(timeout=10)
    except Exception:
        h = Http()
    return h


hostname = "localhost"
port = "80"
storage_base_dir = "/storage/videos"
token = "token"
ssl = False
logfile = "/dev/stdout"
loglevel = 20


# command line options parser ##################################################

parser = OptionParser()
parser.add_option("-H", "--hostname", 
        dest="hostname", default=hostname,
        help="LiveR hostname (default: %s)" % hostname)
parser.add_option("-P", "--port", 
        dest="port", help="LiveR port number (default: %s)" % port, 
        default=port)
parser.add_option("-l", "--logfile",
        dest="logfile", help="Log file (default: %s)" % logfile,
        default=logfile)
parser.add_option("--loglevel",
        dest="loglevel", help="Log level (default: %s)" % loglevel,
        default=loglevel)
parser.add_option("-t", "--token",
        dest="token", help="Token for LiveR access (default: %s)" % token,
        default=token)
parser.add_option("--storagebasedir", 
        dest="storage_base_dir", help="Storage basedir (default: %s)" % storage_base_dir,
        default=storage_base_dir)
parser.add_option("--ssl", 
        dest="ssl", help="SSL ON/OFF (default: %s)" % ssl,
        action="store_true",
        default=ssl)
(options, args) = parser.parse_args()

hostname = options.hostname
port = options.port
storage_base_dir = options.storage_base_dir
token = options.token
ssl = options.ssl
logfile = options.logfile
loglevel = options.loglevel

# logging ######################################################################
import logging
hdlr = logging.FileHandler(logfile)
hdlr.setFormatter(logging.Formatter('%(levelname)s %(asctime)s %(message)s'))
logger = logging.getLogger('asm')
logger.addHandler(hdlr)
logger.setLevel(int(loglevel))

# setting up ###################################################################

logger.info("Default encoding: %s" % sys.getdefaultencoding())

liver_http_base="http://" + hostname + ":" + port
if ssl:
    liver_http_base="https://" + hostname + ":" + port
logger.info("LiveR base URL: %s" % liver_http_base)

getMoToDeleteURL = "%s/liver/api/external/get_mo_to_delete?token=%s" % ( liver_http_base,token )

headers = {'User-Agent': 'liver-get-mo-to-delete'}


# main action ##################################################################

try:
    h = get_http_requester()
    resp, content = h.request(getMoToDeleteURL, "GET", None , headers=headers)
    logger.debug("Response: %s" % resp)
    logger.debug("Content: %s" % content)
    j_content=json.loads(content)
    logger.debug("Result: %s" % j_content["result"])

    media_to_delete=j_content["response"]
    for i in media_to_delete:
        try:
            logger.info( "Removing %s from the hard disk" % ( i ))
            if i.startswith(storage_base_dir):
                os.remove(i)
            else:
                logger.warning(\
"Skipped file. Path is not in the storage base dir: %s... <> %s " \
                % (storage_base_dir,i))
        except Exception, e:
            logger.error( "Failed removing %s: %s" % ( i, repr(e)))

except Exception, e:
    logger.error("Errors during response procesing for '%s' org: %s" % (org, repr(e)))




