#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Finds files in directories.
"""

import fnmatch
import optparse
import os
import sys


def main(argv):
    parser = optparse.OptionParser()
    parser.add_option('--pattern', default='*', help='File pattern to match.')
    parser.add_option('--base-dir', help='base directory')
    parser.add_option('--return-relpath',
                      action='store_true',
                      help='return relative address from base directory')
    parser.add_option('--follow-symlinks',
                      action='store_true',
                      help='whether to follow links')
    options, directories = parser.parse_args(argv)

    for d in directories:
        if not os.path.exists(d):
            print('%s does not exist' % d)
            return 1
        if os.path.isfile(d):
            if options.return_relpath:
                if options.base_dir is not None:
                    if fnmatch.filter(d, options.pattern):
                        print(os.path.relpath(d, options.base_dir))
                else:
                    print("Please specify the relative base directory")
                    return 1
            else:
                if fnmatch.filter(d, options.pattern):
                    print(d)
            return 0
        elif not os.path.isdir(d):
            # if input path is not a directory nor a normal file, return error.
            print('%s is not a directory or a file' % d)
            return 1
        for root, _, files in os.walk(d, followlinks=options.follow_symlinks):
            for f in fnmatch.filter(files, options.pattern):
                if options.return_relpath:
                    if options.base_dir is not None:
                        print(
                            os.path.relpath(os.path.join(root, f),
                                            options.base_dir))
                    else:
                        print("Please specify the relative base directory")
                        return 1
                else:
                    print(os.path.join(root, f))


if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]))