#!/usr/bin/python

# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Command line tool to pack audio related modules into a zip file."""

import argparse
import logging
import os
import subprocess


MODULES = ['audio_quality_measurement.py', 'audio_data.py', 'audio_analysis.py']
ENTRY = '__main__.py'
ENTRY_TARGET = 'check_quality.py'

def add_args(parser):
    """Adds command line arguments."""
    parser.add_argument('-d', '--debug', action='store_true', default=False,
                        help='Show debug message.')
    parser.add_argument('-o', '--out', type=str, default='audio_quality.zip',
                        help='Output file name. Default is audio_quality.zip.')
    parser.add_argument('-s', '--skip-cleanup', action='store_true', default=False,
                        help='Skip cleaning up temporary files. Default is False')


def parse_args(parser):
    """Parses args.

    @param parser: An argparse.ArgumentParser.

    @returns: The namespace parsed from command line arguments.

    """
    args = parser.parse_args()
    return args


def create_link():
    """Creates a symbolic link from ENTRY to ENTRY_TARGET.

    With this symlink, python can execute the zip file directly to execute
    ENTRY_TARGET.

    """
    command = ['ln', '-sf', ENTRY_TARGET, ENTRY]
    logging.debug('Link command: %s', command)
    subprocess.check_call(command)


def pack_files(out_file):
    """Packs audio related modules into a zip file.

    Packs audio related modules in MODULES into a zip file.
    Packs the symlink pointing to ENTRY_TARGET.

    @param out_file: Zip file name.

    """
    command = ['zip']
    command.append(out_file)
    command += MODULES
    command.append(ENTRY)
    command.append(ENTRY_TARGET)
    logging.debug('Zip command: %s', command)
    subprocess.check_call(command)


def check_packed_file(out_file):
    """Checks the packed file can be executed by python.

    @param out_file: Zip file name.

    """
    command = ['python', out_file, '--help']
    logging.debug('Check command: %s', command)
    output = subprocess.check_output(command)
    logging.debug('output: %s', output)


def cleanup():
    """Cleans up the symobolic link."""
    if os.path.exists(ENTRY):
        os.unlink(ENTRY)


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description='Pack audio related modules into a zip file.')

    add_args(parser)
    args = parse_args(parser)

    level = logging.DEBUG if args.debug else logging.INFO
    format = '%(asctime)-15s:%(levelname)s:%(pathname)s:%(lineno)d: %(message)s'
    logging.basicConfig(format=format, level=level)

    out_file = args.out

    try:
        create_link()
        pack_files(out_file)
        check_packed_file(out_file)
    finally:
        if not args.skip_cleanup:
            cleanup()

    logging.info('Packed file: %s', out_file)
