#!/usr/bin/python
# Copyright 2010 Google Inc.
# Licensed under the Apache License, Version 2.0
# http://www.apache.org/licenses/LICENSE-2.0

# Google's Python Class
# http://code.google.com/edu/languages/google-python-class/

import sys
import re
import os
import os.path
import shutil
import subprocess

"""Copy Special exercise
"""


# +++your code here+++
# Write functions and modify main() to call them
def get_special_paths(dirs):
    '''Look for files with __w__ pattern and return abs path.
    '''
    files = []
    for dir in dirs:
        filenames = os.listdir(dir)
        for filename in filenames:
            if re.search('__.*?__\.+?', filename):
                files.append(os.path.abspath(os.path.join(dir, filename)))
    return files


def copy_to(paths, dir):
    for path in paths:
        for file in get_special_paths(path):
            try:
                shutil.copy(file, dir)
            except shutil.SameFileError as sfe:
                print(sfe)


def zip_to(paths, zip_path):
    for path in paths:
        for file in get_special_paths(path):
            try:
                print(f'zip -j {zip_path} {file}')
                subprocess.run(['zip', '-j', zip_path, file], check=True)
            except subprocess.CalledProcessError as cpe:
                print(cpe)


def main():
    # This basic command line argument parsing code is provided.
    # Add code to call your functions below.

    # Make a list of command line arguments, omitting the [0] element
    # which is the script itself.
    args = sys.argv[1:]
    if not args:
        print("usage: [--todir dir][--tozip zipfile] dir [dir ...]")
        sys.exit(1)

    # todir and tozip are either set from command line
    # or left as the empty string.
    # The args array is left just containing the dirs.
    todir = ''
    if args[0] == '--todir':
        todir = args[1]
        del args[0:2]

    tozip = ''
    if args[0] == '--tozip':
        tozip = args[1]
        del args[0:2]

    if len(args) == 0:
        print("error: must specify one or more dirs")
        sys.exit(1)

    # +++your code here+++
    # Call your functions
    dirs = args
    if todir:
        copy_to(dirs, todir)
    elif tozip:
        zip_to(dirs, tozip)
    else:
        print(get_special_paths(dirs))


if __name__ == "__main__":
    main()
