#!python

import argparse
from os.path import expanduser
import tempfile
from pathlib import Path
import requests
import sys
from transfersh_client import TransfershClient
from transfersh_client import __VERSION__
import yaml

verbose = 0
config = None
files_or_dirs = list()

home_transfershrc =  expanduser('~') + '/.transfersh/config.yaml'
etc_transfershrc = '/etc/transfersh/config.yaml'

if Path(home_transfershrc).is_file():
    config = yaml.load(open(home_transfershrc, 'r'))
elif Path(etc_transfershrc).is_file():
    config = yaml.load(open(etc_transfershrc, 'r'))

argparse_server_required = True if config is None else False
argparse_files_required = True if sys.stdin.isatty() else False

parser = argparse.ArgumentParser(description='Transfersh client.')
parser.add_argument('--version', action='version', version='%(prog)s ' + __VERSION__)
parser.add_argument('--verbose', '-v', action='count')
if argparse_files_required:
    parser.add_argument('files', metavar='F', nargs='+', help="Files for upload")
parser.add_argument('--server', help='Transfersh server url', required=argparse_server_required)
parser.add_argument('-d', '--max-downloads', help='Max possible downloads', required=False, default=100)
parser.add_argument('-t', '--max-days', help='Max days saved', required=False, default=30)
parser.add_argument('-e', '--encrypt', help='symmetric gpg encryted upload', action='count')
args = parser.parse_args()
config['args'] = args

if args.server:
    config['server'] = args.server
transfersh_client = TransfershClient(config)


def stderrprint(*printargs, **kwargs):
    print(*printargs, file=sys.stderr, **kwargs)


results = list()
if sys.stdin.isatty():
    results = transfersh_client.upload(files=args.files)
else:
    with tempfile.NamedTemporaryFile() as tmpfile:
        tmpfile.write(str.encode(sys.stdin.read()))
        tmpfile.flush()
        results = transfersh_client.upload(files=[tmpfile.name])

for result in results:
    if isinstance(result['result'], str):
        print(result['result'])
    if isinstance(result['result'], requests.Response):
        if 'password' in result and result['password'] is not None:
            print(result['result'].text + ' (' + result['password'] + ')')
        else:
            print(result['result'].text)
