#!/usr/bin/env python3
#
# (c) 2016 Fetal-Neonatal Neuroimaging & Developmental Science Center
#                   Boston Children's Hospital
#
#              http://childrenshospital.org/FNNDSC/
#                        dev@babyMRI.org
#

import sys, os
sys.path.insert(1, os.path.join(os.path.dirname(__file__), '..'))

import argparse, socket, os, pman

str_defIP = [l for l in ([ip for ip in socket.gethostbyname_ex(socket.gethostname())[2] if not ip.startswith("127.")][:1], [[(s.connect(('8.8.8.8', 53)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]]) if l][0][0]

str_desc = """
        __ _       _
       / _(_)     | |
 _ __ | |_ _  ___ | |__
| '_ \|  _| |/ _ \| '_ \\
| |_) | | | | (_) | | | |
| .__/|_| |_|\___/|_| |_|
| |
|_|



                         A simple http file IO handler

    `pfioh' is a simple http-based file I/O handler/server allowing software
    agents to perform useful file transfers over http.

    `pfioh' handles HTTP REST-like requests on a given port -- it can accept
    incoming file data from a client, and can also return server-side file trees
    to a client.

    `pfioh' can also zip up/unzip file trees so that entire paths can be easily
    transferred.

"""

parser  = argparse.ArgumentParser(description = str_desc)

parser.add_argument(
    '--ip',
    action  = 'store',
    dest    = 'ip',
    default = str_defIP,
    help    = 'IP to connect.'
)
parser.add_argument(
    '--port',
    action  = 'store',
    dest    = 'port',
    default = '5055',
    help    = 'Port to use.'
)
parser.add_argument(
    '--quiet',
    help    = 'if specified, only echo JSON output from server response',
    dest    = 'b_quiet',
    action  = 'store_true',
    default = False
)
parser.add_argument(
    '--man',
    help    = 'request help',
    dest    = 'man',
    action  = 'store',
    default = ''
)
parser.add_argument(
    '--forever',
    help    = 'if specified, serve forever, otherwise terminate after single service.',
    dest    = 'b_forever',
    action  = 'store_true',
    default = False
)

args            = parser.parse_args()
args.port       = int(args.port)

# print(vars(args))
server          = pman.ThreadedHTTPServer((args.ip, args.port), pman.StoreHandler)
server.setup(args = vars(args))

if args.b_forever:
    server.serve_forever()
else:
    server.handle_request()
