import argparse
import requests


def main():

    parser = argparse.ArgumentParser(
        description="EDG Asset Collection Creation and Import"
    )
    parser.add_argument("--input_url", required=True, help="Input URL")
    parser.add_argument(
        "--asset_collection_id", required=True, help="Asset Collection ID"
    )
    parser.add_argument(
        "--asset_collection_name", required=True, help="Asset Collection Name"
    )
    parser.add_argument("--asset_type", required=True, help="Asset Type")
    parser.add_argument("--import_file_name", required=True, help="Import File Name")
    args = parser.parse_args()

    edg_create(
        args.input_url,
        args.asset_collection_id,
        args.asset_collection_name,
        args.asset_type,
    )

    edg_import(args.input_url, args.asset_collection_id, args.import_file_name)


def edg_create(input_url, asset_collection_id, asset_collection_name, asset_type):
    url = f"{input_url}/tbl/service/_/tbs/createAssetCollection"

    params = {
        "id": asset_collection_id,
        "name": asset_collection_name,
        "typeLabel": asset_type,
    }

    response = requests.post(url, params=params)

    if response.status_code != 200:
        error_message = f"Request failed for create asset collection with status code {response.status_code}: {response.text}"
        raise Exception(error_message)


def edg_import(input_url, asset_collection_id, import_file_name):
    url = f"{input_url}/tbl/service/{asset_collection_id}/tbs/importRDFFile"
    headers = {
        "accept": "application/json",
    }

    data = {"fileName": import_file_name, "record": "true", "format": "turtle"}

    files = {
        "file": (import_file_name, open(import_file_name, "rb"), "text/turtle"),
    }

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

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


if __name__ == "__main__":
    main()
