#!/usr/bib/env python
from __future__ import unicode_literals
from __future__ import print_function
import argparse
import textwrap
from arxivcheck.arxiv import check_arxiv_published


def save_output_bibs(bibs, output_file):
    with open(output_file, 'w') as bibfile:
        for bib in bibs:
            bibfile.write("{}\n".format(bib))


def main():
    parser = argparse.ArgumentParser(
        prog="arxivcheck",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description=textwrap.dedent('''\
        Convert a list of arxivs in a bibfile.
        You also can convert a simple arxiv item, like:
        $ arxivcheck 0901.2686
        or
        $ arxivcheck --title Periodic table for topological insulators
        Or you also can interact with multiple results using the following command
        $ arxivcheck --ask --title Periodic table for topological insulators
        -----------------------------------------------------
            @author: Bruno Messias
            @email: messias.physics@gmail.com
            @telegram: @brunomessias
            @github: https://github.com/bibcure/arxivtobib
        ''')
    )

    parser.add_argument(
        "--inputfile", "-i",
        type=argparse.FileType("r"),
        help="input file"
    )
    parser.add_argument(
        "--output", "-o",
        help="bibtex output file"
    )
    parser.add_argument(
        "--title", "-t",
        dest="title",
        action="store_true",
        help="search in arxiv by title"
    )
    parser.add_argument("--ask", "-ask",
                        dest="ask",
                        action="store_true",
                        help="don't get the first found"
                        )


    parser.set_defaults(ask=False)
    parser.set_defaults(title=False)
    args = parser.parse_known_args()

    inlinearxiv = len(args[1]) > 0
    titlesearch = args[0].title
    get_first = args[0].ask is False
    field = "ti" if titlesearch else "id"
    if inlinearxiv or titlesearch:
        arxivs = [" ".join(args[1])]
    else:
        arxivs = args[0].inputfile.read()
        arxivs = [arxiv for arxiv in arxivs.split("\n") if arxiv != ""]
    bibs = []
    for arxiv in arxivs:
        found, published, bib = check_arxiv_published(arxiv, field, get_first)
        if found:
            bibs.append(bib)
    if len(bibs) > 0:
        if inlinearxiv or titlesearch:
            print("\n")
            print(bibs[0])
            print("\n")
        else:
            save_output_bibs(bibs, args[0].output)


if __name__ == "__main__":
    main()
