#!python

import argparse
import configparser
import os
import tempfile
from pathlib import Path
import requests
import sys
from transfersh_client import TransfershClient
from transfersh_client import __VERSION__

config = configparser.ConfigParser()


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


verbose = 0

files_or_dirs = list()

home_transfershrc = os.path.expanduser('~') + '/.transfersh/config.cfg'
etc_transfershrc = '/etc/transfersh/config.cfg'

if Path(home_transfershrc).is_file():
    config.read_file(open(home_transfershrc))
elif Path(etc_transfershrc).is_file():
    config.read_file(open(etc_transfershrc))


argparse_server_required = True if not config.has_option('', 'server') 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()

server = args.server if args.server else config.get('DEFAULT', 'server')

try:
    transfersh_client = TransfershClient(
        server_url=server,
        max_days=args.max_days,
        max_downloads=args.max_downloads)

    results = list()
    if sys.stdin.isatty():
        results = transfersh_client.upload(
            files=args.files,
            encrypt=False if args.encrypt is None else True)
    else:
        with tempfile.NamedTemporaryFile() as tmpfile:
            tmpfile.write(str.encode(sys.stdin.read()))
            tmpfile.flush()
            results = transfersh_client.upload(
                files=[tmpfile.name],
                encrypt=True if args.encrypt > 0 else False)

    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)
except Exception as e:
    stderrprint('ERROR: ' + str(e))
    sys.exit(1)
