#!/usr/bin/env python3.10

import argparse
import sys
import logging
from os.path import join, dirname, normpath

sys.path.append(join(dirname(normpath(__file__)), ".."))

from rdfhash.logger import logger
from rdfhash.helper import hashlib_methods
from rdfhash import rdfhash


def parse_args(args=list[str]) -> argparse.Namespace:
    """Use argparse to parse list of arguments."""
    parser = argparse.ArgumentParser(
        description="Hash RDF blank nodes with sha256.",
    )

    parser.add_argument("-d", "--data", required=True,
                        help="Input data. (RDF)")

    parser.add_argument(
        "-f",
        "--format",
        help="Input format.",
        default=None,
        choices=["turtle", "n-triples", "trig", "n-quads", "n3", "rdf"],
    )

    parser.add_argument(
        "-m",
        "--method",
        help="Hash method.",
        default="sha256",
        choices=hashlib_methods.keys(),
    )

    parser.add_argument(
        "-a",
        "--accept",
        help="Accept format.",
        default=["turtle"],
        nargs="+",
    )

    parser.add_argument(
        "-v",
        "--verbose",
        help="Show 'info' level logs.",
        action="store_true",
    )

    parser.add_argument(
        "--debug",
        help="Show 'debug' level logs.",
        action="store_true",
    )

    return parser.parse_args(args)


if __name__ == "__main__":
    # Parse arguments.
    args = parse_args(sys.argv[1:])

    if args.debug:
        logger.setLevel(logging.DEBUG)
    elif args.verbose:
        logger.setLevel(logging.INFO)

    graph = rdfhash(args.data, args.format, args.method)

    print(graph.serialize(format=args.accept[0]))
