import json
import os

from datamite.models.dataProductResourcesBody import DataProductResourcesModel
from fastapi import HTTPException

from app.utils.create_asset import invoke_create_asset
from app.utils.create_policy import invoke_create_policy, checkPolicyId
from app.utils.create_contract_definition import invoke_create_contract_definition

def load_asset_edc(body:DataProductResourcesModel, dataResouceAPi_URL:str):

    header_authorization = os.getenv("HEADER_AUTHORIZATION")

    # asset_id = asset_id.replace(os.getenv("DOMAIN_PART"),"")
    # Create asset
    for dataresource in body.dataResources:
        formatType = body.dataAccount[0].formatType
        if dataresource.dataResourceInfo is not None:
            create_asset_response = invoke_create_asset(dataresource.dataResourceInfo.name, body.dataProductName,
                                                        formatType, dataresource.dataResourceInfo.description,
                                                        dataResouceAPi_URL,
                                                        header_authorization)
            if not create_asset_response.ok:

                raise HTTPException(status_code=400, detail=json.loads(create_asset_response.text))

            # Create policy
            policy_id = os.getenv("POLICY_ID")
            contract_id = os.getenv("CONTRACT_ID")
            policyExist = checkPolicyId(policy_id, header_authorization)
            if not policyExist:
                create_policy_response = invoke_create_policy(policy_id, header_authorization)
                print (json.loads(create_policy_response.text))



            create_contract_response = invoke_create_contract_definition(contract_id, policy_id,
                                                                         dataresource.dataResourceInfo.name,
                                                                         header_authorization)

            print(json.loads(create_contract_response.text))


    print (f'Asset {body.dataProductName} created')
    return f'Asset {body.dataProductName} created'