#!/usr/bin/env python2.7

import os
import sys
_APP_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
sys.path.insert(0, _APP_PATH)

import logging
import argparse

import ytad.config.log
import ytad.download
import ytad.client_manager

_LOGGER = logging.getLogger(__name__)

_DESCRIPTION = "YouTube video autodownloader."

def _get_args():
    parser = \
        argparse.ArgumentParser(
            description=_DESCRIPTION)

    parser.add_argument(
        '-p', '--playlist-id',
        action='append',
        default=[],
        help="Playlist ID")

    parser.add_argument(
        '-dp', '--download-path',
        help="Local download path. Omit to update but not download.")

    parser.add_argument(
        '-v', '--verbose',
        action='store_true',
        help="Increase verbosity")

    parser.add_argument(
        '-yu', '--youtube-username',
        help="YouTube username (for download)")

    parser.add_argument(
        '-yp', '--youtube-password',
        help="YouTube password (for download)")

    parser.add_argument(
        '-y2', '--youtube-twofactor',
        help="YouTube two-factor authentication code (Google Authenticator)")

    args = parser.parse_args()
    return args

def _main():
    args = _get_args()
    ytad.config.log.configure(args.verbose)

    assert \
        len(args.playlist_id) > 0, \
        "Please provide at least one playlist."

    cm = ytad.client_manager.get_client_manager()
    d = ytad.download.Download(
            cm, 
            ytdl_username=args.youtube_username, 
            ytdl_password=args.youtube_password,
            ytdl_twofactor=args.youtube_twofactor)

    for playlist_id in args.playlist_id:
        _LOGGER.info("Processing playlist: [{}]".format(playlist_id))
        d.check_and_download(playlist_id, download_path=args.download_path)

if __name__ == '__main__':
    _main()
