#!/usr/bin/env python

from argparse import ArgumentParser
from wos.utils import query, doi_to_wos
from wos import WosClient

import logging
import suds

logging.getLogger('suds.client').setLevel(logging.CRITICAL)

def main():
    """Main method."""
    parser = ArgumentParser(description='Query the Web of Science.')
    parser.add_argument('--close', action='store_true', help="Close session.")
    subparsers = parser.add_subparsers(help='sub-command help')

    g_auth = parser.add_argument_group('authentication',
                                     'API credentials for premium access.')
    g_auth.add_argument('-u', '--user', type=str, default=None)
    g_auth.add_argument('-p', '--password', type=str, default=None)
    g_auth.add_argument('-s', '--sid', type=str, default=None)

    s_query = subparsers.add_parser('query', help='query the Web of Science.')
    s_query.add_argument('QUERY', help='search query')
    s_query.add_argument('-c', '--count', type=int, default=5)
    s_query.add_argument('-o', '--offset', type=int, default=1)

    s_doi = subparsers.add_parser('doi', help='get the WOS ID from the DOI.')
    s_doi.add_argument('DOI', help='Document Object Identifier')

    s_connect = subparsers.add_parser('connect', help='connect and get an SID.')

    args = parser.parse_args()

    try:
        with WosClient(args.user, args.password, args.sid, args.close) as wc:
            if 'QUERY' in args:
                print(query(wc, args.QUERY, '', args.count, args.offset))
            if 'DOI' in args:
                print(doi_to_wos(wc, args.DOI))
    except suds.WebFault as wf:
        print('ERROR: %s' % wf.fault.faultstring)
    except Exception as e:
        print('ERROR: %s' % str(e))

if __name__ == '__main__':
    main()
