#!/usr/bin/env python3
from bibtools.pubmed import PubMed
from bibtools.scihub import SciHub
from bibtools.json2bibtex import json2bibtex
from bibtools.utils import argparse
from urllib.parse import urlencode
from pybasics import write_file
import sys
import re
import os


data, storage, formatter, bibtex, cite, abstract = argparse(sys.argv)

citations = []

for reference in data:

    print('Reference:', reference)

    if formatter:
        reference = formatter(reference)

    print('Reference:', reference)

    pub = PubMed(storage)

    pub.search(request=reference)

    for _id in pub.results['idlist']:

        print('PMID:', _id)

        pub.fetch(_id)

        if not os.path.exists(pub.fname + '.pdf'):

            try:
                pub.download(_id)

            except:
                print('PubMed.download(): except')

        if not os.path.exists(pub.fname + '.pdf'):

            try:
                sci = SciHub()
                sci.download(doi=pub.doi, pmid=pub.pmid, fname=pub.fname + '.pdf')

            except:
                print('SciHub.download(): except')

        pub.bibtex = json2bibtex(pub.json)
        
        header = pub.bibtex.split('@article{')[1].split(',')[0]
        
        if bibtex:
            write_file(pub.fname + '.bib', pub.bibtex)

        if cite:
            citation = pub.RawArticleTitle.strip('.') + '~\cite{' + header +'}' + '.'
            citations.append(citation)
            
        if abstract:
            abstractText = pub.AbstractText.strip('.') + '~\cite{' + header +'}' + '.'
            citations.append(abstractText)

if cite:
    print('\n\n'.join(citations))
