#!/usr/bin/env python3

import json
import logging
import os
import subprocess
import sys
import traceback

from api_clients import api_client as apc
from configobj import ConfigObj

# create logger
logger = logging.getLogger()

# no logging
ch = logging.StreamHandler()
logging.disable(50)

# add ch to logger
logger.addHandler(ch)

if os.geteuid() != 0:
    print "Must be a root user."
    sys.exit(1)

# loading config file
try:
    config = ConfigObj("/etc/airtime/airtime.conf")
except Exception, e:
    print ("Error loading config file: %s", e)
    sys.exit(1)

api_client = apc.AirtimeApiClient(config)

try:
    # keep getting few rows at a time for current music_dir (stor
    # or watched folder).
    subtotal = 0
    while True:
        # return a list of pairs where the first value is the
        # file's database row id and the second value is the
        # filepath
        files = api_client.get_files_without_silan_value()
        total_files = len(files)
        if total_files == 0:
            break
        processed_data = []
        total = 0
        for f in files:
            full_path = f["fp"]
            # silence detect(set default queue in and out)
            try:
                command = ["silan", "-b" "-f", "JSON", full_path]
                proc = subprocess.Popen(command, stdout=subprocess.PIPE)
                out = proc.communicate()[0].strip("\r\n")
                info = json.loads(out)
                data = {}
                data["cuein"] = str("{0:f}".format(info["sound"][0][0]))
                data["cueout"] = str("{0:f}".format(info["sound"][-1][1]))
                data["length"] = str("{0:f}".format(info["file duration"]))
                processed_data.append((f["id"], data))
                total += 1
                if total % 5 == 0:
                    print "Total %s / %s files has been processed.." % (
                        total,
                        total_files,
                    )
            except Exception, e:
                print e
                print traceback.format_exc()
        print "Processed: %d songs" % total
        subtotal += total

        try:
            print api_client.update_cue_values_by_silan(processed_data)
        except Exception, e:
            print e
            print traceback.format_exc()
    print "Total %d songs Processed" % subtotal

except Exception, e:
    print e
    print traceback.format_exc()