#!/usr/bin/env python
# -*- coding: utf-8 -*-

#
# Copyright (c) 2020 Huawei Device Co., Ltd.
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

import argparse
import os
import shutil
import sys
from utils import makedirs


def copytree(src: str, dst: str, symlinks: bool=False, ignore=None):
    src = os.path.normpath(src)
    for item in os.listdir(src):
        if '.git' in item or '.repo' in item:
            continue
        src_path = os.path.join(src, item)
        dst_path = os.path.join(dst, item)
        if os.path.isdir(src_path):
            try:
                shutil.copytree(src_path, dst_path, symlinks)
            except Exception as e:
                print('Warning :{}\nIgnore invalid symlink!'.format(
                    str(e.args[0])))
        else:
            shutil.copy2(src_path, dst_path)


def main():
    parser = argparse.ArgumentParser(
        description='A common directory and file copy.')
    parser.add_argument(
        '--src_type',
        help='src type to copy.')
    parser.add_argument(
        '--src',
        help='List the sources to copy.',
        required=True)
    parser.add_argument(
        '--dest_dir',
        help='Path that the sources should be copied to.',
        required=True)

    args = parser.parse_args()

    out_dir = args.dest_dir
    if not os.path.exists(out_dir):
        makedirs(out_dir)

    if args.src_type == "file" or os.path.isfile(args.src):
        shutil.copy(args.src, out_dir)
        return 0

    source_dir = args.src
    if not os.path.exists(source_dir):
        raise Exception(f'{source_dir} is not exist!')
    copytree(source_dir, out_dir)

    return 0


if __name__ == '__main__':
    sys.exit(main())