import argparse
import requests


def main():
    parser = argparse.ArgumentParser(description="Sparql Query")
    parser.add_argument("--input_url", required=True, help="Input URL")
    parser.add_argument("--default_graph_uri", required=True, help="Default Graph URI")
    parser.add_argument("--query", required=True, help="SPARQL Query")
    args = parser.parse_args()

    sparql_query(args.input_url, args.default_graph_uri, args.query)


def sparql_query(input_url, default_graph_uri, query):
    url = f"{input_url}/tbl/sparql"

    headers = {"accept": "*/*", "Content-Type": "application/x-www-form-urlencoded"}
    payload = {
        "default-graph-uri": default_graph_uri,
        "format": "application/sparql-results+json",
        "labeled": "",
        "processId": "",
        "query": query,
        "with-imports": "",
    }

    response = requests.post(url, headers=headers, data=payload)

    if response.status_code == 200:
        return response.text
    else:
        error_message = (
            f"Request failed with status code {response.status_code}: {response.text}"
        )
        raise Exception(error_message)


if __name__ == "__main__":
    main()
